docker-compose
我曾经跨过山河大海、也穿过人山人海!!看过了前面那么多知识概念,自己的docker镜像终于跑起来了。但总感觉少了点什么,那就是老敲命令太tm烦了。尤其是container每次还的先删掉才能重新启动。docker run
那么多参数哥真的记不住啊。一个项目要依赖很多服务,又要部署超多实例,没有带给我们丝毫的便利。于是有人来拯救我们了!
使用docker-compose可以轻松、高效的管理容器,它是一个定义和运行多容器Docker应用的工具。使用YAML文件来配置应用服务,只需要一行命令就可以创建运行配置的服务。
Compose文件
docker-compose主要围绕compose文件定义工作,从发布到目前一共有下面这些版本
Compose文件版本 | Docker Engine版本需求 |
---|---|
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.+ |
不同版本的Compose文件格式要求不同的Docker Engine和docker-compose版本。之前就发生过Compose文件版本过高,docker-compose版本过低无法运行的窘境
Compose文件版本选择
可以使用最新的。也可以按阿里云一类的要求用对应版本的格式
Compose文件的编写
Compose文件使用YAML
格式编写,这个格式在python,ruby等语言中比较流行
让我们来看看大搜车easy-mock服务的Compose
文件
1 | # 声明版本 |
编译自己的Dockerfile
1 | version: '3' |
详细的配置
使用环境变量
假设有文件 dev.sh
1 | export NODE_RUN=dev |
在配置文件中${variable_name}引用
1 | version: '3' |
使用方法
1 | source dev.sh |
常用命令
启动
创建启动container
1 | docker-compose -f docker-compose.yml up -d --build |
停止
停止并删除container,networks,images,volumes
1 | docker-compose -f "docker-compose.yml" down |
检查单个容器环境
1 | docker-compose run web env |
单独的docker-compose只用于开发测试
配合 docker swarm 和 docker stack就是用于部署
疑难配置详解
command 和 entrypoint
command 和 entrypoint 最后必须能产生一个不退出进程的PID
command 和 entrypoint 指令会替换镜像 Dockerfile 中最后的 CMD 或 ENTRYPOINT 如果不太熟悉官方镜像尽量只传参数不要自己写命令
多行书写
1 | command: |
实战
设置Mysql时区,默认字符集等参数
1 | services: |
To Be Continue