Docker Compose 配置文件使用秘籍,建议收藏!

Docker Compose配置文件使用YAML语法,并具有一组语法规则和作用。用于定义多容器的组成、依赖关系、网络、卷等。以下是Docker Compose文件的主要语法规则和作用:

  1. version: 指定Compose文件遵循的版本标准

    指定Compose文件的版本。例如:"version: '3.8'"。

  2. services: 定义一组相互协作的服务

    定义要运行的服务,并配置每个服务的属性。每个服务都有一个唯一的名称,可以指定镜像、端口映射、环境变量等。例如:

    services: web: image: nginx:latest ports: - "80:80" environment: - HELLO=value定义一个服务名为web,镜像nginx,宿主机与容器80映射,容器内添加环境变量key为HELLO,值为value。

  3. networks:

    定义网络配置,用于连接不同的服务。可以为每个网络指定一个唯一的名称,并配置网络驱动、IP范围等。例如:

    networks: frontend: backend:

  4. volumes: 定义数据卷

    定义卷配置,用于持久化数据或共享数据。可以为每个卷指定一个唯一的名称,并配置卷的类型、路径等。例如:

    volumes: data:

在需要绑定卷的服务上进行挂载。

yaml 复制代码
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    environment:
      - HELLO=value
    volumes:
      - data:/usr/local/nginx/html在服务中挂载data卷到容器内/usr/local/nginx/html目录。
  1. build: 指定如何从Dockerfile构建服务镜像

    定义构建服务镜像的配置。可以指定Dockerfile的路径、构建上下文、构建参数等。例如:

    services: app: build: context: . dockerfile: Dockerfile​

使用build配置来构建该服务的镜像,context指定了构建上下文的路径,dockerfile指定了Dockerfile的路径。

  1. depends_on: 表明服务间的依赖关系

    定义服务之间的依赖关系。可以确保在启动服务之前启动其所依赖的服务。例如:

    services: app: depends_on: - db

服务app依赖与db服务,db达到健康状态,开始启动app服务。

  1. environment: 设置服务的环境变量

    定义服务的环境变量。可以为服务设置一个或多个环境变量。例如:

    services: app: environment: - HELLO=value

  2. ports:映射服务内部端口到主机端口,实现外部访问容器内部服务。

    定义端口映射配置,用于将主机的端口映射到容器的端口。可以指定主机端口和容器端口的映射关系。例如:

    services: app: ports: - "8080:80"

宿主机8080与服务app80端口映射。

  1. restart: 设定服务的重启策略

    定义服务的重启策略。可以指定条件,在满足条件时自动重启服务。例如:

    services: app: restart: always

重启策略指定为always无论什么状态停止,都会重新启动。

重启策略还有其他选项,no,表示不重启,默认值。on-failure,表示非0状态停止时,进行重启。unless-stopped,表示手动停止时,不会被重启。当意外退出停止时,Docker Compose会进行重启。

  1. expose :仅向同一网络中的其他容器公开服务端口,不映射到主机端口

    暴露容器内部端口给其他容器,不映射到宿主机。

  2. links (已废弃):

    声明服务之间的连接。已废弃。Docker Compose会使用DNS进行映射每个服务,使用服务名即可连接。比如nginx容器内的ip为172.25.0.2,db容器内的ip为172.25.0.5,可以使用服务名进行互相访问,尝试使用ping进行验证,nginx访问db,不需要知道db的ip地址,使用db就可访问。

  3. healthcheck:配置服务健康检查机制

    yaml 复制代码
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
  • test : 使用CMD-SHELL执行命令pg_isready来检查数据库是否准备就绪。pg_isready是postgresql用于检查是否是用的程序。运行效果如下,

    makefile 复制代码
    pg_isready:5432 - 接受连接

    Redis、MySQL也提供了检查可用状态的程序,

    Redis使用redis-cli ping

    MySQL使用mysqladmin ping

  • interval: 每隔10秒执行一次健康检查。

  • timeout: 每次健康检查的超时时间为5秒。

  • retries: 如果连续5次健康检查失败,则认为服务不健康。

在依赖于该服务的服务中来要指定依赖于该服务,条件设置为心跳检测,如下,

yaml 复制代码
    depends_on:
      db:
        condition: service_healthy

以上是Compose文件中常用的语法规则和作用。根据具体的需求和场景,可以使用不同的配置选项来定义和配置服务,达成自己是需要。

一个Docker Compose代码示例。

yaml 复制代码
version: '3.8'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    expose:
      - 8080
    ports:
      - 8080:8080
    depends_on:
      db:
        condition: service_healthy
  db:
    image: postgres
    user: "postgres"
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      POSTGRES_PASSWORD: "abc123"
      POSTGRES_USER: postgres
      POSTGRES_DB: hello
    volumes:
      - db-data:/var/lib/postgresql/data
    ports:
      - 5432:5432
volumes:
  db-data:

db使用心跳检测,并在依赖db的服务中设置依赖条件。解决app在连接db时,db达到可用状态。

这份示例代码(含app代码、Dockerfile、docker-compose.yaml)存放在Gitee仓库gitee.com/ft/hello-go...,可供下载、克隆和实验性修改,以便深入了解各个配置项的实际作用。

scss 复制代码
docker compose down           // 停止Docker Compose启动的服务,删除由Compose生成的网络和卷
docker compose down --volumes // 停止Docker Compose启动的服务,同时删除卷
docker-compose up	      // 启动Docker Compose定义的服务
docker-compose up -d	      // 启动Docker Compose定义的服务,在后台运行通过执行docker-compose命令(如docker-compose up、docker-compose down等)可以便捷地启动、停止、销毁由Compose文件定义的整个应用栈。

通过使用Docker Compose配置文件,定义多容器应用的构成、服务间的依赖关系、网络配置、数据卷方便对多个容器进行管理。

读完后,忍不住要加个关注!不是我吹,但你会后悔没关注的!

相关推荐
杨浦老苏7 小时前
开源音乐管理软件Melody
docker·群晖·多媒体
杨浦老苏9 小时前
面向npm的实时仪表板Dashly
网络·docker·群晖·导航
JunLan~10 小时前
Docker 部署 GLPI(IT 资产管理软件系统)
运维·docker·容器
特立独行的猫a12 小时前
使用 Docker(Podman) 部署 MongoDB 数据库及使用详解
数据库·docker·podman
LUCIAZZZ14 小时前
基于Docker以KRaft模式快速部署Kafka
java·运维·spring·docker·容器·kafka
特立独行的猫a17 小时前
Golang 应用的 Docker 部署方式介绍及使用详解
开发语言·docker·golang
康世行18 小时前
Windows环境下MaxKB大模型 Docker部署图文指南
windows·docker·容器
程序员石磊1 天前
学术总结Ai Agent中firecrawl(大模型爬虫平台)的超简单的docker安装方式教程
人工智能·爬虫·docker
司江龙2 天前
centos7 配置国内镜像源安装 docker
运维·docker·容器
西木Qi2 天前
Docker之Dockerfile
docker