个人学习笔记,谢绝转载!!!
原文:https://www.cnblogs.com/wshenjin/p/13293881.html
docker-compose.yml是一个定义服务、网络和卷的YAML文件,默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。
docker-compose.yml标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分。
docker-compose.yml
version: '3'
services:
rdb_01: #服务名称,一个服务对应一个容器
image: rdb-v3.2.7 #image标签指定服务镜像名称或镜像ID,如果本地不存在,Compose将会尝试拉取镜像。
build: #除了基于指定的镜像,还可以基于Dockerfile。build标签指定Dockerfile所在文件夹的路径,Compose将会利用Dockerfile自动构建镜像并启动容器。
#如果同时指定image和build两个标签,那么Compose会构建镜像并且把镜像命名为image值指定的名字。
context: ./redis3.2.7/ #设定上下文根目录,也可以是链接到git仓库的url。当提供的值是相对路径时,被解析为相对于撰写文件的路径,此目录也是发送到Docker守护进程的context。
dockerfile: Dockerfile #指定dockerfile,这个dockerfile就位于centext标签指定的路径下。
#context和dockerfile可以合并到build标签,例如:build: ./redis3.2.7/
container_name: myrdb #自定义容器名称,默认容器名称格式是:${项目名称}_${服务名称}_${序号}
commond: CND #覆盖容器启动后默认执行的命令
entrypoint: /path/entrypoi.sh #覆盖Dockerfile中的定义的entrypoint
depends_on: #容器依赖
- web_01 #例如:web_01服务启动完,再启动redb_01
ports: #映射端口
- "6379:6379"
extra_hosts #在容器/etc/hosts文件中添加hosts
- "host1:1.1.1.1"
- "host2:2.2.2.2"
volumes: #挂载卷
- /data/redis/ #只是指定一个路径,会自动在创建一个数据卷
- /volumes/rdb_01/:/data/redis/
- /volumes/pubvolume/:/tmp/:ro #只读
volumes_from: #从另一个服务或容器挂载其数据卷
- web_01 #服务名称
- nginx-v1.14 #容器名称
dns:8.8.8.8 #自定义dns
dns: #可以按列表的语法
- 8.8.8.8
- 9.9.9.9
expose: #暴露端口,但不映射到宿主机,只允许能被连接的服务访问。仅可以指定内部端口为参数
- "1234"
networks: #指定网络,默认每个services都会建立一个独立的网络
- "rdb_network" #自定义个 rdb_network,需要在networks字段配置
rdb_network: #也可以这样,并指定IP地址,语法捉摸不透
ipv4_address: 172.16.1.10
environment: #设置环境变量
- RDB_ENV=TESTRDB
networks:
rdb_network: #自定义一个网络,rdb_network
driver: bridge #网络模式
ipam:
driver: default
config:
- subnet: 172.16.1.0/24 #自定义IP段