【译】Docker Compose简明指南

Docker Compose是一种集成于Docker内的工具,它可以简化管理多容器应用的流程。

Docker Compose提供的好处很多,包括:

  1. 轻松管理容器网络:在 Docker Compose 中通过 Docker 网络连接两个容器非常简单:定义网络,并告诉容器连接到该网络即可。此外,Docker Compose可以在创建和销毁容器本身时自动创建和销毁网络。

  2. 容器依赖:如果一个Docker 容器需要依赖于另一个 Docker 容器来启动和运行(比如一个数据库),可以使用Docker Compose为容器定义依赖项,并要求依赖项先于容器启动和运行。

  3. 可复制的系统设置:容器运行前的设置信息可以方便地复制到其他系统中。虽然理论上可以手动在 Bash 里做同样的事,但就不会那么灵活,也更难适应变化。

在 Linux 上安装 Docker Compose

Docker Compose可以在在大多数Linux发行版的存储库中获得。

在基于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 Compose 文件

本指南假设您已经熟悉并熟悉 docker CLI 工具。如果还没有,请先去了解一下。

Docker Compose的配置信息通常存储在名为docker-compose.yml的文件中,在执行docker-compose命令时会在同一目录中找默认查找叫这个名字的配置文件。配置文件采用了YAML形式。

如果想了解更多YAML相关的的知识,可以先看一下这个:每个DevOps工程师都必须知道的YAML基础知识

我们先来创建一个 NextCloud 实例的yaml文件,然后再一起过一下它。

首先,需要在系统上创建一个空目录,并创建一个叫docker-compose.yml的文件,如下:

image.png

然后用以下内容填充文件:

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
复制代码

如下图所示,表明NextCloud容器已经启动成功了:

image.png

关于如何在Linux上用Docker部署一个NextCloud,可以参考一下这篇介绍

打开浏览器,访问http://localhost, 应该可以看到 Nextcloud 的登录页面,如下所示:

image.png

了解Docker Compose配置文件

既然已经验证了这个yaml文件确实有效,那我们再回顾一下文件的内容,了解一下它到底在做什么。

“version” 标签

version: '3.5'
复制代码

首先,version标签指定了 Docker Compose 文件格式的版本,因为不同的版本会有不同的语法。通常我们会使用最新版本,但并非必须如此,如果您有一些遗留文件,可能会需要使用特定版本。

“services” 标签

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,大多数字段应该是不言自明的:

  • container_name – 定义容器的名称。相当于–name选项。
  • image – 定义要从容器中提取的镜像。
  • restart – 定义容器的重启策略。相当于–restart。
  • networks – 定义容器要连接到的网络。该网络可以是新建的或者是已经存在的。该值将使用在”networks”标签中定义的网络标识符,而不是实际的网络名称。
  • ports – 定义容器可以连接到的主机端口。相当于–publish。
  • volumes – 定义容器的磁盘卷。相当于–volume。
  • environment – 定义容器的环境变量。相当于–env。此选项支持两种语法类型:一是variable: value;或者如果您习惯docker cli的语法,则可能更熟悉另一个选项是- variable=value
  • depends_on – 指定容器的依赖项。依赖项启动之前当前容器不会启动。

“networks” 标签

networks:
  nextcloud:
    name: nextcloud_docker_network
复制代码

networks标签用于定义我们在容器的networks配置中列出的网络。

networks配置中,先是列出了services中用到了network的容器的标识符, 即nextcloud

后面又定义了network的名称nextcloud_docker_network

可以使用docker network ls来查看一下network的定义:

image.png

如果想让容器加入一个已经存在的网络,可以使用以下语法,将其中的”network_name”替换为实际存在的Docker网络的名称即可:

networks:
  nextcloud:
    external: true
    name: network_name
复制代码

OK, 关于docker compose的配置文件就简单聊完了。

配置文件docker-compose.yml的名称不是必须的,可以是任意名称,不过如果叫其他名字,需要在启动命令中加参数指明,如docker-compose up -f mycompose.yml

结语

现在,相比你已经了解了Docker Compose的基本知识,以及使用它的好处。

原文链接:linuxhandbook.com/docker-comp…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享