docker-compose详解
2019-11-11 本文已影响0人
魔曦帝天
version: '3'
services:
mysql:
# build: ./mysql
image: mysql_docker_mysql:latest
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always
# volumes:
# - type: volume
# source: /opt/Docker_comeper_data/adminIE/mysql/mysqldb
# target: /var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: QFedu123!
container_name: "django_test"
networks:
- dev
nginx:
build: ./nginx
volumes:
- /opt/Docker_comeper_data/adminIE/nginx/nginx_conf/:/etc/nginx/conf.d/
- /opt/Docker_comeper_data/adminIE/nginx/all_static/allstatic/:/allstatic
expose:
- "80"
ports:
- "8001:80"
networks:
- dev
container_name: "nginx_server1"
redis:
image: redis:alpine
expose:
- "6379"
ports:
- "6379:6379"
container_name: "redis_server"
networks:
- dev
rabbitemq:
build: ./rabbitemq
expose:
- "5672"
- "4369"
- "5671"
- "25672"
ports:
- "5672:5672"
container_name: "rabbitmq"
networks:
- dev
adminie:
# image: centos7-python3.7:latest
build: ./adminie
volumes:
- /opt/Docker_comeper_data/adminIE/adminie/cmdbteam/:/opt
container_name: "adminIE_django"
expose:
- "22"
- "80"
ports:
- "8222:22"
- "8000:80"
networks:
- dev
networks :
dev:
driver: bridge
一份标准配置文件应该包含 version、services、networks 三大部分
services 的书写规则
image
没有镜像回自动拉取
server:
web:
image: [image_name]:[tag]
build
基于一份 Dockerfile
指定 Dockerfile 所在文件夹的路径
build: /path/to/build/dir
build: ./dir
报错: 无上下文
如果你同时指定了 image 和 build 两个标签,那么 Compose 会构建镜像并且把镜像命名为 image 后面的那个名字。
build: ./dir
image: webapp:tag
container_name
Compose 的容器名称格式是:<项目名称><服务名称><序号>
container_name: app
depends_on
设置启动顺序
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
dns
dns:
- 8.8.8.8
- 9.9.9.9
environment
标签的作用是设置镜像变量
environment 和 Dockerfile 中的 ENV 指令一样会把变量一直保存在镜像、容器中,类似 docker run -e 的效果
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
expose
Dockerfile中的EXPOSE指令一样,用于指定暴露的端口,并不映射
Dockerfile中的EXPOSE指令一样,用于指定暴露的端口
extra_hosts
添加主机名的标签
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
links
容器连接
links:
- db
- db:database
- redis
映射端口的标签。
使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
volumes
能实现持久化存储,以及容器之间共享数据
volumes:
// 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
- /var/lib/mysql
// 使用绝对路径挂载数据卷
- /opt/data:/var/lib/mysql
// 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。
- ./cache:/tmp/cache
// 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
- ~/configs:/etc/configs/:ro
// 已经存在的命名的数据卷。
- datavolume:/var/lib/mysql
networks
services:
some-service:
networks:
- some-network
- other-network
