Docker简化了在容器中管理应用程序流程的过程。尽管容器在某些方面类似于虚拟机,但它们更轻便且对资源友好。这使开发人员可以将应用程序环境分解为多个隔离的服务。
对于依赖于几种服务的应用程序,将所有容器编排在一起以一起启动,通信和关闭可能很快变得很麻烦。Docker Compose是一个工具,可让您基于YAML文件中设置的定义运行多容器应用程序环境。它使用服务定义来构建具有多个可以共享网络和数据量的容器的完全可自定义的环境。
在本指南中,我们将演示如何在Ubuntu 20.04服务器上安装Docker Compose以及如何开始使用此工具。
要阅读本文,您将需要:
为了确保我们获得Docker Compose的最新稳定版本,我们将从其官方Github存储库中下载该软件。
首先,在其发行页面中确认可用的最新版本。在撰写本文时,最新的稳定版本是1.26.0
。
以下命令将下载该1.26.0
发行版并将可执行文件保存在/usr/local/bin/docker-compose
,这将使该软件可全局访问为docker-compose
:
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
接下来,设置正确的权限,以使该docker-compose
命令可执行:
sudo chmod +x /usr/local/bin/docker-compose
要验证安装是否成功,可以运行:
docker-compose --version
您将看到类似于以下的输出:
Output
docker-compose version 1.26.0, build 8a1c60f6
Docker Compose现在已成功安装在您的系统上。在下一节中,我们将看到如何设置docker-compose.yml
文件以及如何使用此工具启动并运行容器化环境。
docker-compose.yml
文件为了演示如何设置docker-compose.yml
文件以及如何使用Docker Compose,我们将使用来自公共Docker注册表Docker Hub的官方Nginx映像创建一个Web服务器环境。此容器化环境将提供一个静态HTML文件。
首先在您的主文件夹中创建一个新目录,然后移入该目录:
mkdir ~/compose-demo
cd ~/compose-demo
在此目录中,设置一个应用程序文件夹作为您的Nginx环境的文档根目录:
mkdir app
使用您喜欢的文本编辑器,index.html
在app
文件夹中创建一个新文件:
nano app/index.html
将以下内容放入此文件:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Docker Compose Demo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>
<h1>This is a Docker Compose Demo Page.</h1>
<p>This content is being served by an Nginx container.</p>
</body>
</html>
完成后,保存并关闭文件。如果使用nano
,则可以通过键入CTRL+X
,Y
和ENTER
进行确认。
接下来,创建docker-compose.yml
文件:
nano docker-compose.yml
在docker-compose.yml
文件中插入以下内容:
version: '3.7'
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./app:/usr/share/nginx/html
该docker-compose.yml
文件通常从version
定义开始。这将告诉Docker Compose我们正在使用哪个配置版本。
然后services
,我们有一个块,我们在其中设置了该环境一部分的服务。在我们的例子中,我们有一个名为的服务web
。该服务使用nginx:alpine
映像,并使用ports
伪指令设置端口重定向。主机(运行Docker Compose的系统)端口8000
上的所有请求都将重定向到port上的容器,Nginx将在该容器上运行。web
80
该volumes
指令将在主机和容器之间创建共享卷。这将app
与容器共享本地文件夹,并且卷将位于/usr/share/nginx/html
容器内部,然后将覆盖Nginx的默认文档根目录。
保存并关闭文件。
我们已经设置了一个演示页面和一个docker-compose.yml
文件,以创建将为其提供服务的容器化Web服务器环境。在下一步中,我们将使用Docker Compose搭建此环境。
有了docker-compose.yml
文件之后,我们现在可以执行Docker Compose来启动环境。以下命令将下载必要的Docker映像,为该web
服务创建一个容器,并在后台模式下运行该容器化环境:
docker-compose up -d
Docker Compose首先会在本地系统上查找定义的映像,如果找不到该映像,它将从Docker Hub下载该映像。您将看到如下输出:
Output
Creating network "compose-demo_default" with the default driver Pulling web (nginx:alpine)... alpine: Pulling from library/nginx cbdbe7a5bc2a: Pull complete 10c113fb0c77: Pull complete 9ba64393807b: Pull complete c829a9c40ab2: Pull complete 61d685417b2f: Pull complete Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502 Status: Downloaded newer image for nginx:alpine Creating compose-demo_web_1 ... done
现在,您的环境已在后台启动并运行。要验证该容器是否处于活动状态,可以运行:
docker-compose ps
此命令将向您显示有关正在运行的容器及其状态以及当前已进行的任何端口重定向的信息:
Output
Name Command State Ports ---------------------------------------------------------------------------------- compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp
现在,localhost:8000
如果您在本地计算机上运行此演示,或者your_server_domain_or_IP:8000
在远程服务器上运行此演示,则可以通过将浏览器指向该演示应用程序来访问该演示应用程序。
您会看到这样的页面:
因为您在docker-compose.yml
文件中设置的共享卷使文件app
夹文件与容器的文档根目录保持同步。如果您对index.html
文件进行任何更改,它们将被容器自动拾取,并在您重新加载页面时反映在浏览器中。
在下一步中,您将看到如何使用Docker Compose命令管理您的容器化环境。
您已经了解了如何设置docker-compose.yml
文件并通过启用环境docker-compose up
。现在,您将看到如何使用Docker Compose命令来管理您的容器化环境并与之交互。
要检查Nginx容器生成的日志,可以使用以下logs
命令:
docker-compose logs
您将看到类似于以下的输出:
Output
Attaching to compose-demo_web_1 web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up web_1 | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"
如果要暂停环境执行而不更改容器的当前状态,则可以使用:
docker-compose pause
Output
Pausing compose-demo_web_1 ... done
要在发出暂停后恢复执行:
docker-compose unpause
Output
Unpausing compose-demo_web_1 ... done
该stop
命令将终止容器的执行,但不会破坏与容器关联的任何数据:
docker-compose stop
Output
Stopping compose-demo_web_1 ... done
如果要删除与此容器化环境关联的容器,网络和卷,请使用以下down
命令:
docker-compose down
Output
Removing compose-demo_web_1 ... done Removing network compose-demo_default
请注意,这不会删除Docker Compose用来启动环境的基本映像(在我们的示例中为nginx:alpine
)。这样,每当您使用再次启动环境时docker-compose up
,由于映像已经在系统上,因此处理过程将更快。
如果您还想从系统中删除基本映像,则可以使用:
介绍 Docker简化了在容器中管理应用程序流程的过程。尽管容器在某些方面类似于虚拟机,但它们更轻便且对资源友好。这使开发人员可以将应用程序环境分解为多个隔离的服务。 对于依赖于几种服务的应用程序,将所有容器编排在一起以一起启动,通信和关闭可能很快变得很麻烦。Docker Compose是一个工具,可让您基于YAML文件中设置的定义运行多容器应用程序环境。它使用服务定义来构建具有多个可以共享网络和数据量的容器的完全可自定义的环境。 在本指南中,我们将演示如何在Ubuntu 20.04服务器上安装Docker Compose以及如何开始使用此工具。 先决条件 要阅读本文,您将需要: 以具有sudo特权的非root用户身份访问Ubuntu 20.04本地计算机或开发服务器。如果使用的是远程服务器,建议安装活动防火墙。要进行设置,请参阅我们的Ubuntu 20.04初始服务器设置指南。 遵循如何在Ubuntu 20.04上安装和使用Docker的步骤1和2,将Docker安装在服务器或本地计算机上。 第1步-安装Docker Compose 为了确保我们获得Docker Compose的最新稳定版本,我们将从其官方Github存储库中下载该软件。 首先,在其发行页面中确认可用的最新版本。在撰写本文时,最新的稳定版本是1.26.0。 以下命令将下载该1.26.0发行版并将可执行文件保存在/usr/local/bin/docker-compose,这将使该软件可全局访问为docker-compose: sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 接下来,设置正确的权限,以使该docker-compose命令可执行: sudo chmod +x /usr/local/bin/docker-compose 要验证安装是否成功,可以运行: docker-compose --version 您将看到类似于以下的输出: Output docker-compose version 1.26.0, build 8a1c60f6 Docker Compose现在已成功安装在您的系统上。在下一节中,我们将看到如何设置docker-compose.yml文件以及如何使用此工具启动并运行容器化环境。 第2步-设置docker-compose.yml文件 为了演示如何设置docker-compose.yml文件以及如何使用Docker Compose,我们将使用来自公共Docker注册表Docker Hub的官方Nginx映像创建一个Web服务器环境。此容器化环境将提供一个静态HTML文件。 首先在您的主文件夹中创建一个新目录,然后移入该目录: mkdir ~/compose-demo cd ~/compose-demo 在此目录中,设置一个应用程序文件夹作为您的Nginx环境的文档根目录: mkdir app 使用您喜欢的文本编辑器,index.html在app文件夹中创建一个新文件: nano app/index.html 将以下内容放入此文件: 〜/ compose-demo / app / index.htmlDocker Compose Demo This is a Docker Compose Demo Page.
This content is being served by an Nginx container.
docker image rm nginx:alpine
Output
Untagged: nginx:alpine Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912 Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270 Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1 Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157 Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6 Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08 Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a
注意:请参考我们的《如何安装和使用Docker指南》,以获取有关Docker命令的更详细的参考。
在本指南中,我们已经了解了如何安装Docker Compose以及如何基于Nginx Web服务器映像设置容器化环境。我们还看到了如何使用Compose命令管理此环境。
有关所有可用docker-compose
命令的完整参考,请查阅官方文档。