• docker系列(9) - docker-compose


    9. compose编排

    9.1 介绍

    多服务部署工具,通过一个docker-compose.yml模板文件,定义一组关联的应用容器为一个项目。
    简单来说,就是当我们一个项目有多个服务需要启动时,通过docker-compose直接一键启动,就可以将所有相关的服务同时启动或者停止。

    9.2 安装

    参考官方安装文档:https://docs.docker.com/compose/install/linux/
    以下两种方式都可以:
    第一种:包管理器安装

    sudo yum install docker-compose-plugin
    
    • 1

    第二种:手工安装

    curl -SL https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    
    # 通常不需要执行这句
    #sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    
    #查看版本
    docker-compose --version
    
    #卸载方法
    sudo rm /usr/local/bin/docker-compose
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    9.3 compose常用命令

    说明命令
    docker-compose -h帮助
    docker-compose up启动所有docker-compose服务
    docker-compose up -d启动所有docker-compose服务并后台运行
    docker-compose down停止并删除容器,网络,卷,镜像
    docker-compose exec yml里面的服务id进入容器内部,停止并删除容器,网络,卷,镜像
    docker-compose ps展示当前运行的所有容器
    docker-compose top展示当前运行的容器进程
    docker-compose logs yml的服务id查看容器输出日志
    docker-compose config检查配置
    docker-compose config -q检查配置,有问题才输出
    docker-compose restart重启服务
    docker-compose start启动服务
    docker-compose stop停止服务

    9.4 实战Springboot部署

    使用docker-compose来启动springboot项目。
    使用到springboot、redis、mysql组件。

    9.4.1 准备组件配置文件

    9.4.1.1 redis的配置文件

    redis配置文件: /docker/redis/redis.conf

    # 开启 AOF 持久化
    appendonly yes
    
    # 指定 AOF 文件名
    appendfilename "appendonly.aof"
    
    # 指定 AOF 文件保存目录
    dir /data
    
    # 关闭 RDB 持久化
    save ""
    # 开启 RDB 持久化
    #save 900 1
    #save 300 10
    #save 60 10000
    
    # 禁用 Redis 的保护模式,允许外部连接
    protected-mode no
    
    # 允许其他服务访问
    bind 0.0.0.0
    
    # 指定 Redis 监听的端口
    port 6379
    
    # 指定日志生成的文件
    logfile redis.log
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    9.4.1.2 MySQL的配置文件

    mysql的配置文件:/docker/mysql/conf/my.cnf

    [client]
    
    default-character-set=utf8
    
    [mysql]
    
    default-character-set=utf8
    
    [mysqld]
    
    init_connect='SET collation_connection = utf8_unicode_ci'
    
    init_connect='SET NAMES utf8'
    
    character-set-server=utf8
    
    collation-server=utf8_unicode_ci
    
    skip-character-set-client-handshake
    
    skip-name-resolve
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    9.4.1.3 SpringBoot打包文件

    springboot: 使用7.6.3中打包的镜像springboot:1.0
    参考本系列连接跳转

    9.4.2 准备docker-compose.yml

    version: "3"
    
    services: 
      bootService:
        build: .
        image: springboot:1.0
        container_name: springboot
        environment:
          SPRING_PROFILES_ACTIVE: prod
        ports:
          - "9002:9002"
        volumes:
          - /app/microService:/data
        networks:
          - bridge
        depends_on:
          - redis
          - mysql
    
      redis:
        image: redis:6.2.13
        container_name: redis
        privileged: true
        ports:
          - 6379:6379
        environment:
          - TZ=Asia/Shanghai
          - TAKE_FILE_OWNERSHIP=true
        volumes:
          - /docker/redis/data:/data 
          - /docker/redis/redis.conf:/etc/redis/redis.conf
        networks:
          - bridge
        command: redis-server /etc/redis/redis.conf 
      
      mysql:
        image: mysql:5.7
        container_name: mysql
        privileged: true
        ports:
          - "3306:3306"
        networks:
          - bridge
        volumes:
          - /docker/mysql/log:/var/log/mysql 
          - /docker/mysql/data:/var/lib/mysql
          - /docker/mysql/conf/:/etc/mysql/conf.d
        environment:
          MYSQL_ROOT_PASSWORD: "root"
          MYSQL_ALLOW_EMPTY_PASSWORD: "no"
        command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
    
    networks:
      bridge: 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    9.4.3 启动服务

    # 先检查配置是否有异常
    docker-compose config -q
    
    # 启动所有容器
    #第一次测试可以不使用-d
    docker-compose up   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    在这里插入图片描述

    一切正常,转为后台运行

    # 先移除所有的
    docker-compose down
    
    # 再后台运行
    docker-compose -d up
    
    • 1
    • 2
    • 3
    • 4
    • 5

    9.4.4 测试验证

    Commands:
      build       Build or rebuild services
      config      Parse, resolve and render compose file in canonical format
      cp          Copy files/folders between a service container and the local filesystem
      create      Creates containers for a service.
      down        Stop and remove containers, networks
      events      Receive real time events from containers.
      exec        Execute a command in a running container.
      images      List images used by the created containers
      kill        Force stop service containers.
      logs        View output from containers
      ls          List running compose projects
      pause       Pause services
      port        Print the public port for a port binding.
      ps          List containers
      pull        Pull service images
      push        Push service images
      restart     Restart service containers
      rm          Removes stopped service containers
      run         Run a one-off command on a service.
      start       Start services
      stop        Stop services
      top         Display the running processes
      unpause     Unpause services
      up          Create and start containers
      version     Show the Docker Compose version information
      wait        Block until the first service container stops
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    例如重启服务:

    # 查看服务
    docker-compose ls
    
    #重启服务
    docker-compose restart bootService
    
    # 启动服务
    docker-compose start bootService
    
    # 停止服务
    docker-compose stop bootService
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    9.5 实战Elasticsearch+Kibana案例

    9.5.1 准备组件配置文件

    9.5.1.1 Elasticsearch配置

    配置文件:/docker/elasticsearch/config/elasticsearch.yml

    network.host: 0.0.0.0
    discovery.type: single-node
    
    • 1
    • 2
    9.5.1.2 Kibana配置

    配置文件: /docker/kibana/config/kibana.yml

    server.name: kibana
    server.host: "0.0.0.0"
    elasticsearch.hosts: [ "http://elasticsearch:9200" ]  #
    elasticsearch.username: "admin"
    elasticsearch.password: "admin"
    i18n.locale: "zh-CN"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    [“http://elasticsearch:9200”]这里elasticsearch是指容器的服务名,不设置这个,会导致kibana连接不上elasticsearch。

    9.5.2 docker-compose配置

    docker-compose.yml

    version: '3.3'
    services:
      elasticsearch:
        image: elasticsearch:7.17.7    # 使用的镜像名称
        container_name: elasticsearch	# 容器名称
        ports:	# 指定暴露的端口
          - 9200:9200
          - 9300:9300
        environment: 
          - ES_JAVA_OPTS= -Xms2g -Xmx2g # 指定 JVM 内存大小
        volumes:	# 指定挂载目录
          - /docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
          - /docker/elasticsearch/data:/usr/share/elasticsearch/data
          - /docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins
          - /docker/elasticsearch/logs:/usr/share/elasticsearch/logs
        networks:	
           - bridge
      kibana:
        image: kibana:7.17.7
        container_name: kibana
        ports:
         - 5601:5601
        depends_on:	# 服务依赖
          - elasticsearch
        volumes:
          - /docker/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
        networks:
          - bridge
    networks:
      bridge:
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    9.5.3 验证测试

    #启动:
    docker-compose up -d
    
    # 卸载
    docker-compose down
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    http://bidata:5601 访问

  • 相关阅读:
    设计模式之观察者模式
    go build解决missing go.sum.entry
    2022年格尔软件一面-未知
    计算机网络(第7版)第二章(应用层)知识点整理
    Fiddler工具使用
    C#实现五子棋小游戏:简单、有趣的编程项目
    【MySQL从入门到精通】【高级篇】(十九)索引的分类&创建索引的三种方式&删除索引的两种方式
    指令寻址方式(重点记忆)
    初识Java 11-2 函数式编程
    怎样实现内网穿透?
  • 原文地址:https://blog.csdn.net/wang6733284/article/details/133401001