一、Docker-Compose.yml结构
docker-compose.yml文件包含:version、services、networks、volumes 、ports等配制组成
version 定义了版本信息
- 这个定义关乎与docker的兼容性
- Compose 文件格式有3个版本,分别为1, 2.x 和 3.x
- 目前主流的为 3.x 其支持 docker 1.13.0 及其以上的版本
Compose 配置文件版本 |
Docker 版本 |
3.8 |
19.03.0+ |
3.7 |
18.06.0+ |
3.6 |
18.02.0+ |
3.5 |
17.12.0+ |
3.4 |
17.09.0+ |
3.3 |
17.06.0+ |
3.2 |
17.04.0+ |
3.1 |
1.13.1+ |
3.0 |
1.13.0+ |
2.4 |
17.12.0+ |
2.3 |
17.06.0+ |
2.2 |
1.13.0+ |
2.1 |
1.12.0+ |
2.0 |
1.10.0+ |
1.0 |
1.9.1+ |
services主要用来定义各个容器(每个容器的配置)
networks定义了网络信息,提供给 services 中的 具体容器使用,类似于命令行的 docker network create
volumes卷挂载路径设置,设置宿主机路径:容器中路径
ports 建立宿主机和容器之间的端口映射关系
二、Docker-Compose模板文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| # 指定配置文件的版本号 version: "3.8"
# 定义服务,可以多个 services: # 服务名称cache cache: # 标明构建的镜像 image: redis:6.0.5 # 生成的容器名称 container_name: my_redis # 指定网络 networks: - mynetwork # 指定容器中需要挂载的文件 volumes: - ./redis/redis.conf:/usr/local/etc/redis/redis.conf:ro # 容器启动后执行命令 command: ["redis-server", "/usr/local/etc/redis/redis.conf",start.sh'] # 宿主机与容器端口映射 ports: # 指定端口映射,HOST:Container - "6379" # 指定容器的端口6379,宿主机会随机映射端口 - "8080:80" # 宿主机端口8080,对应容器80 depends_on: - mysql #依赖容器启动之后再启动 - redis # 暴露端口给-link或处于同一网络的容器,不暴露给宿主机 expose: ["3000"] # 挂断自动重新启动 restart: always # 指定容器的环境变量 environment: - TZ=Asia/Shanghai # 设置容器时区与宿主机保持一致 # - RUOYI_ENV=development 或 RUOYI_ENV: development env_file: # 从文件中获取环境变量,可以指定一个或多个文件,其优先级低于environment指定的环境变量 - /opt/runtime_opts.env # 绝对路径 - ./common.env # 相对路径,相对当前 docker-compose.yml 文件所在目录 - ./apps/web.env # 相对路径,相对当前 docker-compose.yml 文件所在目录 # 指定容器运行的用户为root user: root # 指定服务名称 mysql: # 指定服务使用的镜像 image: mysql # 指定容器名称 container_name: mysql # 指定服务运行的端口 ports: - 3306:3306 # 指定容器中需要挂载的文件 volumes: - /etc/localtime:/etc/localtime - /data/mysql/log:/var/log/mysql - /data/mysql/data:/var/lib/mysql - /data/mysql/mysql-files:/var/lib/mysql-files - /data/mysql/conf:/etc/mysql # 挂断自动重新启动 restart: always 连接其他容器的服务 links: - db:database #可以以database为域名访问服务名称为db的容器 # 指定容器的环境变量 environment: - TZ=Asia/Shanghai # 设置容器时区与宿主机保持一致 - MYSQL_ROOT_PASSWORD=xiujingmysql. # 设置root密码 # 指定容器运行的用户为root user: root # 指定服务名称 mongo: # 指定服务使用的镜像 image: mongo # 指定容器名称 container_name: mongo # 指定服务运行的端口 ports: - 27017:27017 # 指定容器中需要挂载的文件 volumes: - /etc/localtime:/etc/localtime - /data/mongodb/db:/data/db - /data/mongodb/configdb:/data/configdb - /data/mongodb/initdb:/docker-entrypoint-initdb.d # 挂断自动重新启动 restart: always # 指定容器的环境变量 environment: - TZ=Asia/Shanghai # 设置容器时区与宿主机保持一致 - AUTH=yes - MONGO_INITDB_ROOT_USERNAME=admin #账号 - MONGO_INITDB_ROOT_PASSWORD=admin #密码 # 服务名称app app: # 构建镜像 build: # 指定上下文 context: . # 指定构建脚本 dockerfile: ./Dockerfile-multi-stage # 生成的容器名称 container_name: my_hello # 指定网络 networks: - mynetwork # 配置环境变量 environment: - REDIS_HOST=my_redis # 指名容器依赖关系 depends_on: - cache # 宿主机与容器端口映射 ports: - "5000:5000"
# 网络配置,与services在同一层级,注意书写格式对齐 networks: # 标识自定义的网络,对应容器中指定的网络的名称 mynetwork: # 在容器网路中展示的名称 name: my_network # 网络驱动类型 driver: bridge
|
expose: [“3000”] 暴露端口给-link或处于同一网络的容器,不暴露给宿主机
三、Docker-Compose模板文件示例