当前位置: 首页 > news >正文

Docker Compose 基础知识

一. Docker Compose 引言

Docker Compose 是 Docker 官方提供的一个用于定义和运行多容器 Docker 应用程序的工具。它通过一个yaml格式的配置文件(通常命名为 docker-compose.yml ),文件中定义多个服务、网络和卷,从而简化复杂应用的部署流程。

二. Docker Compose 项目

项目由多个相互关联的服务组成,共同构成一个完整的应用系统。Docker Compose 使用项目名称来标识和管理这些服务,项目名称默认由所在的目录名决定,但也可以通过命令行参数自定义。这种项目化的管理方式,使得开发者能够轻松地在不同环境和场景下,对整个应用进行统一的操作和维护。

2.1 项目名称

  • Docker Compose 使用项目名称来标识和管理项目中的服务、网络和卷。
  • 默认情况下,项目名称是 docker-compose.yml 文件所在目录的名称。
  • 可以通过 -p--project-name 参数在命令行中指定自定义的项目名称

2.2 工作目录

  • Docker Compose 命令默认在执行命令的当前目录下查找 docker-compose.yml 文件。
  • 所有的相对路径(如卷的挂载路径)都是相对于这个工作目录。

2.3 目录结构(示例)

myapp/
├── docker-compose.yml
├── html/
│   └── index.html
└── mysql/
    └── init.sql

docker-compose.yml


version: '3'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - app-network

三、docker-compose.yml 详解

3.1 版本(version)

在 Docker Compose 中,version 字段用于指定 docker-compose.yml 文件的版本。不同版本支持的功能有所不同。

# 举例
version: '2.4'

3.2 服务(services)

服务是 Docker Compose 的核心构建块,它定义了如何创建和管理一组执行相同镜像的容器。在 docker-compose.yml 文件中,每个服务都拥有自己独特的配置项,如镜像名称、端口映射、环境变量等。通过合理配置服务,可以灵活地控制容器的行为和运行环境。

3.2.1 services下的常用服务配置项
  • image:指定使用的 Docker 镜像。
  • build:指定 Dockerfile 路径,用于构建镜像。
  • ports:映射容器端口到主机端口。
  • volumes:挂载主机目录或卷到容器。
  • environment:设置环境变量
  • depends_on:指定服务使用的网络
  • networks:指定服务使用的网络。
  • command:覆盖容器启动时的默认命令。
  • restart:设置容器重启策略。
3.2.2 具体示例
version: '3.8'

services:
  web:
    # 使用现有的 Docker 镜像
    image: nginx:latest
    # 如果没有现成的镜像,可以使用 build 来构建
    # build: ./path/to/nginx
    # 映射容器的 80 端口到主机的 8080 端口
    ports:
      - "8080:80"
    # 挂载主机的 ./html 目录到容器的 /usr/share/nginx/html
    volumes:
      - ./html:/usr/share/nginx/html
    # 设置环境变量
    environment:
      NGINX_ENV: production
    # 指定依赖的服务,确保 db 服务先于 web 启动
    depends_on:
      - db
    # 连接到自定义网络
    networks:
      - app-network
    # 覆盖容器启动时的默认命令
    command: nginx -g 'daemon off;'
    # 设置容器重启策略,除非手动停止,否则自动重启
    restart: unless-stopped

  db:
    image: mysql:5.7
    # 设置环境变量,包括数据库密码等
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: app_db
    # 挂载数据卷,确保数据持久化
    volumes:
      - db_data:/var/lib/mysql
    # 连接到自定义网络
    networks:
      - app-network
    # 设置容器重启策略
    restart: unless-stopped

# 定义数据卷
volumes:
  db_data:

# 定义网络
networks:
  app-network:

3.3 网络(networks)

网络是服务之间通信的桥梁,它定义了容器之间的连接方式。Docker Compose 支持创建自定义网络,使得服务能够相互通信,就像在同一个局域网中一样。通过合理配置网络,可以实现服务之间的隔离与协作,确保应用的安全性和稳定性。
networks 部分用于定义自定义网络,以便服务之间可以相互通信。

networks:
  mynetwork:
    driver: bridge
示例:自定义网络
version: '3'

services:
  db:
    image: mysql:5.7
    networks:
      - backend

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge

3.4 卷(volumes)

卷用于数据的持久化存储,是 Docker 中解决容器数据存储问题的关键。在 Docker Compose 中,卷可以挂载到多个服务的容器中,实现数据的共享和持久保存。无论是数据库数据,还是应用配置文件,卷都能确保数据在容器重启或重新创建后依然完好无损。volumes :用于定义持久化存储卷。

version: '3'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: example

volumes:
  db_data:

四、常用命令

4.1 启动服务 docker-compose up

功能介绍

