Docker compose简介

当在宿主机启动较多的容器的时候,如果都是手动操作会觉得比较麻烦而且容易出错,这时就可以使用docker的单机编排工具docker-compose

docker-compose是docker容器的一种单机编排服务,可以管理多个容器,比如可以解决容器之间的依赖关系。比如说启动一个Nginx前端服务的时候会调用后端的tomcat,那就得先启动tomcat,但是启动tomcat容器还需要依赖数据库,那就还得再先启动数据库,docker-compose就可以解决这样的嵌套依赖关系,可以完全替代docker run对容器进行创建、启动和停止

docker-compose项目是docker官方的开源项目,负责实现对docker容器集群的快速编排,docker-compose将所管理的容器分为三层,分别是工程、服务以及容器

docker-compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景

Docker compose使用

环境准备

  • 使用yum安装docker-compose
  1. [root@server ~]# yum install epel-release.noarch -y
  2. [root@server ~]# yum install docker-compose.noarch -y
  3. [root@server ~]# docker-compose version
  4. docker-compose version 1.18.0, build 8dd22a9
  5. docker-py version: 2.6.1
  6. CPython version: 3.6.8
  7. OpenSSL version: OpenSSL 1.0.2k-fips 26 Jan 2017
  • 使用二进制安装

进入官网下载对应版本:https://github.com/docker/compose/releases

  • 使用参数
  1. -d # 后台启动
  2. -f,–file FILE # 指定Compose 模板文件,默认为docker-compose.yml
  3. -p,–project-name NAME # 指定项目名称,默认将使用当前所在目录名称作为项目名
  4. --verbose # 显示更多输出信息
  5. --log-level LEVEL # 定义日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
  6. --no-ansi # 不显示ANSI 控制字符
  7. -v, --version # 显示版本
  8. # 以下为命令选项,需要在docker-compose.yml|yaml 文件所在在目录里执行
  9. build # 构建镜像
  10. bundle # 从当前docker compose 文件生成一个以<当前目录>为名称的json格式的Docker
  11. Bundle # 备份文件
  12. config -q # 查看当前配置,没有错误不输出任何信息
  13. create # 创建服务,较少使用
  14. down # 停止和删除所有容器、网络、镜像和卷
  15. events # 从容器接收实时事件,可以指定json 日志格式,较少使用
  16. exec # 进入指定容器进行操作
  17. help # 显示帮助细信息
  18. images # 显示镜像信息,较少使用
  19. kill # 强制终止运行中的容器
  20. logs # 查看容器的日志
  21. pause # 暂停服务
  22. port # 查看端口
  23. ps # 列出容器,较少使用
  24. pull # 重新拉取镜像,镜像发生变化后,需要重新拉取镜像,较少使用
  25. push #上传镜像
  26. restart # 重启服务,较少使用
  27. rm # 删除已经停止的服务
  28. run # 一次性运行容器
  29. scale # 设置指定服务运行的容器个数
  30. start # 启动服务,较少使用
  31. stop # 停止服务,较少使用
  32. top # 显示容器运行状态
  33. unpause # 取消暂定
  34. up # 创建并启动容器,较少使用

启动单个容器

  • 编写docker-compose文件
  1. [root@server ~]# mkdir /opt/docker
  2. [root@server ~]# cd /opt/docker
  3. [root@server docker]# vim docker-compose.yml
  4. service-nginx:
  5. image: nginx
  6. container_name: nginx-1
  7. ports:
  8. - "80:80"
  • 启动容器(注意:需要到docker-compose.yml文件所在的目录下,否则会报错找不到配置文件)
  1. [root@server docker]# docker-compose up -d
  2. Creating nginx-1 ... done
  3. [root@server docker]# docker-compose ps
  4. Name Command State Ports
  5. ----------------------------------------------------------------------------------
  6. nginx-1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp,:::80->80/tcp

启动多个容器

  • 编写docker-compose文件
  1. [root@server ~]# mkdir /opt/docker
  2. [root@server ~]# cd /opt/docker
  3. [root@server docker]# vim docker-compose.yml
  4. service-nginx:
  5. image: nginx
  6. container_name: nginx-1
  7. ports:
  8. - "80:80"
  9. service-tomcat:
  10. image: tomcat
  11. container_name: tomcat-1
  12. ports:
  13. - "8080:80"
  • 启动容器
  1. [root@server docker]# docker-compose up -d
  2. [root@server docker]# docker-compose ps
  3. Name Command State Ports
  4. ----------------------------------------------------------------------------------
  5. nginx-1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp,:::80->80/tcp
  6. tomcat-1 catalina.sh run Up 0.0.0.0:8080->8080/tcp,:::8080->8080/tcp

容器卷挂载

  • 创建数据卷目录和文件
  1. [root@server docker]# mkdir -p /data/nginx
  2. [root@server docker]# echo "docker nginx" > /data/nginx/index.html
  • 修改配置文件
  1. [root@server docker]# vim docker-compose.yml
  2. service-nginx:
  3. image: nginx
  4. container_name: nginx-1
  5. volumes:
  6. - /data/nginx/:/usr/share/nginx/html
  7. ports:
  8. - "80:80"
  9. service-tomcat:
  10. image: tomcat
  11. container_name: tomcat-1
  12. ports:
  13. - "8080:8080"
  • 启动容器,访问测试
  1. [root@server docker]# docker-compose up -d
  2. Starting tomcat-1 ...
  3. Starting nginx-1 ... done
  4. [root@server docker]# curl 192.168.31.99
  5. docker nginx

相关操作

  • 重启单个容器
  1. [root@server docker]# docker-compose restart service-nginx
  • 重启所有容器
  1. [root@server docker]# docker-compose restart
  • 停止单个容器
  1. [root@server docker]# docker-compose stop service-nginx
  • 停止所有容器
  1. [root@server docker]# docker-compose start service-nginx
  • 启动单个容器
  1. [root@server docker]# docker-compose stop
  • 启动所有容器
  1. [root@server docker]# docker-compose start