问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Docker Compose 使用指南

创作时间:
作者:
@小白创作中心

Docker Compose 使用指南

引用
1
来源
1.
https://www.cnblogs.com/wintersun/p/18187596

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过一个YAML文件来配置应用程序的服务,可以使用一个命令启动、停止和重启整个应用程序。本文将详细介绍Docker Compose的基本概念、常用命令、配置文件详解以及环境变量的使用等。

基本概念

  • 容器 (container): Docker容器,其中运行着应用程序的一个实例。
  • 镜像 (image): Docker镜像,用于创建容器的模板。
  • Docker-Compose 文件:一个YAML文件,描述了应用程序的各个服务以及它们之间的关系、配置等信息。

Docker Compose 文件结构

  • version: Docker-Compose文件的版本。
  • services: 定义了各个服务,每个服务都有自己的配置项,如镜像、端口映射、依赖等。
  • networks: 定义了应用程序使用的网络,可以自定义网络以控制服务之间的通信。
  • volumes: 定义了应用程序使用的卷,用于持久化数据或与主机共享文件。

常用命令

  • docker compose up: 启动容器
  • docker compose up -d: 后台运行容器
  • docker compose down: 停止容器
  • docker compose down -v: 删除容器和卷
  • docker compose ps: 查看容器状态
  • docker compose logs: 查看容器日志
  • docker compose logs -f: 跟随日志输出
  • docker compose exec: 进入容器
  • docker compose exec -it: 启动交互式终端
  • docker compose build: 构建镜像
  • docker compose rm: 删除容器
  • docker compose stop: 停止容器
  • docker compose start: 启动容器
  • docker compose restart: 重启容器
  • docker compose pull: 拉取镜像
  • docker compose run: 运行一个临时容器
  • docker compose config: 显示配置信息
  • docker compose images: 列出镜像
  • docker compose push: 推送镜像
  • docker compose version: 查看版本信息

Docker Compose 配置

docker-compose的配置文件是一个YAML文件,用于定义和运行多容器Docker应用程序。通常命名为docker-compose.yml,它使用单一的YAML文件来定义多个容器的集合,以及它们之间的依赖关系和服务。以下是一份docker-compose.yml文件的配置模板,包含了常用配置项和解释:

version: '3'  # 指定使用的 Docker Compose 文件格式版本,目前推荐使用 3.x 或更高
services:  # 定义一个或多个服务
  service1:  # 服务名称
    image: nginx:latest  # 使用的 Docker 镜像,这里是 Nginx 的最新版本
    # 或者使用构建指令来从 Dockerfile 构建镜像
    build:
      context: ./path/to/Dockerfile  # Dockerfile 所在的目录
      dockerfile: Dockerfile-alternative  # 可选的 Dockerfile 名称,默认是 Dockerfile
    # 容器启动时执行的命令,覆盖默认的命令
    command: 
- "nginx"
- "-g"
- "daemon off;"  # 以数组形式指定,防止 shell 解析
    ports:  # 容器端口与主机端口映射
- "80:80"  # 主机 80 端口映射到容器的 80 端口
    volumes:  # 数据卷挂载
- ./nginx.conf:/etc/nginx/nginx.conf:ro  # 将主机上的 nginx.conf 挂载到容器的 /etc/nginx/nginx.conf,只读
- ./logs:/var/log/nginx  # 将 logs 目录挂载到容器的 /var/log/nginx
    environment:  # 设置环境变量
- MYSQL_HOST=database  # 可以引用其他服务,这里假设有一个名为 database 的服务
- MYSQL_PORT=3306
    depends_on:  # 服务启动顺序,这里表明 service1 依赖于 database 服务
- database
    networks:  # 定义网络
- my_network  # 参与名为 my_network 的网络
  service2:  # 另一个服务示例
    # ... 类似地定义其他服务
networks:       # 定义网络
  my_network:  # 网络名称
    driver: bridge  # 网络驱动,通常是 bridge 模式
volumes:  # 定义数据卷
  nginx_logs:  # 卷名称  

使用环境变量

docker run -e VARIABLE=VALUE ...相同

web:
  environment:
- DEBUG=1

您可以选择不设置值并将环境变量从 shell 直接传递到容器。它的工作方式与docker run -e VARIABLE ...相同:

web:
  environment:
- DEBUG
web:
  environment:
- DEBUG=${DEBUG}

env_file属性允许您在 Compose 应用程序中使用多个.env文件。 它的工作方式与docker run --env-file=FILE ...相同:

web:
  env_file:
- web-variables.env

额外的信息

env_file:
- path: ./default.env
    required: true # default
- path: ./override.env
    required: false
  • 如果指定了多个文件,则它们将按顺序进行评估,可以覆盖先前文件中设置的值。
  • .env文件中声明的环境变量不能在 Compose 文件中单独再次引用。
  • 如果同时使用env_fileenvironment属性,则由environment设置的环境变量优先级更高。
  • env_file属性中指定的.env文件的路径是相对于 compose.yml 文件的位置的。
  • .env文件中的值可以通过使用docker compose run -e命令行来从命令行覆盖。
  • 如果使用--env-file替换了另一个.env,则您的.env文件可以被另一个.env文件覆盖。
  • 从 Docker Compose 版本 2.24.0 开始,您可以通过使用required字段将.env文件设置为可选项。当required设置为false.env文件丢失时,Compose 将静默忽略该条目。

Tips

  • 使用 Docker-Compose 可以简化多容器应用程序的部署和管理,但需要注意容器之间的依赖关系和通信。
  • 配置文件中的缩进必须使用空格,不能使用制表符。
  • 可以使用环境变量来动态设置配置项,如数据库密码。
  • 当你修改了docker-compose.yml文件后,需要重新运行docker-compose up来使改动生效。
  • 使用docker-compose build仅重建镜像,而不启动容器。
  • 使用docker-compose restart重启容器。
  • 记得清理不再需要的容器和镜像,以避免磁盘空间不足。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号