如何在Ubuntu 16.04上安装Docker Compose

Docker是一个伟大的工具,但是为了充分利用其潜力,应用程序的每个组件都应该在自己的容器中运行。对于具有大量组件的复杂应用程序,编排所有容器以启动,通信和...

介绍

Docker是自动化软件容器内的Linux应用程序的部署一个伟大的工具,而是要充分利用应用程序的其潜在的各组分应在其自己单独的容器中运行。对于具有大量组件的复杂应用程序,协调所有容器以启动,通信和一起关闭可能很快变得笨重。 Docker社区想出了一个叫做流行的解决方案 fig ,它允许您使用一个YAML文件,以协调所有的Docker容器和配置。 这成为如此受欢迎,Docker团队决定基于图源,现在已不建议在做Docker撰写 。 Docker Compose使用户更容易协调Docker容器的进程,包括启动,关闭和设置容器内链接和卷。 在本教程中,我们将向您展示如何安装Docker Compose,这是一个帮助您管理多容器应用程序的工具。

先决条件

要跟随这篇文章,你将需要一个Ubuntu 16.04服务器与以下: 一旦这些都到位,你就准备好跟随。 注意:即使先决条件给出了在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
这将打印当前版本:
docker-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
当根本没有本地图像时,只有列标题显示:
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
现在,同时还在~/hello-world目录,我们将执行以下命令:
docker-compose up
我们第一次运行这个命令,如果没有本地图像命名hello-world ,Docker撰写将会将其从Docker Hub公共仓库:
Pulling 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程序,这又证实了安装似乎是工作:
. . .
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 |
. . .
然后它打印一个解释它做了什么:
1. 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
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
我们可以看到容器的信息,我们将需要在接下来的步骤,通过使用-a标志,显示了所有容器,而不仅仅是活跃的:
docker ps -a
CONTAINER 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

结论

我们现在已经安装了Docker Compose,通过运行Hello World示例测试我们的安装,并删除了测试映像和容器。 虽然Hello World示例确认了我们的安装,但是简单的配置并没有显示Docker Compose的一个主要优点 - 能够同时使一组Docker容器上下移动。要查看Docker撰写的行动力,你可能想看看这个实际的例子, 如何在Ubuntu 16.04与Docker和Docker撰写配置持续集成测试环境