前言
这篇主要是用docker-compose
来编排我们第一篇的内容,顺便谈谈docekr-compose
的好处
docker-compose
是什么? 简言之就是一个容器编排工具;
前置基础
在第一篇的基础上,你还要懂得yaml
的写法,比如数组的写法,对象的写法等等
写法大体和json
差不多,但是可表达的东西更多
一般用pip
(python的一个包管理工具)就可以安装最新的docker-compose
版本,
喜欢折腾的也可以自行编译维护
compose.yml
注意事项
- yaml对缩进非常严格,一个空格都能造成错误
docker-compose
内
- 冒号后面需要跟随空格,除了卷或者端口的映射
- 独立的区域,比如
volume
,networks
这种待映射的值不能以数组的形式,必须为mapping(映射,就是跟随冒号) - 直接拼接映射的
port
和volume
需要用双引号包括
# 使用版本号为3.6 version: '3.6' services: # 声明yapi服务 yapi: # 选择的镜像 image: crper/yapi:latest # 容器的自定义名字,也就是命令行的--name container_name: yapi # 不用: 则只是暴露内部端口,用了就是映射外部访问的接口 , -p ports: - "3000:3000" # 单个主机上用bridge(桥接)居多,Swarm(集群)上的overlay, 还有几个模式,比如host networks: - yapi # 启动的时候依赖哪个镜像 depends_on: - yapi-mongo # 设置容器的DNS服务 dns: - 114.114.114.114 - 8.8.8.8 # 容器重启策略,这里是开启了任何错误都会默认重启 restart: always # mongo服务 yapi-mongo: restart: always image: mongo:latest networks: - yapi container_name: yapi-mongo ports: - "27017:27017" # 映射卷 volumes: - "yapi-mongo:/data/db" # 自定义的网络名 networks: yapi: # 待映射的volume volumes: yapi-mongo: # 配置还有很多,比如什么子网,传参,日志输出,dns,临时文件夹,网络模式,资源分配等等 # 还能直接在里面构建镜像,而不用去用现有的 # 参数很多,所以要熟悉的配置也是比较麻烦的,这种东西只能一点点的去总结经验 # 具体看官方网站对compose的介绍 : https: //docs.docker.com/compose/compose-file/
命令行操作
docker-compose
只是个编排工具!!!!要记住这个;核心还是依赖docker;
因为你启动后,docker
的相关命令还是可以查看,停止乃至删除容器;
编排工具里面的封装的停止这些,可以理解为"队列",就是批量帮你处理你编排文件的容器
docker-compose
的命令行用起来和docker
差不多,compose
针对的是编排,而docker
是单一容器
- 创建容器实例并启动
docker-compose up
: 这个命令会执行docker-compose.yml
,根据规则全部执行完毕(没有错误的情况下)
若是不想卡在终端一直展示输出,(用-d
)守护进程的模式来启动即可
当然,你若是配置文件不是这个名字,需要用-f
来指定compose
的启动文件
- 停止且删除容器
docker-compose down
: 这个会把当前配置文件启动的服务依次干掉,并移除
- 暂停某个服务:
docker-compose stop [options] services
- 删除已经停止的容器:
docker-compose rm
build Build or rebuild services bundle Generate a Docker bundle from the Compose file config Validate and view the Compose file create Create services down Stop and remove containers, networks, images, and volumes events Receive real time events from containers exec Execute a command in a running container help Get help on a command images List images kill Kill containers logs View output from containers pause Pause services port Print the public port for a port binding ps List containers pull Pull service images push Push service images restart Restart services rm Remove stopped containers run Run a one-off command scale Set number of containers for a service start Start services stop Stop services top Display the running processes unpause Unpause services up Create and start containers version Show the Docker-Compose version information
看这些描述就能大体知道做什么的了..可以看到实例的状态,日志,进入容器等等
比如docker-compose ps
(查看服务的状态,运行,停止!)
Name Command State Ports ----------------------------------------------------------- yapi entrypoint.sh Exit 137 yapi-mongo docker-entrypoint.sh mongod Exit 0
比如docker-compose.yml
用到了哪些镜像, docker-compose images
Container Repository Tag Image Id Size -------------------------------------------------------- yapi crper/yapi latest ae69ea846d69 472 MB yapi-mongo mongo latest 91a642e82a2a 361 MB
比如删除停止的服务,docKer-compose rm
,不带参数会有交互式
By default, anonymous volumes attached to containers will not be removed. You can override this with `-v`. To list all volumes, use `docker volume ls`. Any data which is not in a volume will be lost. Usage: rm [options] [SERVICE...] Options: -f, --force Don't ask to confirm removal(强制删除,不交互) -s, --stop Stop the containers, if required, before removing(停止容器,如果需要可以在此之前删除) -v Remove any anonymous volumes attached to containers(删除任何链接到容器的匿名卷) -a, --all Deprecated - no effect.(已经废除,无效)