专业的编程技术博客社区

网站首页 > 博客文章 正文

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

baijin 2024-09-17 12:11:27 博客文章 4 ℃ 0 评论

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

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

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

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

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

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    environment:
      - HELLO=value

定义一个服务名为web,镜像nginx,宿主机与容器80映射,容器内添加环境变量key为HELLO,值为value。

networks:

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

networks:
  frontend:
  backend:

volumes: 定义数据卷

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

volumes:
  data:

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

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    environment:
      - HELLO=value
    volumes:
      - data:/usr/local/nginx/html

在服务中挂载data卷到容器内/usr/local/nginx/html目录。

build: 指定如何从Dockerfile构建服务镜像

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

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

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

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

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

services:
  app:
    depends_on:
      - db

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

environment: 设置服务的环境变量

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

services:
  app:
    environment:
      - HELLO=value

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

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

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

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

restart: 设定服务的重启策略

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

services:
  app:
    restart: always

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

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

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

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

links (已废弃):

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

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

    healthcheck:
      test: [ "CMD-SHELL", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
  • test: 使用CMD-SHELL执行命令pg_isready来检查数据库是否准备就绪。pg_isready是postgresql用于检查是否是用的程序。运行效果如下,
  • pg_isready :5432 - 接受连接
  • Redis、MySQL也提供了检查可用状态的程序,
  • Redis使用redis-cli ping
  • MySQL使用mysqladmin ping
  • interval: 每隔10秒执行一次健康检查。
  • timeout: 每次健康检查的超时时间为5秒。
  • retries: 如果连续5次健康检查失败,则认为服务不健康。

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

    depends_on:
      db:
        condition: service_healthy

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

一个Docker Compose代码示例。

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仓库 https://gitee.com/ft/hello-go-db.git,可供下载、克隆和实验性修改,以便深入了解各个配置项的实际作用。

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配置文件,定义多容器应用的构成、服务间的依赖关系、网络配置、数据卷方便对多个容器进行管理。



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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表