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
[root@server ~]# yum install epel-release.noarch -y[root@server ~]# yum install docker-compose.noarch -y[root@server ~]# docker-compose versiondocker-compose version 1.18.0, build 8dd22a9docker-py version: 2.6.1CPython version: 3.6.8OpenSSL version: OpenSSL 1.0.2k-fips 26 Jan 2017
- 使用二进制安装
进入官网下载对应版本:https://github.com/docker/compose/releases
- 使用参数
-d # 后台启动-f,–file FILE # 指定Compose 模板文件,默认为docker-compose.yml-p,–project-name NAME # 指定项目名称,默认将使用当前所在目录名称作为项目名--verbose # 显示更多输出信息--log-level LEVEL # 定义日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL)--no-ansi # 不显示ANSI 控制字符-v, --version # 显示版本# 以下为命令选项,需要在docker-compose.yml|yaml 文件所在在目录里执行build # 构建镜像bundle # 从当前docker compose 文件生成一个以<当前目录>为名称的json格式的DockerBundle # 备份文件config -q # 查看当前配置,没有错误不输出任何信息create # 创建服务,较少使用down # 停止和删除所有容器、网络、镜像和卷events # 从容器接收实时事件,可以指定json 日志格式,较少使用exec # 进入指定容器进行操作help # 显示帮助细信息images # 显示镜像信息,较少使用kill # 强制终止运行中的容器logs # 查看容器的日志pause # 暂停服务port # 查看端口ps # 列出容器,较少使用pull # 重新拉取镜像,镜像发生变化后,需要重新拉取镜像,较少使用push #上传镜像restart # 重启服务,较少使用rm # 删除已经停止的服务run # 一次性运行容器scale # 设置指定服务运行的容器个数start # 启动服务,较少使用stop # 停止服务,较少使用top # 显示容器运行状态unpause # 取消暂定up # 创建并启动容器,较少使用
启动单个容器
- 编写docker-compose文件
[root@server ~]# mkdir /opt/docker[root@server ~]# cd /opt/docker[root@server docker]# vim docker-compose.ymlservice-nginx:image: nginxcontainer_name: nginx-1ports:- "80:80"
- 启动容器(注意:需要到docker-compose.yml文件所在的目录下,否则会报错找不到配置文件)
[root@server docker]# docker-compose up -dCreating nginx-1 ... done[root@server docker]# docker-compose psName Command State Ports----------------------------------------------------------------------------------nginx-1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp,:::80->80/tcp
启动多个容器
- 编写docker-compose文件
[root@server ~]# mkdir /opt/docker[root@server ~]# cd /opt/docker[root@server docker]# vim docker-compose.ymlservice-nginx:image: nginxcontainer_name: nginx-1ports:- "80:80"service-tomcat:image: tomcatcontainer_name: tomcat-1ports:- "8080:80"
- 启动容器
[root@server docker]# docker-compose up -d[root@server docker]# docker-compose psName Command State Ports----------------------------------------------------------------------------------nginx-1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp,:::80->80/tcptomcat-1 catalina.sh run Up 0.0.0.0:8080->8080/tcp,:::8080->8080/tcp
容器卷挂载
- 创建数据卷目录和文件
[root@server docker]# mkdir -p /data/nginx[root@server docker]# echo "docker nginx" > /data/nginx/index.html
- 修改配置文件
[root@server docker]# vim docker-compose.ymlservice-nginx:image: nginxcontainer_name: nginx-1volumes:- /data/nginx/:/usr/share/nginx/htmlports:- "80:80"service-tomcat:image: tomcatcontainer_name: tomcat-1ports:- "8080:8080"
- 启动容器,访问测试
[root@server docker]# docker-compose up -dStarting tomcat-1 ...Starting nginx-1 ... done[root@server docker]# curl 192.168.31.99docker nginx
相关操作
- 重启单个容器
[root@server docker]# docker-compose restart service-nginx
- 重启所有容器
[root@server docker]# docker-compose restart
- 停止单个容器
[root@server docker]# docker-compose stop service-nginx
- 停止所有容器
[root@server docker]# docker-compose start service-nginx
- 启动单个容器
[root@server docker]# docker-compose stop
- 启动所有容器
[root@server docker]# docker-compose start
