怎样在RockyLinux9上安装和使用DockerCompose介绍

Docker简化了在容器中管理应用程序进程的过程。即使容器在个别方面类似于虚拟机,但它们更轻便且对资源更友好。这容许开发人员将应用程序环境分解为多个独立的服务。

对于依赖于多项服务的应用程序,编排所有容器一起启动、通信和关掉很快都会显得笨拙。DockerCompose是一种工具,容许您按照YAML文件中设置的定义运行多容器应用程序环境。它使用服务定义来建立具有多个容器的完全可订制的环境,这种容器可以共享网路和数据量。

在本手册中docker compose up d,您将演示怎么在RockyLinux9服务器上安装DockerCompose以及怎样开始使用该工具。

先决条件

要阅读本文,您须要:

第1步—安装DockerCompose

为确保您获得最新的DockerCompose稳定版本,您将从官方Docker储存库下载该软件

首先,让我们更新包数据库:

  1. sudo dnf check-update

接出来,倘若您在Docker安装期间没有这样做,请添加官方Docker储存库:

  1. sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

尽管Docker没有专门针对RockyLinux的储存库,但RockyLinux基于CentOS,可以使用相同的储存库。如今你可以安装DockerCompose,它是Docker的一个插件:

  1. sudo dnf install docker-compose-plugin

要验证安装是否成功,您可以运行:

  1. docker compose version

你会看见类似这样的输出:

Output
Docker Compose version v2.10.2

DockerCompose现已成功安装在您的系统上。在下一节中,您将了解怎样设置docker-compose.yml文件并使用此工具启动和运行容器化环境。

docker compose up d_docker compose up d_docker compose up d

第2步—设置docker-compose.yml文件

为了演示怎么设置docker-compose.yml文件并使用DockerCompose,您将使用官方DockerHub(公共Docker注册表)创建一个Web服务器环境。此容器化环境将提供单个静态HTML文件。

首先在您的主文件夹中创建一个新目录,之后移入其中:

  1. mkdir ~/compose-demo
  2. cd ~/compose-demo

在此目录中,设置一个应用程序文件夹作为Nginx环境的文档根目录:

  1. mkdir app

使用您喜欢的文本编辑器,在app文件夹中创建一个新的index.html文件:

  1. nano app/index.html

将以下内容倒入此文件中:




    
    Docker Compose Demo
    


    

This is a Docker Compose Demo Page.

This content is being served by an Nginx container.

docker compose up d_docker compose up d_docker compose up d

完成后保存并关掉文件。假若您正在使用nano,您可以通过输入CTRL+X,之后输入Y和ENTER来确认.

接出来,创建docker-compose.yml文件:

  1. 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定义开头。这将告诉DockerCompose您正在使用那个配置版本。

之后您将拥有services块,您可以在其中设置作为该环境一部份的服务。在您的事例中,您有一个名为web的服务。此服务使用nginx:alpine图象并使用ports指令设置端口重定向。主机(运行DockerCompose的系统)端口8000上的所有恳求都将重定向到端口80,Nginx将在其中运行。

volumes指令将在主机和容器之间创建一个共享卷。这将与容器共享本地app文件夹suse linux 下载,卷将坐落容器内的/usr/share/nginx/html,之后将覆盖默认值Nginx的文档根目录。

保存并关掉文件。

您早已设置了一个演示页面和一个docker-compose.yml文件来创建一个容器化的Web服务器环境来为其提供服务。在下一步中,您将使用DockerCompose启动此环境。

第3步—运行DockerCompose

docker-compose.yml文件就位后,您如今可以执行DockerCompose来启动您的环境。以下命令将下载必要的Docker镜像,为web服务创建容器,并在后台模式下运行容器化环境:

  1. docker compose up -d

DockerCompose将首先在您的本地系统上查找定义的图象,假如找不到该图象,它将从DockerHub下载该图象。你会看见这样的输出:

Output
Creating network "compose-demo_default" with the default driver Pulling web (nginx:alpine)...

docker compose up d_docker compose up d_docker compose up d

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套接字的权限错误,这意味着您跳过了怎样在RockyLinux9上安装和使用Docker的第2步。返回并完成该步骤将启用运行docker命令的权限,而无需sudo。

您的环境现已启动并在后台运行。要验证容器是否处于活动状态,您可以运行:

  1. 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文件进行了任何修改,它们将被容器手动拾取,因而在您重新加载页面时反映在您的浏览器上。

在下一步中,您将了解怎样使用DockerCompose命令管理容器化环境。

第4步—熟悉DockerCompose命令

您早已了解了怎样设置docker-compose.yml文件并使用dockercomposeup启动您的环境。您如今将了解怎样使用DockerCompose命令来管理容器化环境并与之交互。

要检测Nginx容器生成的日志,可以使用logs命令:

  1. 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 up dsogou pinyin linux,您可以使用:

  1. docker compose pause

Output
Pausing compose-demo_web_1 ... done

要在发出暂停后恢复执行:

  1. docker compose unpause

Output
Unpausing compose-demo_web_1 ... done

stop命令将中止容器执行,但它不会破坏与您的容器关联的任何数据:

  1. docker compose stop

docker compose up d_docker compose up d_docker compose up d

Output
Stopping compose-demo_web_1 ... done

假如要删掉与此容器化环境关联的容器、网络和卷,请使用down命令:

  1. docker compose down

Output
Removing compose-demo_web_1 ... done Removing network compose-demo_default

请注意,这不会删掉DockerCompose拿来启动您的环境的基础映像(在您的事例中,nginx:alpine)。这样,每每您使用dockercomposeup再度启动您的环境时,因为映像早已在您的系统上,该过程会快得多。

倘若您还想从系统中删掉基本映像,可以使用:

  1. 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手册。

推论

在本手册中,您了解了怎样安装DockerCompose并基于NginxWeb服务器映像设置容器化环境。您还了解了怎样使用Compose命令管理此环境。

有关所有可用dockercompose命令的完整参考,请查看官方文档。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复