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:
在需要绑定卷的服务上进行挂载。
yaml
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:配置服务健康检查机制
yamlhealthcheck: test: [ "CMD-SHELL", "pg_isready" ] interval: 10s timeout: 5s retries: 5
-
test : 使用
CMD-SHELL
执行命令pg_isready
来检查数据库是否准备就绪。pg_isready
是postgresql用于检查是否是用的程序。运行效果如下,makefilepg_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配置文件,定义多容器应用的构成、服务间的依赖关系、网络配置、数据卷方便对多个容器进行管理。
读完后,忍不住要加个关注!不是我吹,但你会后悔没关注的!