立即了解Docker和Docker compose入门
Docker 是什么
这项技术是为了解决部署问题而使用容器化服务器虚拟化技术而开发的。
服务器虚拟化
服务器虚拟化是指通过在一台”主机机器”上虚拟运行另一台”客户机器”来实现,将进行虚拟化的一台”主机机器”称为主机,被虚拟化的另一台”客户机器”称为客户机。
例如,可以通过使用像亚马逊EC2这样的虚拟软件Xen,在物理服务器上虚拟运行多台服务器来实现。
服务器虚拟化技术主要有以下两种。
虚拟机技术
如上所述,云服务如Amazon EC2中所使用的虚拟化方式主要依靠虚拟化超级监视器的功能。通过将硬件和固件级别完全虚拟化,可以在某个操作系统的机器上运行独立的操作系统机器。
容器虚拟化
容器虚拟化是一种在Docker中使用的虚拟化方式。
在容器虚拟化中,机器上只运行一个操作系统。将该操作系统内部的用户空间隔离开来,分别控制每个进程、文件、网络、CPU/内存/设备等资源,并将封闭的用户空间称为“容器”。因此,客户操作系统需要与主机机器相同。
Docker是一种工具,它利用了Linux容器(LXC)的底层内核功能来实现这种容器化虚拟化技术,简化了对容器内应用程序执行环境的管理。
Docker的优势
-
- アプリケーション実行環境に必要十分なものをパッケージングし、再現性を保ったままデプロイできる。
-
- VMと比較してパフォーマンスの劣化が少なく、仮想マシンの起動が早い
-
- それぞれのアプリケーションが独立した環境で実行される
-
- パッケージング、デプロイ、起動のどれもが簡単に行える
-
- 結果として、次のワークフローが可能になる
-
- 開発者がアプリケーションをイメージに保存し、
-
- そのイメージをシステム管理者に共有し、
-
- システム管理者が本番環境までイメージを運び、
- 開発環境で動いていたアプリケーションをそのまま本番環境で動かす
Docker容器
在Docker中,虚拟机被称为Docker容器或者容器。每个容器都是独立的,可以创建、启动、停止和删除。
Docker 镜像
需要一个基础映像才能创建虚拟机。在Docker中,称为Docker映像或者只是映像。
在以前,将应用程序保存为映像被称为打包,但是在Docker中,被称为构建映像。可以从一个映像创建多个容器。
构建Docker镜像主要有三种方法:
– 从Docker Hub获取
– 提交容器
– 使用Dockerfile构建
这些构建方法的主要区别是手动创建图像还是自动创建图像。
使用Dockerfile作为唯一操作来进行所有处理,包括安装和执行命令等,被认为是最佳实践。
最佳实践 (zuì jiā shí
-
- Dockerfileを使う
-
- コンテナレイヤのサイズを抑え、レイヤ数を最小限に
-
- .dockerignoreを使う
-
- コンテナはいつでも捨てれるようにする
-
- シンプルに保つ
- 1コンテナ1プロセス
编写Dockerfile的基本方针是创建一个小的镜像。为了减少层数,可以使用 && 和 \ 连接相关的命令来减少层数。但是需要注意的是,如果连接过多,将无法享受到使用缓存进行有效构建的好处。通过使用.dockerignore文件和删除不必要的文件,可以进一步减小镜像的大小。
如果镜像较小,则构建、推送、拉取和容器启动所需的时间将变短。
容器可以随时被丢弃,满足以下条件:
– 进程可以在秒级时间内启动和停止
– 容器的配置和应用程序代码分离
– 无状态(数据存储在外部)
– 输出日志到容器外部
确保满足上述条件。
一个容器一个进程是指将应用程序服务器容器、Web服务器容器或Fluentd容器等分别单独启动,然后进行协作。保持一个容器一个进程的好处是,在只需要重启、更新、垂直/水平扩展某个服务,或者希望更换其他中间件时更容易进行适应。
如何管理跨多个容器的服务?
Docker Compose是什么?
用于多容器管理的管弦工具。
使用Docker Compose,可以批量管理由多个容器组成的系统。(使用YAML文件)
使用Docker Compose的能力
-
- 複数のコンテナをコードで管理
-
- コンテナの同時起動・停止
-
- コンテナのスケール
- ネットワーク機能に対応
可以在YML文件中按照以下方式进行编写。
mysql:
image: mysql:5.6.23
environment:
MYSQL_ROOT_PASSWORD: 'pass'
ports:
- '3306:3306'
nginx:
build: nginx
ports:
- '8080:80'
links:
- app
app:
build: .
ports:
- "80:80"
- '3000:3000'
links:
- mysql
可以使用这样的方式来批量管理多个容器,而且还能与大多数docker run选项相配合,从而轻松进行管理。
有一种叫做Docker Swarm的方法可以管理多个服务器,但这是下次再说。