docker-compose up 命令用于启动或者重新创建服务。如果服务已经存在,它会先停止并删除旧的容器,然后重新创建新的容器。如果没有现成的镜像,它会尝试拉取镜像或构建镜像(如果配置了 build

基本语法
docker-compose up [options] [SERVICE...]
常用选项
  • -d:在后台运行容器。
  • --build:在启动之前重新构建镜像
  • --force-recreate:强制重新创建容器,即使配置没有变化。
  • --no-deps:不启动服务所依赖的服务
  • --no-recreate:如果容器已经存在,不重新创建。
具体示例
# 启动所有服务,并在前台运行
docker-compose up

# 启动所有服务,并在后台运行
docker-compose up -d

# 启动指定服务,并在后台运行
docker-compose up -d web

# 在启动之前重新构建镜像
docker-compose up --build

4.2 停止服务 docker-compose down

功能介绍

docker-compose down 命令用于停止并删除所有服务、网络和卷。它会停止容器,然后删除它们。如果需要删除数据卷,可以使用 -v 选项。

基本语法
docker-compose down [options]
常用选项
  • -v:删除数据卷。
  • --rmi local:删除未使用的镜像。
  • --remove-orphans:删除 compose 文件中未定义的额外容器。
具体示例
# 停止并删除所有服务、网络和卷
docker-compose down

# 停止并删除所有服务、网络和卷,同时删除数据卷
docker-compose down -v

# 停止并删除所有服务、网络和卷,同时删除未使用的镜像
docker-compose down --rmi local

# 停止并删除所有服务、网络和卷,同时删除额外的容器
docker-compose down --remove-orphans

4.3 查看日志 docker-compose logs

功能介绍

docker-compose logs 命令用于查看服务的日志输出。它可以查看所有服务的日志,或者指定服务的日志。日志输出会实时更新,类似于 docker logs 命令

基本语法
docker-compose logs [options] [service]
常用选项
  • -f:跟随模式,实时输出日志。
  • --tail:指定显示的日志行数,默认为 all
  • --no-color:不使用颜色输出。
具体示例
# 查看所有服务的日志
docker-compose logs

# 查看指定服务的日志
docker-compose logs web

# 实时查看指定服务的日志
docker-compose logs -f web

# 查看指定服务的最后10行日志
docker-compose logs --tail 10 web

4.4 构建镜像 docker-compose build

功能介绍

docker-compose build 命令用于构建或重新构建服务的镜像。如果服务的 build 配置没有改变,并且镜像已经存在,它不会重新构建。可以使用 --no-cache 选项强制重新构建。

基本语法
docker-compose build [options] [service]
常用选项
  • --no-cache:强制重新构建,不使用缓存。
  • --pull:始终尝试拉取更新的基础镜像。
  • --parallel:并行构建多个服务。
具体示例
# 构建所有服务的镜像
docker-compose build

# 构建指定服务的镜像
docker-compose build web

# 强制重新构建,不使用缓存
docker-compose build --no-cache

# 始终尝试拉取更新的基础镜像
docker-compose build --pull

五、注意事项

  • 版本兼容性:不同版本的 Docker Compose 文件可能支持不同的功能,确保使用的版本与 Docker 引擎兼容。
  • 服务依赖:使用 depends_on 可以控制服务的启动顺序,但不会等待服务完全启动。
  • 环境变量:可以使用 .env 文件来管理环境变量。

相关文章:

  • Linux云计算SRE-第二十一周
  • Java课程设计(双人对战游戏)持续更新......
  • 方法指南:利用边缘计算实现低延迟直播流媒体服务
  • 【STM32】GPIO
  • GMII 接口
  • 泛目录程序,无极泛目录是如何搭建强大站群的?
  • mac部署CAT监控服务
  • 构建可扩展、可靠的网络抓取、监控和自动化应用程序的终极指南
  • Go常用的设计模式
  • C++:动态内存管理(含五大内存分区区分)详解
  • F.binary_cross_entropy与sklearn.metric.log_loss的比较
  • 排序算法(插入,希尔,选择,冒泡,堆,快排,归并)
  • 智慧养老时代:老年人慢性病预防与生活方式优化
  • vscode在使用 alt + tab 切换程序窗口时,输入法总是自动变为中文模式
  • 并查集(Union-Find)数据结构详解
  • Realsense-D400 系列手动曝光控制
  • 【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置
  • 质量工程:数字化转型时代的质量体系重构
  • 分布式锁,rediss,redisson,看门狗,可重入,可重试
  • ArcGIS 10.8.1之后发布栅格数据的MapServer 动态工作空间 替换数据源渲染问题
  • 出现这几个症状,说明你真的老了
  • 美股三大指数均收涨超1%,热门中概股强势拉升
  • 李在明涉嫌违反《公职选举法》案将于15日进行首次重审公审
  • 两部门预拨4000万元支持山西、广西、陕西做好抗旱救灾工作
  • 国有六大行一季度合计净赚超3444亿,不良贷款余额均上升
  • 专访丨青年作家杜梨:以动物的视角去观察这个世界