Featured image of post 简单介绍 Docker Compose V2

简单介绍 Docker Compose V2

官方文档

(https://docs.docker.com/compose/)

基本介绍

Docker’s documentation refers to and describes Compose V2 functionality. Effective July 2023, Compose V1 stopped receiving updates and is no longer in new Docker Desktop releases. Compose V2 has replaced it and is now integrated into all current Docker Desktop versions. For more information, see Migrate to Compose V2.

Docker 文档提到并描述了 Compose V2 功能。 从 2023 年 7 月起,Compose V1 不再接受更新,也不再出现在新发布的 Docker Desktop 中。Compose V2 已取而代之,现在已集成到所有当前的 Docker Desktop 版本中。有关更多信息,请参阅迁移到 Compose V2。

V1 是 Python 语言版本也叫Compose standalone,V2 是官方团队使用 Go 语言重构的版本也叫Compose plugin。因为官方自 2023 年 7 月开始不维护 V1 版本,所以这里只介绍 V2 版本。当然如果只按装了 V1 版本的,也可以尝试使用,使用方式区别如下:

1
2
3
4
# v1
docker-compose up
# v2,一般情况下只是命令比v1少了个 -
docker compose up

安装

一切以官方安装教程为准,其次可以参考百度。离线安装可以参考站内另一片文章离线环境下安装 Docker Compose V2

验证安装是否成功

1
2
docker compose version
# 输出Docker Compose version v2.23.0代表安装成功

使用

Docker Compose 默认寻找以下文件来定义服务和容器的配置

  • docker-compose.yml: 默认的配置文件名。如果存在此文件,则 docker-compose 命令将默认使用它。

  • docker-compose.override.yml: 用于覆盖默认配置的文件。此文件中的配置将覆盖 docker-compose.yml 中的相应配置。

  • docker-compose.${环境名称}.yml: 根据环境名称提供额外配置的文件。例如,如果你的环境名称是 production,则 docker-compose.production.yml 文件中的配置将与 docker-compose.yml 中的配置合并。

这种配置文件的组织方式允许你在不同环境中共享通用配置,同时为每个环境提供特定的配置。

你可以使用 -f 或 –file 选项指定不同的文件名,例如:

1
docker-compose -f docker-compose.prod.yml up -d

此命令将使用 docker-compose.yml 和 docker-compose.prod.yml 中的配置。你还可以指定多个文件:

1
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

这将合并两个文件中的配置。在使用多个文件时,后面的文件将覆盖前面的文件中的配置。

常用命令(要在配置文件所处的文件夹运行)

1
2
3
4
5
6
7
8
# 以守护进程模式启动应用程序,即在后台运行
docker compose up -d
# 停止并删除应用程序中的所有容器、网络和卷
docker compose down
# 显示应用程序中所有服务的状态,包括容器 ID、状态、端口映射等信息
docker compose ps
# 验证和查看 docker-compose.yml 文件的配置
docker compose config

docker run命令迁移至Compose

  • docker run原始命令有留档的情况下
    • 将命令给ChatGPT转换
    • 根据示例手动填写
  • 没有留档的情况下,使用docker insepect xxx,xxx为容器 id
    • 将命令给ChatGPT转换
    • 根据示例手动填写

参考配置文件docker-compose.yml及特殊特性

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
version: "3" # Docker Compose 文件版本

services:
  web:
    image: nginx:latest # 使用的镜像
    container_name: my_nginx_container #如果不指定容器名,默认使用yml文件所处文件夹名+镜像名
    ports:
      - "8080:80" # 映射端口,将主机的8080端口映射到容器的80端口
    volumes:
      - ./nginx-config:/etc/nginx/conf.d
    extra_hosts:
      - "host1:192.168.1.100" # 添加额外的主机映射,格式为 "hostname:IP"
    # 容器运行指令修改,这里是自定义DNS
    command: '/bin/sh -c ''cat /dev/null > /etc/resolv.conf && echo "nameserver 223.5.5.5" >> /etc/resolv.conf && /app/start.sh'''
    depends_on:
      - db # 表示web服务依赖于db服务,会在启动web服务之前启动db服务
    restart: unless-stopped

  db:
    image: mysql:5.7
    container_name: my_mysql_container
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - "3306:3306"
    restart: unless-stopped

  redis:
    image: redis:latest
    container_name: my_redis_container
    ports:
      - "6379:6379"
    restart: unless-stopped

CONTAINER_PORTHOST_PORT

1
2
3
4
# 使用CONTAINER_PORT
jdbc:mysql://db:3306/myapp?useSSL=false 使用CONTAINER_PORT
# 使用HOST_PORT
url=jdbc:mysql://192.168.1.157:16601/xxl_job?use

部署心得

1
2
3
4
5
[root@localhost xxx_xxx]# tree -C -L 1
.
├── 02_main
├── 03_service
└── docker-compose.yml

docker-compose.yml放置到部署目录的最外层,配置文件中的挂载路径以相对路径的形式,方便后期迁移。

1
2
3
4
5
6
volumes:
  - ./03_service/xxx_service/logs:/app/rest/logs
  - ./03_service/xxx_service/upload:/app/rest/upload
  - ./03_service/xxx_service/data:/app/rest/lib/data
  - ./03_service/xxx_service/config:/app/rest/config
  - /etc/localtime:/etc/localtime
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计