Docker系列九Docker-compose

一、安装

  1. 简介
    Dockerfile与服务编排,我们知道使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。compose允许用户在一个模板(YAML格式)中定义一组相关联的应用容器(被称为一个project,即项目),例如一个Web服务容器再加上后端的数据库服务容器(LNMP)等。

  2. 下载

    curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    
  3. 授权

    $ sudo chmod +x /usr/local/bin/docker-compose
    
  4. 创建软链

    $ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    
  5. 测试安装是否成功

    $ docker-compose --version
    docker-compose version 1.25.5, build 8a1c60f6
    

二、编写docker-compose.yml

首先以简单的redis为例

  • 创建需要挂载的文件夹

    mkdir -p /usr/local/docker/redis/data
    
  • 创建配置文件

    touch /usr/local/docker/redis/redis.conf
    
    port 6379
    daemonize no
    tcp-keepalive 300
    databases 16
    save 10 2
    rdbcompression yes
    dbfilename dump-6379.rdb
    appendonly yes
    appendfilename appendonly-6379.aof
    #如果需要外网访问可以加上下面的配置
    bind 0.0.0.0
    requirepass 密码
    protected-mode no
    
  • 构建docker-compose.yml,最好使用在编辑器里编写,防止格式错误

    touch /usr/local/docker/redis/docker-compose.yml
    
    version: '3.1'
    services:
      redis:
        restart: always
        image: redis
        container_name: redis56380
        environment:
          TZ: Asia/Shanghai
        ports:
          - 56380:6379
        privileged: true
        volumes:
          - /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf
          - /usr/local/docker/redis/data:/data
        command:
          - sh
          - -c
          - |
            redis-server /etc/redis/redis.conf
    
    version:docker-compose包含多个1/2/3多个版本,根据docker引擎版本而定,一般不是很老的版本的写3.0就没问题
    services:配置多个镜像脚本,如上面提到的redis,也可以是mysql等等
    redis.image:指定镜像版本,上面的就是默认拉取最新的redis:latest版本
    command:需要执行的运行命令,有多种写法,推荐上面这种,如果有多个在命令行,有两种方式,串行化的方式
        command:
            - sh
            - -c 
            - |
                cmd1
                cmd2
                cmd3
        并行方式       
        command:
            - sh
            - -c 
            - |
                cmd1 &
                cmd2 &
                cmd3
        也可以使用bash的方式
        command: /bin/bash -c "cp /app/dtest/config.default.yml /app/config.yml && python -u /app/dtest/tcc.py"
    
    其他命令:和docker中的命令含义一样。
    
  • 启动

    注意,需要切换到docker-compose.yml所在目录

    docker-compose up -d
    

    其他常用命令

    # 1. 基于docker-compose.yml启动管理的容器
    docker-compose up -d
    # 2. 关闭并删除容器
    docker-compose down
    # 3. 开启|关闭|重启已经存在的由docker-compose维护的容器
    docker-compose start|stop|restart
    # 4. 查看由docker-compose管理的容器
    docker-compose ps
    # 5. 查看日志
    docker-compose logs -f
    

三、项目整体部署

  1. 首先先编写项目的Dockerfile文件

    # 该镜像需要依赖的基础镜像
    FROM openjdk:8-jdk
    # 将当前目录下的jar包复制到docker容器的根目录下,其他目录可以自己指定
    ADD knife4j-1.0.0.jar app.jar
    # 运行过程中创建一个app.jar文件
    RUN bash -c 'touch /app.jar'
    # 护者信息
    MAINTAINER 214556924@qq.com
    #容器挂载
    VOLUME /tmp
    #指定构建镜像时暴露端口
    EXPOSE 9092
    # 指定docker容器启动时运行jar包
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    
  2. 编写docker-compose.yml文件

    version: '3.1'
    services:
      knife:
        build: 
          context: /usr/local/docker/knife
          dockerfile: Dockerfile
        container_name:  knife4jv1
        ports:
          - 3209:9092
      redis:
        restart: always
        image: redis
        container_name: redis56380
        environment:
          TZ: Asia/Shanghai
        ports:
          - 56380:6379
        privileged: true
        volumes:
          - /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf
          - /usr/local/docker/redis/data:/data
        command:
          - sh
          - -c
          - |
            redis-server /etc/redis/redis.conf
    

    命令解释:

    services.knife:指定项目的服务名称

    services.knife.build:项目的构建时的信息,构建时的根目录,如dockerfile文件

    services.knife.container_name:容器名称

    services.knife.ports:指定映射端口

    后面就是redis相关命令在前面已经介绍过了

  3. 项目启动

    文件编写好后,文件结构是这样的,然后再切换到/usr/local/docker直接启动

    docker-compose up -d