docker compose简介

  • 前言
  • 一、docker compose概念
  • 二、docker compose安装
  • 三、docker compose常用命令
  • 四、docker-compose.yml文件详解
  • 1、文件结构
  • 2、示例:docker-compose管理微服务


前言

  微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么操作效率之低,维护量之大可想而知。docker compose就解决了这个痛点,可以使运维人员高效的管理多个容器。docker compose的配置文件docker-compose.yml,我们可以简单粗暴的理解其就是一个将多个docker run命令堆积起来的文件,从而实现对多个容器进行启停等管理。

一、docker compose概念

Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)

Docker Compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例

Docker运行多个容器 多个docker compose_重启

二、docker compose安装

docker-compose是一个二进制文件,下载完成之后可直接使用docker-compose命令

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

docker-compose --version

三、docker compose常用命令

docker-compose ps  # 列出所有容器

docker-compose up  [ -d ]  # 启动所有容器 -d后台启动

docker-compose start <services name>  # 启动某个服务运行的容器

docker-compose stop <services name>  # 停止某个服务运行的容器

docker-compose restart <services name>  # 重启某个服务运行的容器

docker-compose rm <services name>  # 删除某个服务运行的容器

四、docker-compose.yml文件详解

1、文件结构

demo:

version: "3.9"  # 2.x 或者 3.x 版本都可以
services:  # 服务,包含多个服务
  web:    # 服务名称,docker-compose命令管理
    build: .   # 构建镜像,可从dockerfile直接构建镜像并运行
    ports:     # 端口映射,容器端口映射到主机端口(列表)
      - "5000:5000"
    volumes:   # 文件挂载,主机路径挂载到容器路径
      - .:/code
      - logvolume01:/var/log
    links:    # 别名
      - redis
  redis:      # 服务名称
    image: redis  # 镜像地址
volumes:  # 挂载定义
  logvolume01: {}

关键字段详解:

1.environment: # 配置环境变量
environment:
    - ENV_ENV=development
    - SHOW=ture
2.depends_on: # 依赖,控制服务启动顺序,如果A服务启动需要依赖B服务,B服务需要先于A服务启动
depends_on:
  - B_svc
3.volumes: # 文件挂载
  # 使用绝对路径挂载数据卷,主机挂载到容器
  - /opt/data:/var/lib/mysql
  # 以 Compose 配置文件为base dir的相对路径作为数据卷挂载到容器
  - ./cache:/tmp/cache
  # 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)
  - ~/configs:/etc/configs/:ro
  # 已经存在的命名的数据卷,需要在docker-compose文件中定义
  - datavolume01:/var/lib/mysql
4.networks # 加入指定网络,需要在docker-compose文件中定义
networks:
  - product_bridge
5.restart # 重启策略
restart: no # 默认策略,在容器退出时不重启容器
restart: always # 在容器退出时总是重启容器
restart: on-failure # 在容器非正常退出时(退出状态非0),才会重启容器
on-failure: 3 ,# 在容器非正常退出时重启容器,最多重启3次
restart: unless-stopped # 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

2、示例:docker-compose管理微服务

示例:Dockerfile

FROM java:8
MAINTAINER liang_20210517
#ENV TZ=Asia/Shanghai
#ENV LANG=en_US.UTF-8
#ENV LANGUAGE=en_US:en
#ENV LC_ALL=en_US.UTF-8
ENV JAVA_OPTS="-Xms512m -Xmx512m"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ADD eureka-server.tar /
WORKDIR /eureka-server
EXPOSE 8761
#CMD ["java","-jar","eureka-server.jar","-Dfile.encoding=utf-8"]
ENTRYPOINT ["/eureka-server/entrypoint.sh"]

示例:docker-compose.yml

version: '3.7'
services:
    eureka-server:
        container_name: eureka-server
        image: ip:port/liang/eureka-server:GA01       
        environment:
          - JAVA_OPTS=-Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError
        ports:
            - '8761:8761'
        volumes:
            - /app/svc_conf/eureka-server/config:/eureka-server/config
            - /app/svc_log/eureka-server/logs:/eureka-server/logs
        restart: on-failure
        networks:
            - product_bridge
    base-service:
        container_name: base-service
        image: ip:port/liang/base-service:GA01
        environment: 
          - JAVA_OPTS=-Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError
        ports:
          - "10010:10010"
        volumes:
          - /app/svc_conf/base-service/config:/base-service/config
          - /app/svc_log/base-service/logs:/base-service/logs
        depends_on:
          - eureka-server
        restart: on-failure
        networks:
          - product_bridge
    base-user-center:
        container_name: base-user-center
        image: ip:port/liang/base-user-center:GA01
        environment: 
          - JAVA_OPTS=-Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError
        ports:
          - "10011:10011"
        volumes:
          - /app/svc_conf/base-user-center/config:/base-user-center/config
          - /app/svc_log/base-user-center/logs:/base-user-center/logs
        depends_on:
          - eureka-server
        restart: on-failure
        networks:
          - product_bridge
networks:
  product_bridge: