Docker Compose的基本使用

0x00 | 总述

在大多数实际项目中,我们往往需要多个(许多个)容器同时运行并且相互交互。于是我们需要一种工具能够便捷的部署和管理所有容器。

Docker ComposeDocker官方的用于定义和运行多容器Docker应用的工具。Docker Compose主要通过docker-compose.yml进行配置,同时可以使用Dockerfile定义应用程序的环境。

在配置好Dockerfile(可选)和docker-compose.yml后,执行docker-compose up即可启动整个应用程序。

另外,本文默认你没有配置dockerd-rootless,如果你有,请无视sudo

0x01 | Docker Compose安装

DockerDocker Compose通常是分离的,你可能需要单独安装它们。
Debian Linux以及其他发行版的软件源应该都有docker-compose或者类似命名的包。如果你实在找不到,可以尝试从github下载:
Release v2.21.0 · docker/compose (github.com)

0x02 | docker-compose.yml配置

参考配置如下:

version: '3'
services:
  web:
    build: .
    ports:
   - "5000:5000"
    volumes:
   - .:/code
    - logvolume01:/var/log
    links:
   - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

接下来以结构进行分析:

  1. 版本信息:指定Docker Compose文件的版本。
version: '3'
  1. 服务定义:定义各个服务(容器)及其配置。
services:
  webapp:
    image: nginx:latest
    ports:
      - "80:80"
  database:
    image: mysql:latest
    environment:
      - MYSQL_ROOT_PASSWORD=secret
  1. 网络配置:定义容器之间的网络配置。
networks:
  my_network:

你可以像这样把这个网络应用到容器:

version: '3'
services:
  app1:
    image: myapp1
    networks:
      - my-network1

  app2:
    image: myapp2
    networks:
      - my-network1
      - my-network2:

networks:
  my-network1:
  my-network2:

你可能已经注意到了,可以给一个容器应用多个网络。
networks可以在不进行任何配置的情况下使用,但实际上也是可以进行一些配置的:

配置选项描述
driver指定网络的驱动程序(如 bridgeoverlay 等)
driver_opts指定驱动程序的选项
ipam指定自定义 IP 地址管理
internal设置为 true 时,限制访问网络的容器仅限于网络内部
external指定网络来自于外部,不由 Compose 管理
attachable设置为 true 时,允许将其他容器连接到网络中的任意容器
aliases为网络中的服务指定别名
  1. 卷配置:定义用于持续化数据的卷。
volumes:
  my_db_data:

你可以像这样把这个卷挂载给容器的目录:

version: '3'
services:
  myservice:
    image: nginx:latest
    ports:
      - 8080:80
    volumes:
      - my_db_data:/app
volumes:
  my_db_data:

然后,volumes也可以在没有任何配置的情况下使用,你也可以尝试下面的配置项:

配置选项描述
driver指定卷的驱动程序(如 localnfs 等)
driver_opts指定驱动程序的选项
external指定卷来自于外部,不由 Compose 管理
name为卷指定一个自定义名称
labels为卷添加自定义标签
nocopy设置为 true 时,禁止在容器之间复制数据

最后,volume的储存位置是可以更改的,可以尝试修改/etc/docker/daemon.json并添加如下内容:

{
  "data-root": "/your/new/volume/location"
}

需要注意的是,在这之后你可能需要手动迁移数据。

0x03 | 自动构建和依赖

version: '3'
services:
  db:
    image: mysql
    # 其他配置项...

  app:
    build: ./path/to/dockerfile
    # 其他配置项...
    depends_on:
      - db

默认情况下,Docker Compose会并行地启动每个服务。对于某些强依赖启动顺序的情景,你可以通过为服务设置depens_on来指定启动顺序。

0x04 | 启动和管理

你可以通过sudo docker-compose up命令启动你的所有容器。该命令也可以添加其他参数,其中一些如下:

参数描述
-f <文件路径>--file <文件路径>指定要使用的 Compose 文件路径(默认为 docker-compose.yml)。
-p <项目名称>--project-name <项目名称>指定 Compose 项目的名称。默认情况下,将使用所在目录的名称作为项目名称。
-v--verbose显示详细的命令输出信息。
--log-level <级别>设置日志级别,可以是 debuginfowarningerrorcritical
-h--help显示帮助信息,列出所有可用的命令和选项。
config验证和显示 Compose 文件的配置。
up创建并启动容器。
down停止并移除容器,还原其状态。
start启动已创建的容器。
stop停止正在运行的容器。
restart重启正在运行的容器。
pause暂停容器的执行。
unpause取消暂停容器的执行。
build构建或重新构建服务的镜像。
ps显示当前项目的容器状态。

参考:Docker Compose | 菜鸟教程 (runoob.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值