我们在把服务docker化的时候,不仅需要把各个服务做成docker镜像,还需要编辑各个服务之间的启动方式。对于不需要暴露的端口,还需要通过虚拟网桥的方式,保证各个服务之间的正常通讯。这就需要用到 docker-compose 工具,并且需要编辑对应的 Docker Compose 配置文件来控制启动。
Docker Compose配置文件是一个YAML格式的文本文件,通常命名为 docker-compose.yml 或者 compose.yml 。它定义了多个容器应用的服务、网络和卷等细节,使得用户可以使用一个命令轻松管理多容器Docker应用的生命周期。通过该文件,你可以描述应用程序中的服务(如Web服务器、数据库等),每个服务运行的镜像、端口映射、依赖关系、环境变量、存储卷等信息。
今天就拿一个开源项目的 compose.yml 文件 分享一下编写格式。
x-logging: &default-logging
driver: "json-file"
options:
max-size: "10m"
max-file: "10"
networks:
playedu:
driver: bridge
volumes:
mysql-data:
services:
playedu:
image: registry.cn-hangzhou.aliyuncs.com/playedu/light:2.0
restart: always
environment:
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=playedu
- DB_USER=root
- DB_PASS=playeduxyz
- SA_TOKEN_IS_CONCURRENT=false
- SA_TOKEN_JWT_SECRET_KEY=${PLAYEDU_JWT_KEY:-playeduxyz}
ports:
- "${PLAYEDU_API_PORT:-9700}:9898"
- "${PLAYEDU_PC_PORT:-9800}:9800"
- "${PLAYEDU_H5_PORT:-9801}:9801"
- "${PLAYEDU_ADMIN_PORT:-9900}:9900"
networks:
- playedu
depends_on:
- mysql
logging: *default-logging
mysql:
build: ./docker/mysql
restart: always
environment:
- MYSQL_DATABASE=playedu
- MYSQL_ROOT_PASSWORD=playeduxyz
- TZ=UTC
volumes:
- mysql-data:/var/lib/mysql
ports:
- "${MYSQL_PORT:-23307}:3306"
networks:
- playedu
logging: *default-logging
- x-logging: &default-logging 定义一个日志记录模板,名字是:default-logging
- driver: “json-file” Docker 容器使用的日志驱动为
json-file
,即将容器的标准输出和标准错误输出记录到 JSON 格式的文件中。 - options: 定义参数,日志文件最大 10MB,超过该大小后会自动进行日志轮转。最多10个旧文件。
max-size: “10m”
max-file: “10”
- driver: “json-file” Docker 容器使用的日志驱动为
- networks: 定义虚拟网络,名字是 playedu,模式是bridge(桥)
playedu:
driver: bridge - volumes: 定义卷(存储用的),名称是 mysql-data。这里可以定义多个。
mysql-data: - services: 这里定义的是服务的部分
- playedu: 服务名称,也用作主机名,通过虚拟网络访问访问的时候,可以直接访问此主机。
- image: 指定使用哪个镜像
- build: 指定镜像制作的目录。如果指定的镜像不存在,则自动会到此目录,查找Dockerfile文件,并创建镜像。
- restart: 启动方式,配置always,在监控到服务down之后,自动启动。
- environment: 以来的环境变量。这些变量,在镜像初始化或者运行的时候,会用到这些变量。
- ports: 端口映射,把容器内部端口映射到宿主机。
- networks: 容器之间通讯使用的网络。
- depends_on: 启动依赖,用来排布启动顺序。
- logging: 使用的日志模板。
- volumes: 卷挂载,把指定的卷挂载到容器内部指定目录。
- playedu: 服务名称,也用作主机名,通过虚拟网络访问访问的时候,可以直接访问此主机。
以上就是 compose.yml 配置文件的主要配置项。
关于docker-compose 基本操作,参考往期文章:https://www.madbull.site/?p=2092 。
发表回复