Docker Compose 是一个与 Docker 原生集成的工具,让管理多容器应用程序变得轻而易举。
Docker Compose 提供的好处很多,其中包括:
Docker Compose 在大多数发行版存储库中都很容易获得。
您可以使用以下命令在基于Ubuntu 和 Debian 的发行版上安装 Docker Compose :
sudo apt install docker-compose
在 Arch 和 Manjaro 上,您可以使用:
sudo pacman -S docker-compose
在 Fedora 上,您可以使用 dnf 命令:
sudo dnf install docker-compose
您可能需要在 CentOS 上安装 Docker Compose付出更多努力。
对于任何其他发行版,您始终可以查看安装文档以获取有关获取所需软件包的信息。
本指南假定您已经熟悉并熟悉 docker CLI 工具,如果不是,请考虑这样做,否则您可能会遇到一堆简单的问题。
Docker Compose 文件存储在 name 下,当您在同一目录中docker-compose.yml运行命令时会自动找到。docker-compose你猜对了,它的语法采用 YAML 的形式。
我们将从一个创建 Nextcloud 实例的文件开始,然后回顾它实际上是如何做到的。
首先,您需要创建撰写文件。在系统上创建一个空目录,然后创建docker-compose.yml文件。
接下来,用以下内容填充文件:
version: '3.5'
services:
nextcloud_app:
container_name: nextcloud_app
image: nextcloud
restart: unless-stopped
networks:
- nextcloud
ports:
- 80:80
volumes:
- ./data/app:/var/www/html
depends_on:
- nextcloud_mariadb
nextcloud_mariadb:
container_name: nextcloud_mariadb
image: mariadb
restart: unless-stopped
networks:
- nextcloud
volumes:
- ./data/mariadb:/var/lib/mysql
environment:
MARIADB_ROOT_PASSWORD: 'mariadb'
networks:
nextcloud:
name: nextcloud_docker_network
现在您只需要运行docker-compose up -d,您就可以使用 Docker 成功部署 Nextcloud 了。
这是Nextcloud的登录页面。
现在您已经看到该文件确实有效,让我们回顾一下文件的内容,以便您真正了解它到底在做什么。
version: '3.5'
首先,version标签。这只是指定 Docker Compose 文件格式的版本,因为不同的版本会有不同的语法,您通常希望将其保留为最新版本,但并非必须如此,如果您有一些旧文件,这会很有帮助。
services:
nextcloud_app:
container_name: nextcloud_app
image: nextcloud
restart: unless-stopped
networks:
- nextcloud
ports:
- 80:80
volumes:
- ./data/app:/var/www/html
depends_on:
- nextcloud_mariadb
nextcloud_mariadb:
container_name: nextcloud_mariadb
image: mariadb
restart: unless-stopped
networks:
- nextcloud
volumes:
- ./data/mariadb:/var/lib/mysql
environment:
MARIADB_ROOT_PASSWORD: 'mariadb'
接下来,您会看到services标签。这将启动docker-compose up -d运行时创建的所有应用程序的列表。
接下来我们开始列出我们的第一个容器,nextcloud_app. 这用作应用程序的标识符,可供其他 Docker Compose 命令使用,请注意,这不是容器本身的名称 - 在下一部分中指定。
现在,您开始定义有关容器的所有内容。以下是对所有字段含义的复习,但如果您已经了解 Docker,大多数字段应该是不言自明的:
networks:
nextcloud:
name: nextcloud_docker_network
现在你到了networks标签。这用于定义我们networks为容器列出的网络。
在该networks部分中,您首先列出了在 下提供给网络的标识符services。在这里,那是nextcloud。
接下来,您定义可以用 看到的网络名称docker network ls。在这里,我们将其命名为nextcloud_docker_network。
如果您希望容器加入一个已经存在的网络,您可以使用以下语法,替换network_name为 Docker 网络的名称:
networks:
nextcloud:
external: true
name: network_name
您可以将 yml 文件命名为任何名称,但在使用 docker-compose 命令时必须指定文件名,保持传统并将其命名为 docker-compose.yml 以保持命令简短。