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 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: