云原生 | Docker - [Compose]

§1 容器编排

Compose 是一个用于定义以及运行多个 Docker 容器的工具。
通过 YAML 文件配置应用服务,随后通过单个命令即可从这个配置创建并开启所有服务
容器编排可以应用于所有环境

  • 开发
  • 测试
  • 模拟
  • 生产
  • CI 工作流

作用

  • 明确启动顺序
  • 批量管理服务声明周期
  • 灵活管理服务间关系

§2 指令

查看帮助
docker-compose -h

启动所有 compose 服务
docker-compose up

后台启动所有 compose 服务
docker-compose up -d

停止并删除容器、网络、卷、镜像
docker-compose down

进入容器内部
docker-compose exec dockerf-compose.yml中服务名 /bin/bash

查看经过 docker-compose 的所有运行中容器
docker-compose ps

查看经过 docker-compose 的所有容器进程
docker-compose top

开启经过 docker-compose 的所有服务
docker-compose start

重启经过 docker-compose 的所有服务
docker-compose restart

停止经过 docker-compose 的所有服务
docker-compose stop

查看容器输出日志
docker-compose logs dockerf-compose.yml中服务名

查看配置
docker-compose config

查看配置,只输出有问题的部分
docker-compose config -q
无输出说明 dockerf-compose.yml 中没有语法问题

§3 使用

§3.1 Docker Compose 的获取

安装
官网安装指南

下面示例使用手动安装

  • 查看 docker 安装位置
    whereis docker

  • 下面示例将 docker compose 与 docker 安装在同路径
    curl -SL https://github.com/docker/compose/releases/download/v2.7.0/docker-compose-linux-x86_64 -o /usr/bin/docker-compose

  • 增加权限
    chmod +x /usr/bin/docker-compose

  • 验证安装
    docker compose version

在这里插入图片描述

基本流程

  • 通过 Dockerfile 文件 定义应用环境
    以便通过复制 Dockerfile 的方式随处复制这个定义过程
  • dockerf-compose.yml 中定义组成应用的各个服务
    这可以使这些服务可以在独立的环境中一起运行
  • 通过 docker compose up 指令开始并运行整个应用
    此指令可以通过 Docker compose 命令行 和 Compose standalone(二进制版 `docker-compose) 运行


dockerf-compose.yml 版本对照
dockerf-compose.yml 拥有多种版本,需要考虑 Docker Engine 版本
点击查看 Docker 官网版本对照

docker-compose.yml 示例

version: "3.9"  # optional since v1.27.0
services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    depends_on:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}
§3.2 Docker Compose 使用示例

编写 docker-compose.yml 文件

  • version
    用于标记当前 docker-compose.yml 文件的版本
    参考 版本对照
  • services
    其下包含多个 service
    每一个 service 都相当于一条 docker run 指令
    service 可选的指定 容器名(container_name)
    • 指定时,经过 docker-compose up 启动的容器 就叫那个名字
    • 不指定时,容器名是 当前 service 的服务名增加前后缀
  • networks
    其下包含多个 network
    每一个 network都相当于一条 docker network create 指令
version: "3"

# 整个 services 段,相当于一条一条的 docker run 指令的集合
services:
  seataSoService:
    image: seata-so-service
    container_name: so1
    ports:
      - "8001:8000"
    volumes:
      - /app/seataSoService:/data
    networks:
      - net_tomcat_01
    depends_on:
      - redis
      - mysql
 
  redis_01:
    image: redis:6.0.8
    ports:
      - "6379:6379"
    volumes:
      - /app/reids:redis.conf:/etc/redis/redis.conf
      - /app/redis/data:/data
    networks:
      - net_tomcat_01
    command:
      - redis-server /etc/redis/redis.conf
  
  mysql_01:
    image: mysql:5.7
    environment:
      mysql_root_password: '123456'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
      MYSQL_DATABASE: 'learning'
      MYSQL_USER: 'user1'
      MYSQL_PASSWORD: '111111'
    ports:
      - "3306:3306"
    volumes:
      - /app/mysql/db:/var/lib/mysql
      - /app/mysql/conf/my.cnf:/etc/my.cnf
      - app/mysql/init:/docker-[entrypoint-initdb.d
    networks:
      - net_tomcat_01
	# 解决外部无法访问问题
    command:
      - --default-authentication-plugin=mysql_native_password

networks:
  net_tomcat_01:

调整微服务配置
基于上面的 docker-compose.yml 文件,各个微服务配置需要做出调整

微服务 对 其他微服务或中间件配置中,基于 IP服务名 的部分,改为基于 docker-compose.yml 中配置的服务名(此服务名 约等于容器名),这是因为

  • 微服务之间的依赖,现在转变为对 包含不同微服务的容器 之间的依赖了
  • 微服务对中间件等基础设施的依赖,现在转变为 对 包含中间件或基础设施的容器 依赖了

以 seataSoService 服务下 mysql 配置为例

spring:
  application:
    name: seata-so-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource            
    driver-class-name: org.gjt.mm.mysql.Driver              # 注意
    url: jdbc:mysql://mysql_01:3306/SO?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    username: root
    password: root

服务打包
整个 docker-compose 涉及的所有服务的bao
以及其他组件传输至服务器
上例中,包含

  • seataSoService
  • redis:6.0.8
  • mysql:5.7

启动
docker-compose up -d

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值