网站首页 > 博客文章 正文
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配置文件,定义多容器应用的构成、服务间的依赖关系、网络配置、数据卷方便对多个容器进行管理。
读完后,忍不住要加个关注!不是我吹,但你会后悔没关注的!
猜你喜欢
- 2024-09-17 树莓派5安装docker、docker compose、gitlab-ce及配置
- 2024-09-17 11-docker系列-docker之compose安装和相关命令
- 2024-09-17 Docker-compose解析(docker-compose详解)
- 2024-09-17 docker-compose安装(docker-compose安装nginx)
- 2024-09-17 如何在Docker Compose中设置主机名
- 2024-09-17 docker系列:docker-compose用法详解
- 2024-09-17 Docker Compose搭建MySQL主从复制集群
- 2024-09-17 这个开源项目为编写各种Docker-Compose提供了样本
- 2024-09-17 一文掌握 Docker Compose 命令(docker—compose)
- 2024-09-17 通过Docker开源项目Compose实现对 Docker 容器集群的快速编排
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)