介绍
Docker是自动化软件容器内的Linux应用程序的部署一个伟大的工具,而是要充分利用应用程序的其潜在的各组分应在其自己单独的容器中运行。对于具有大量组件的复杂应用程序,协调所有容器以启动,通信和一起关闭可能很快变得笨重。 Docker社区想出了一个叫做流行的解决方案 fig ,它允许您使用一个YAML文件,以协调所有的Docker容器和配置。 这成为如此受欢迎,Docker团队决定基于图源,现在已不建议在做 Docker撰写 。 Docker Compose使用户更容易协调Docker容器的进程,包括启动,关闭和设置容器内链接和卷。 在本教程中,我们将向您展示如何安装Docker Compose,这是一个帮助您管理多容器应用程序的工具。先决条件
要跟随这篇文章,你将需要一个Ubuntu 16.04服务器与以下:- 使用sudo特权的非root用户 ( 与Ubuntu 16.04初始服务器设置介绍了如何设置起来。)
- 从第1步和第2步中的说明进行安装Docker如何在Ubuntu 16.04安装和使用Docker
docker
在这篇文章中的命令应该只要安装Docker上的其他操作系统的工作。
第1步 - 安装Docker Compose
我们将从Docker GitHub存储库安装Docker Compose开始。下面的命令是一个比你会发现上略有不同的 发布页面。 通过使用-o
标志指定输出文件里,而不是重定向输出,此语法避免运行到许可使用时,引起拒绝错误
sudo
。 我们会检查
当前版本 ,如果有必要,在下面的命令更新:
sudo curl -o /usr/local/bin/docker-compose -L "https://github.com/docker/compose/releases/download/1.8.1/docker-compose-$(uname -s)-$(uname -m)"
接下来,我们将设置权限:
sudo chmod +x /usr/local/bin/docker-compose
然后,我们将通过检查版本来验证安装是否成功:
docker-compose -v
这将打印当前版本:
Outputdocker-compose version 1.8.1, build 878cff1
现在我们已经安装了Docker Compose,我们准备好运行一个“Hello World”示例。
第2步 - 使用Docker Compose运行容器
公众Docker注册表,Docker中心,包括演示和测试一个 Hello World的形象。它说明了使用Docker Compose运行容器所需的最少配置:调用单个映像的YAML文件: 首先,我们将创建一个YAML文件的目录并移动到它:mkdir hello-world
cd hello-world
然后,我们将创建YAML文件:
nano docker-compose.yml
将以下内容放入文件,保存文件,然后退出文本编辑器:
docker-compose.yml
my-test:
image: hello-world
YAML文件中的第一行用作容器名称的一部分。第二行指定用于创建容器的图像。当我们运行命令
docker-compose up
它会寻找由我们指定名称的局部图像
hello-world
。有了这个,我们将保存并退出文件。 我们可以在我们的系统上的图像手动查找
docker images
的命令:
docker images
当根本没有本地图像时,只有列标题显示:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
现在,同时还在
~/hello-world
目录,我们将执行以下命令:
docker-compose up
我们第一次运行这个命令,如果没有本地图像命名
hello-world
,Docker撰写将会将其从Docker Hub公共仓库:
OutputPulling my-test (hello-world:latest)...
latest: Pulling from library/hello-world
c04b14da8d14: Downloading [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest
. . .
拉图像后,
docker-compose
创建一个容器,高度重视,并运行
hello程序,这又证实了安装似乎是工作:
Output. . .
Creating helloworld_my-test_1...
Attaching to helloworld_my-test_1
my-test_1 |
my-test_1 | Hello from Docker.
my-test_1 | This message shows that your installation appears to be working correctly.
my-test_1 |
. . .
然后它打印一个解释它做了什么:
Output of docker-compose up1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
Docker容器只只要在命令激活运行,所以一旦
hello
运行完毕后,容器停止。 因此,当我们在看活动的进程,列标题将出现,但
hello-world
容器不会上市,因为它没有运行。
docker ps
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
我们可以看到容器的信息,我们将需要在接下来的步骤,通过使用
-a
标志,显示了所有容器,而不仅仅是活跃的:
docker ps -a
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06069fd5ca23 hello-world "/hello" 35 minutes ago Exited (0) 35 minutes ago drunk_payne
这将显示我们完成后需要移除容器的信息。
第3步 - 删除映像(可选)
为了避免使用不必要的磁盘空间,我们将删除本地映像。要做到这一点,我们需要删除所有引用使用图像容器docker rm
命令,后跟容器ID或名称。 下面,我们正在使用从容器ID
docker ps -a
我们只是跑命令。请务必替换容器的ID:
docker rm 06069fd5ca23
一旦删除了引用该图片的所有容器,我们就可以删除该图片:
docker rmi hello-world