介绍
Docker 简化了集装箱中的应用程序流程管理过程,虽然集装箱在某些方面类似于虚拟机,但它们更轻,更易于资源使用,这使开发人员能够将应用程序环境分解为多个孤立服务。
对于依赖于多个服务的应用程序,对所有容器进行编排,以便一起启动、通信和关闭,可以很快变得不便。 Docker Compose是一个工具,允许您基于YAML文件中设置的定义运行多容器应用环境。
在本指南中,您将展示如何在Rocky Linux 8服务器上安装Docker Compose,以及如何使用此工具开始。
前提条件
为了遵循这篇文章,您将需要:
- 作为具有 sudo 权限的非根用户访问 Rocky Linux 8 本地机器或开发服务器. 如果您正在使用远程服务器,建议安装一个活跃的防火墙。 要设置这些,请参阅我们的 Rocky Linux 8 初始服务器设置指南。
- Docker 安装在您的服务器或本地机器上,遵循 如何在 Rocky Linux 8 上安装和使用 Docker的 步骤 1 和 2 。
步骤 1 – 安装 Docker Compose
为了确保您获得 Docker Compose 最新的稳定版本,您将从官方 Docker 存储库下载该软件。
首先,让我们更新包数据库:
1sudo dnf check-update
接下来,如果您在安装 Docker 期间没有这样做,则添加官方 Docker 存储库:
1sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
虽然没有来自Docker的Rocky Linux特定的存储库,但Rocky Linux是基于CentOS的,可以使用相同的存储库。
1sudo dnf install docker-compose-plugin
要验证安装成功,您可以运行:
1docker compose version
你会看到类似于此的输出:
1[secondary_label Output]
2Docker Compose version v2.10.2
Docker Compose 现在已成功安装在您的系统上. 在下一节中,您将看到如何设置一个 docker-compose.yml
文件,并使用此工具获得一个集装箱化环境。
步骤 2 — 设置一个 docker-compose.yml
文件
要展示如何设置docker-compose.yml 文件并使用 Docker Compose 工作,您将使用官方的 Nginx 图像从 Docker Hub创建 Web 服务器环境,这是公共 Docker 注册表。
首先,在您的主文件夹中创建一个新目录,然后进入它:
1mkdir ~/compose-demo
2cd ~/compose-demo
在此目录中,设置一个应用程序文件夹作为您的 Nginx 环境的文档根:
1mkdir app
使用您喜爱的文本编辑器,在应用
文件夹中创建一个新的index.html
文件:
1nano app/index.html
将以下内容放入此文件中:
1[label ~/compose-demo/app/index.html]
2<!doctype html>
3<html lang="en">
4<head>
5 <meta charset="utf-8">
6 <title>Docker Compose Demo</title>
7 <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
8</head>
9<body>
10
11 <h1>This is a Docker Compose Demo Page.</h1>
12 <p>This content is being served by an Nginx container.</p>
13
14</body>
15</html>
如果您正在使用nano
,您可以通过键入CTRL+X
,然后Y
和ENTER
来确认。
然后创建docker-compose.yml
文件:
1nano docker-compose.yml
将以下内容插入到您的 docker-compose.yml
文件中:
1[label docker-compose.yml]
2version: '3.7'
3services:
4 web:
5 image: nginx:alpine
6 ports:
7 - "8000:80"
8 volumes:
9 - ./app:/usr/share/nginx/html
docker-compose.yml
文件通常以版本
定义开始,这会告诉Docker Compose您正在使用的配置版本。
然后你有服务
块,在那里你设置了属于这个环境的服务。在你的情况下,你有一个名为Web
的单一服务。这个服务使用了nginx:alpine
图像,并设置了port
指令的端口重定向。 host 机器(您正在运行Docker Compose的系统)的端口8000
上的所有请求将被重定向到端口80
上的web
容器,在那里 Nginx将运行。
该卷
指令将在主机和容器之间创建一个共享卷(https://docs.docker.com/compose/compose-file/# volumes)。这将与容器共享本地应用
文件夹,容量将位于容器内部的/usr/share/nginx/html
,然后重写 Nginx 的默认文档根。
保存并关闭文件。
您已设置了一个演示页面和一个docker-compose.yml
文件,以创建一个容器化 Web 服务器环境,以便为其服务。
步骤 3 – 运行 Docker 组成
有了「docker-compose.yml」檔案,您現在可以執行 Docker Compose 來將您的環境帶回來. 以下命令將下載必要的 Docker 影像,為「Web」服務創建容器,並在背景模式下執行集裝環境:
1docker compose up -d
Docker Compose 会首先在本地系统上搜索定义的图像,如果无法找到图像,则会从 Docker Hub 下载图像。
1[secondary_label Output]
2Creating network "compose-demo_default" with the default driver
3Pulling web (nginx:alpine)...
4alpine: Pulling from library/nginx
5cbdbe7a5bc2a: Pull complete
610c113fb0c77: Pull complete
79ba64393807b: Pull complete
8c829a9c40ab2: Pull complete
961d685417b2f: Pull complete
10Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502
11Status: Downloaded newer image for nginx:alpine
12Creating compose-demo_web_1 ... done
<$>[注] 注: 如果您遇到有关 Docker 插件的权限错误,这意味着您跳过了 如何在 Rocky Linux 8 上安装和使用 Docker 的步骤 2。
您的环境现在在背景中运行. 若要验证容器是否活跃,您可以运行:
1docker compose ps
此命令将显示有关正在运行的容器及其状态的信息,以及目前存在的任何端口重定向:
1[secondary_label Output]
2 Name Command State Ports
3----------------------------------------------------------------------------------
4compose-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 命令来管理您的集装箱环境。
步骤 4 – 熟悉 Docker 组成命令
您已经看到如何设置docker-compose.yml
文件,并将您的环境带来docker compose up
。
要检查 Nginx 容器产生的日志,您可以使用日志
命令:
1docker compose logs
你会看到类似于此的输出:
1[secondary_label Output]
2Attaching to compose-demo_web_1
3web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
4web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
5web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
6web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
7web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
8web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
9web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up
10web_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" "-"
如果您想暂停环境运行而不改变容器的当前状态,您可以使用:
1docker compose pause
1[secondary_label Output]
2Pausing compose-demo_web_1 ... done
暂停后恢复执行:
1docker compose unpause
1[secondary_label Output]
2Unpausing compose-demo_web_1 ... done
停止
命令将终止容器执行,但不会破坏与您的容器相关的任何数据:
1docker compose stop
1[secondary_label Output]
2Stopping compose-demo_web_1 ... done
如果要移除与此集装箱环境相关的容器、网络和卷,请使用下
命令:
1docker compose down
1[secondary_label Output]
2Removing compose-demo_web_1 ... done
3Removing network compose-demo_default
请注意,这不会删除 Docker Compose 用于旋转环境的基本图像(在您的情况下,nginx:alpine)。
如果您还想从系统中删除基础图像,您可以使用:
1docker image rm nginx:alpine
1[secondary_label Output]
2Untagged: nginx:alpine
3Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912
4Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270
5Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1
6Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157
7Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6
8Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08
9Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a
<$>[注] 注 :请参阅我们在 如何安装和使用Docker的指南,以获得有关Docker命令的更详细的参考。
结论
在本指南中,您已经看到如何安装 Docker Compose 并设置基于 Nginx 网页服务器图像的集装环境。
有关所有可用的docker compose
命令的完整参考,请参阅 官方文档。