Docker --- DockerCompose 容器编排

0. 官方网址

https://docs.docker.com/compose/compose-file/compose-file-v3/

1. 概述

1.1 是什么

Docker-Compose 是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排

定义一个 YAML 格式的配置文件 docker-compose.yaml 写好多个容器之间的调用关系,然后只需要一个命令,就可以同时启动/关闭这些容器

1.2 能干什么

Docker 建议每一个容器中只运行一个服务,因为Docker容器本身占用资源极少,所以最好是将每个服务单独的分割开来,但是这样又会面临一个问题:如果需要同时部署多个服务,难道要每个服务单独写Dockerfile 然后再构建镜像,构建容器?这样会被类似,所以Docker官方提供了docker-compose多服务部署工具

例如要实现一个Web微服务项目,除了Web服务本身,往往还需要再加上后端的数据库mysql服务容器,redis服务器,注册中心eureka,甚至还包括负载均衡容器等等

Compose 允许用户通过一个单独的docker-compose.yaml模板文件(YAML格式) 来定义一组相关联的应用容器为一个项目(project)

可以很容易的用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建,Docker-compose解决了容器与容器之间如何管理编排的问题

1.3 解决的痛点

1. 容器启动先后顺序的固定,先 mysql,redis 再 Web服务

2. 多个 docker run 命令

**3. 容器间的启停或宕机,有可能导致IP地址对应的容器实例变化,映射出错,要么生产IP写死(不推荐),要么通过 服务(容器名)调用 **

2. 下载

2.1 版本对照

docker-compose 需要 对照docker版本

官方版本对应网址

2.2 开始安装

1. Linux服务器下载命令,由于是外网,很慢,基本使用下面的方法

sudo curl -SL https://github.com/docker/compose/releases/download/v2.18.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

2. github 下载好,然后上传Linux服务器

https://github.com/docker/compose

# 移动到 /usr/local/bin 并修改名字
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

3. 给文件可执行权限

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

4. 建立软连接

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

5. 查看是否安装成功

docker-compose --version

2.3 卸载

sudo rm /usr/local/bin/docker-compose

3. 使用步骤

3.1 构建镜像

编写Dockerfile定义各个应用并构建出对应的镜像文件

3.2 编写docker-compose.yaml

定义一个完整的业务单元,安排好整体应用中的各个容器服务

3.3 运行

启动并运行整个应用程序,完成一键部署上线

4. 编写 compose 文件

version: "3"   # 版本,使用3以后得版本

services:  # 固定写死,以下缩进的都是容器实例
  microService:   # 自定义的服务名
    image: zzyy_docker:1.6   # 使用的镜像
    container_name: ms01     # 创建并启动后的容器名,如果未指定,则会自动生成 当前目录_服务名_序号,如: mydocker_redis_1
    ports:    # 对外暴露的端口
      - "6601:6601" 
    volumes:  # 数据卷
      - /app/microService:/data
    networks: # 使用的网络,下面的 networks 有定义
      - order_net
    depends_on:  # 指定当前容器依赖于以下容器的启动,即先启动下面的容器
      - redis
      - mysql
      
  redis:
    image: redis:6.0.8
    ports:
      - "6379:6379"
    volumes:
      - /app/redis/redis.conf:/etc/redis/redis.conf
      - /app/redis/data:/data
    networks:
      - order_net
    command: redis-server /etc/redis/redis.conf   # 启动时要执行的命令
  
  mysql:
    image: mysql:5.7
    environment:  # 其他参数
      MYSQL_ROOT_PASSWORD: '123456'   # 主从复制:从节点连接主节点的密码
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
      MYSQL_DATABASE: 'db2024'
      MYSQL_USER: 'zzyy'
      MYSQL_PASSWORD: 'zzyy123'
    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:
      - order_net
    command: --default-authentication-plugin=mysql_native_password  # 解决外部无法访问的问题
    
networks:  # 创建网络,order_net
  order_net:

5. 常用命令

4.0 帮助文档

docker-compose -h

4.1 启动

docker-compose up

4.2 启动并后台运行

docker-compose up -d

4.3 停止并删除容器、网络、卷、镜像

docker-compose down

4.4 进入容器实例

docker-compose exec 容器名/容器ID /bin/bash

4.5 查看被 docker-compose 编排过的运行中的容器

docker-compose ps

4.6 查看被 docker-compose 编排过的容器进程

docker-compose top

4.7 查看容器输出日志

docker-compose logs 容器名/容器ID

4.8 检查配置

docker-compose config

4.9 检查配置,有问题就有输出

docker-compose config -q

4.10 重启服务

docker-compose restart

4.11 启动服务

docker-compose start

4.12 停止服务,不会删除

docker-compose stop

6. 部署案例

1. 部署 Django 项目

docker-compose 部署 Django项目

2. 部署 Java 项目

docker-compose 部署 Java 前后端项目

posted @ 2024-02-21 17:45  河图s  阅读(389)  评论(0)    收藏  举报