docker-compose(多容器管理,一个项目)
Docker 提倡理念是 “一个容器一个进程”,假设一个服务需要由多个进程组成,就需要多个容器组成一个系统,相互分工和配合对外提供完整服务
在启动容器是,同一台主机下如果两个容器之间需要由数据交流,使用 --link 选项建立两个容器之间的互联,前提是建立mariadb 已经开启
容器编排工具,允许用户在一个模板( YAML 格式 )中定义一组相关联的容器,会根据 --link 等参数,对启动的优先级进行排序
docker-compose基本语法
version: '2'
services:
web:
image: dockercloud/hello-world
ports:
- 8080
networks:
- front-tier
- back-tier
redis:
image: redis
links:
- web
networks:
- back-tier
lb:
image: dockercloud/haproxy
ports:
- 80:80
links:
- web
networks:
- front-tier
- back-tier
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
关键字
image(镜像)
build:服务除了可以基于指定的镜像,还可以基于一份 Dockerfile,在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务 容器(即支持绝对路径,也支持相对路径,只要上下文确定就可以读取dockerfile文件)
command docker run 镜像名 修改的启动命令
container_name:<项目名称><服务名称><序号>
depends_on:依赖于谁
dns:修改容器内部dns服务器
tmpfs:临时目录
entrypoint:指定启动命令
env_file:批量化替换容器内的环境变量(符合kv结构)
environment:镜像变量
expose:端口暴露(提示很重要,但是外部访问不到)
external_links:链接外部容器
extra_hosts:解析记录
labels - docker-swarm :标签(主要工作在docker-swarm集群)
links:与 Docker client 的 --link 一样效果,会连接到其它服务中的容器
logging json-file:指定当前日志存储方式(json格式)
pid:当前进程的pid名
port :当前暴露的端口 (外部可以访问到)
security_opt:覆盖默认服务标签(以废除)
stop_signal:信号
volumes:卷
volumes_from:从其它容器或者服务挂载数据卷,可选的参数是 :ro或者 :rw,前者表示容器只读,后者表示容器对数据卷是可读可写的。默认情况下是可读可写的
cap_add, cap_drop:特殊权限的添加,移除
extends:添加其他的yaml文件(本文件+添加的yaml文件才是完整的dockercompose文件)
network_mode:网络模式
networks:网络
Example
version: '2'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
restart: always
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress