如何在Ubuntu 18上安装Docker Compose
介绍
Docker是一个很好的工具,用于在软件容器中自动部署Linux应用程序,但要充分利用其潜力,应用程序的每个组件都应该在自己的单独容器中运行。对于具有大量组件的复杂应用程序,编排所有容器以启动,通信和关闭可能很快变得难以处理。
Docker社区提出了一个名为Fig的流行解决方案,它允许您使用单个YAML文件来编排所有Docker容器和配置。这变得如此受欢迎,以至于Docker团队决定基于Fig源制作Docker Compose,现在已弃用。Docker Compose使用户可以更轻松地编排Docker容器的进程,包括启动,关闭和设置容器内链接和卷。
在本教程中,我们将向您展示如何安装最新版本的Docker Compose以帮助您管理多容器应用程序。
准备
要阅读本文,您需要一台具有以下内容的Ubuntu 18.04服务器:
- 一台已经设置好可以使用
sudo
命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。 - 安装Docker。
一旦这些到位,您就可以随时跟进了。
注意:尽管前提条件提供了在Ubuntu 18.04上安装Docker的说明,但只要安装了Docker,本文中的docker
命令就可以在其他操作系统上运行。
第1步 - 安装Docker Compose
虽然我们可以从官方的Ubuntu存储库安装Docker Compose,但它是最新版本背后的几个次要版本,所以我们将从Docker的GitHub存储库安装Docker Compose。以下命令与您在“ 版本”页面上找到的命令略有不同。通过使用-o
标志首先指定输出文件而不是重定向输出,此语法可避免遇到使用sudo时导致的权限被拒绝错误``。
我们将检查当前版本,如有必要,请在以下命令中进行更新:
1 | sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose |
接下来我们将设置权限:
1 | sudo chmod +x /usr/local/bin/docker-compose |
然后我们将通过检查版本来验证安装是否成功:
1 | docker-compose --version |
这将打印出我们安装的版本:
1 | docker-compose version 1.21.2, build a133471 |
现在我们已经安装了Docker Compose,我们已准备好运行“Hello World”示例。
第2步 - 使用Docker Compose运行容器
公共Docker注册表Docker Hub包含一个用于演示和测试的Hello World镜像。它说明了使用Docker Compose运行容器所需的最小配置:调用单个映像的YAML文件:
首先,我们将为YAML文件创建一个目录并移入其中:
1 | mkdir hello-world |
然后,我们将创建YAML文件:
1 | nano docker-compose.yml |
将以下内容放入文件,保存文件,然后退出文本编辑器:
1 | my-test: |
YAML文件中的第一行用作容器名称的一部分。第二行指定用于创建容器的镜像。当我们运行docker-compose up
命令时,它将按我们指定的名称查找本地镜像hello-world
。有了这个,我们将保存并退出该文件。
我们可以使用以下docker images
命令手动查看系统上的镜像:
1 | docker images |
当根本没有本地镜像时,只显示列标题:
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
现在,在仍然在~/hello-world
目录中时,我们将执行以下命令:
1 | docker-compose up |
我们第一次运行命令时,如果没有指定本地映像hello-world
,Docker Compose将从Docker Hub公共存储库中提取它:
1 | Pulling my-test (hello-world:latest)... |
拉动镜像后,docker-compose
创建一个容器,附加并运行hello程序,然后确认安装似乎正在工作:
1 | . . . |
然后它打印出它所做的解释:
1 | 1. The Docker client contacted the Docker daemon. |
Docker容器只在命令处于活动状态时才运行,因此一旦hello
完成运行,容器就会停止。因此,当我们查看活动进程时,将显示列标题,但hello-world
不会列出容器,因为它没有运行。
1 | docker ps |
通过使用-a
显示所有容器的标志,我们可以看到容器信息,我们将在下一步中使用它,而不仅仅是活动容器:
1 | docker ps -a |
这将显示我们完成后删除容器所需的信息。
第3步 - 删除镜像(可选)
为避免使用不必要的磁盘空间,我们将删除本地映像。为此,我们需要使用docker rm
命令删除引用该镜像的所有容器,然后删除CONTAINER ID或NAME。下面,我们使用我们刚刚运行的docker ps -a
命令中的CONTAINER ID 。请务必替换容器的ID:
1 | docker rm 06069fd5ca23 |
一旦删除了引用该镜像的所有容器,我们就可以删除该镜像:
1 | docker rmi hello-world |
结论
我们现在已经安装了Docker Compose,通过运行Hello World示例测试了我们的安装,并删除了测试镜像和容器。
虽然Hello World示例确认了我们的安装,但简单的配置并没有显示Docker Compose的主要优点之一 - 能够同时上下一组Docker容器。