Docker 之 Docker-Compose
一、产生背景
运行一个镜像,需要添加大量的参数。如果要运行不同发镜像还需要不同的参数。
容器增加使得使用 docker run 启动命令变得多繁琐。
通过Docker-Compose 可以进行批量的管理容器,配置参数。
只需要一个 docker-compose.yml 文件去维护即可。
二、下载、配置
1. github官网下载
Dockrer-Compose 的github发布地址:https://github.com/docker/compose
releases 中选择比较稳定的发布版本。
2、修改文件名
非必须,需要是为了使用命令方便。Docker-Compose 下载之后名称比较长,修改之后方便使用命令。
mv docker-compose-Linux-x86_64  /usr/local
cd /usr/local
mv docker-compose-Linux-x86_64 docker-compose
chmod 777  docker-compose3、配置环境变量
非必须,需要是为了后续使用命令方便。为了可以在任意目录使用docker-Compose 命令,方便后续执行。
将 docker-compose 文件移动到 /usr/local/bin, 修改了 /etc/profile 文件,给/usr/local/bin 配置到 PATH 中。
mv docker-compose /usr/lcoal/bin
vi /etc/profileexport PATH=$JAVA_HOME:/usr/local/bin:$PATHsource /etc/profile测试配置是否成功,在任意目录下执行 docker-compose
二 Docker-Compose 管理容器
1、YML文件
文件名称:docker-compose.yml
文件遵循YAML文件格式要求:key+":"+空格+value
换行+缩进的方式写多组值。
文件不要使用制表符。
2、示例
示例:Docker-Compose 管理Mysql和Tomcat容器
varsion: '3.1'
services: 
  mysql:             # 服务的名称
    restart: always  # 表示只要docker启动,这个服务就跟着一起启动
    image: daocloud.io/library/mysql:5.7.4   # 指定镜像来源路径
    container_name: mysql    # 指定容器名称
    ports:
      - 3306:3306  # 指定端口号映射
    environment:
      MYSQL_ROOT_PASSWORD: root    #指定Mysql的root用户登录密码
      TZ: Asia/Shanghai            #指定时区
    volumes:
      - /opt/docker_msql_tomcat/mysql_data:/var/lib/mysql  # 映射数据卷
  tomcat: 
    restart: always
    image: daocloud.io/library/tomcat:8.5.15-jre8    
    container_name: tomcat
    ports:
      - 8080:8080
    environment: 
      TZ: Asia/Shanghai
    volumes:
      - /opt/docker_msql_tomcat/tomcat_webapps:/var/local/tomcat/webapps
      - /opt/docker_msql_tomcat/tomcat_logs:/var/local/tomcat/logs三.使用 docker-compose 命令管理
1、注意事项
在使用docker-compose 命令时,默认会在当前目录下找 docker-compose.yml 文件。
2、常见命令
基于 docker-compose.yml 启动管理的容器
docker-compose up -d关闭并删除容器
docker-compose down开启|关闭|重启 已经存在的由docker-compose维护的容器
docker-compose start
docker-compose stop 
docker-compose restart查看由docker-compose维护的容器
docker-compose  ps查看由docker-compose维护的容器的日志
docker-compose  logs  -f四.Docker-compose配置Dockerfile 使用
使用 docker-compose.yml 文件以及 Dockerfile 文件再生产自定义的镜像的同时启动当前镜像,并且由Docker-compose去管理容器。
1、yml文件
version: '3.1'
services:
  tomcat_dcdf: 
    restart: always
    build:             # 构建自定义镜像
      context: ../     # 指定Dockerfile文件所在路径,../表示上级目录
      dockerfile: Dockerfile   # 指定Dockerfile文件名称
    image: tomcat_dcdf:1.0.1    # 构建生成的镜像文件名称
    container_name: tomcat_dcdf
    ports:
      - 8081:8080
    environment: 
      TZ: Asia/Shanghai
2、Dockerfile 文件
FROM daocloud.io/library/tomcat:8.5.15-jre8  
CP  test.war /var/local/tomcat/webapps目录层级
- docker_tomcat_dcdf
|–+ docker-compose
| |– docker-compose.yml
|– dockerfile
|– test.war 
注意,测试test.war,需要先用客户端连接mysql,创建test 数据库。
3、执行构建/启动命令
一定要在 docker-compse 目录执行,docker-compose.yml 在这个目录。
docker-compse up -d因为:在使用docker-compose 命令时,默认会在当前目录下找 docker-compose.yml 文件。
注意:
docker-compse up -d : 可以直接启动基于docker-compose.yml 文件以及 Dockerfile 文件构建的自定义镜像。 如果自定义镜像不存在, docker-compose 会自动构建出自定义镜像,如果自定义镜像已经存在, docker-compose 会直接运行这个自定义镜像。
如果需要重新构建自定义镜像,执行:
 docker-compose build如果需要在运行之前,重新构建自定义镜像,执行:
 docker-compose up  -d  --build4、自建示例
示例一:Docker-compose 管理Nginx
yml文件:
version: '3.1'
services:
  nginx: 
    restart: always
    image: daocloud.io/library/nginx:latest
    container_name: nginx
    ports:
      - 80:80
    volumes:
      - /opt/docker_nginx/conf.d/:etc/nginx/conf.d



