• docker(7)docker-compose容器集群编排


    前言

    实际工作中我们部署一个应用,一般不仅仅只有一个容器,可能会涉及到多个,比如用到数据库,中间件MQ,web前端和后端服务,等多个容器。
    我们如果一个个去启动应用,当项目非常多时,就很难记住了,所有需要一个配置文件,负责实现对Docker容器集群的快速编排。
     

    docker-compose

    简介

    Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
    Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。
    Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。
    Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

    安装

    pip3 install docker-compose
    

    安装成功后,输入docker-compose version查看版本
    如果出现-bash: docker-compose: command not found,可以按照以下步骤执行
     

    解决docker-compose 命令不存在、未找到命令错误

    1.安装扩展源

    sudo yum -y install epel-release
    

    2.安装python-pip模块

    sudo yum install python-pip
    

    3.通过以下命令进行安装

    wget https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-Linux-x86_64
    rename docker-compose-Linux-x86_64 docker-compose docker-compose-Linux-x86_64
    chmod +x /usr/local/bin/docker-compose
    

    4. docker-compose version命令进行查看

    [root@jkc ~]# docker-compose version
    docker-compose version 1.14.0-rc2, build 24dae73
    docker-py version: 2.3.0
    CPython version: 2.7.13
    OpenSSL version: OpenSSL 1.0.1t  3 May 2016
    

    案例演示

    docker-compose已经安装成功,接下来去https://hub.docker.com上找个项目部署练练手,项目地址:https://hub.docker.com/r/easymock/easymock

     

    docker-compose 文件内容

    version: '3'
    
    services:
      mongodb:
        image: mongo:3.4.1
        volumes:
          # ./data/db 数据库文件存放地址,根据需要修改为本地地址
          - './data/db:/data/db'
        networks:
          - easy-mock
        restart: always
    
      redis:
        image: redis:4.0.6
        command: redis-server --appendonly yes
        volumes:
          # ./data/redis redis 数据文件存放地址,根据需要修改为本地地址
          - './data/redis:/data'
        networks:
          - easy-mock
        restart: always
    
      web:
        image: easymock/easymock:1.6.0
        command: /bin/bash -c "npm start"
        ports:
          - 7300:7300
        volumes:
          # 日志地址,根据需要修改为本地地址
          - './logs:/home/easy-mock/easy-mock/logs'
          # 配置地址,请使用本地配置地址替换
          # - './production.json:/home/easy-mock/easy-mock/config/production.json'
        networks:
          - easy-mock
        restart: always
    
    networks:
      easy-mock:
    

    在本地新建一个文件夹/root/easymock,接着新建文件docker-compose.yml,把上面的内容写入到这个文件里,如下步骤

    [root@jkc ~]# mkdir /root/easymock
    [root@jkc ~]# cd /root/easymock/
    [root@jkc easymock]# touch docker-compose.yml
    [root@jkc easymock]# vi docker-compose.yml 
    [root@jkc easymock]# cat docker-compose.yml 
    version: '3'
    
    services:
      mongodb:
        image: mongo:3.4.1
        volumes:
          # ./data/db 数据库文件存放地址,根据需要修改为本地地址
          - './data/db:/data/db'
        networks:
          - easy-mock
        restart: always
    
      redis:
        image: redis:4.0.6
        command: redis-server --appendonly yes
        volumes:
          # ./data/redis redis 数据文件存放地址,根据需要修改为本地地址
          - './data/redis:/data'
        networks:
          - easy-mock
        restart: always
    
      web:
        image: easymock/easymock:1.6.0
        command: /bin/bash -c "npm start"
        ports:
          - 7300:7300
        volumes:
          # 日志地址,根据需要修改为本地地址
          - './logs:/home/easy-mock/easy-mock/logs'
          # 配置地址,请使用本地配置地址替换
          # - './production.json:/home/easy-mock/easy-mock/config/production.json'
        networks:
          - easy-mock
        restart: always
    
    networks:
      easy-mock:
    [root@jkc easymock]# 
    
    

    docker-compose up启动

    使用docker-compose up 指令启动服务,可以看到依次启动三个容器

    • Creating easymock_redis_1 ... done
    • Creating easymock_mongodb_1 ... done
    • Creating easymock_web_1 ... done
      如果看到以下报错,permission denied, open 'logs/2019-08-18-info.log',给log文件夹加个权限即可
    chmod 777 /root/easymock/logs/
    

    接着浏览器输入http://ip:7300/即可访问了

     

    docker-compose挂后台运行

    挂后台运行需加-d参数

    docker-compose up -d
    

    查看正在启动的docker容器使用docker ps

    [root@jkc easymock]# docker-compose up -d
    Creating network "easymock_easy-mock" with the default driver
    Creating easymock_mongodb_1 ... 
    Creating easymock_web_1 ... 
    Creating easymock_redis_1 ... 
    Creating easymock_redis_1
    Creating easymock_web_1
    Creating easymock_web_1 ... done
    [root@jkc easymock]# docker ps
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                    NAMES
    f88971162a08        redis:4.0.6               "docker-entrypoint.s…"   30 minutes ago      Up 30 minutes       6379/tcp                 easymock_redis_1
    73cba1bc4a1a        easymock/easymock:1.6.0   "/bin/bash -c 'npm s…"   30 minutes ago      Up 12 minutes       0.0.0.0:7300->7300/tcp   easymock_web_1
    7d317fdf9247        mongo:3.4.1               "/entrypoint.sh mong…"   30 minutes ago      Up 30 minutes       27017/tcp                easymock_mongodb_1
    [root@jkc easymock]# 
    

    docker-compose停止运行

    停掉服务使用docker-compose down

    [root@jkc easymock]# docker-compose down
    Stopping easymock_redis_1 ... done
    Stopping easymock_web_1 ... done
    Stopping easymock_mongodb_1 ... done
    Removing easymock_redis_1 ... done
    Removing easymock_web_1 ... done
    Removing easymock_mongodb_1 ... done
    Removing network easymock_easy-mock
    [root@jkc easymock]# 
    
    
  • 相关阅读:
    广度优先搜索(一)
    快速幂
    office 2013
    最著名的十大公式
    二分查找的上下界
    双关键字快速排序
    字符串操作
    分治算法练习(二)
    P3119 [USACO15JAN]草鉴定[SCC缩点+SPFA]
    P3225 [HNOI2012]矿场搭建[割点]
  • 原文地址:https://www.cnblogs.com/jiakecong/p/14312332.html
Copyright © 2020-2023  润新知