zoukankan      html  css  js  c++  java
  • DOCKER 06:docker compose

    本文主要谈谈关于单机 docker 在部署多个依赖的容器的时候如何把敲命令转换成配置文件形式!

    docker compose

    简单的了解一个概念,容器编排:

    指定容器以什么顺序,什么配置,这么运行,就是容器编排。而 docker compose 就是这也一个容器编排工具,适用于单机 docker!

    需要知道,docker compose 并未集成到 docker 中,需要手动下载:

    https://docs.docker.com/compose/install/

    找到 Linux 的安装方法安装好即可,其实就是一个命令脚本!

    # 下载
    curl -L "https://github.com/docker/compose/releases/download/1.25.4/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

    如果 github 下载慢可以使用国内的地址:

    http://get.daocloud.io/

    下载:

    curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

    关于 docker compose 最重要的就是 docker-compose.yml 文件,该文件定义了容器得运行方式。

    其主要关键字包含:services,networks,volumes

    这里以安装 wordpress 博客为例:

    version: "3"
    
    # 容器
    services:
      # 数据库容器
      wordpress-db:
        image: mysql:5.7
        environment:
          MYSQL_ROOT_PASSWORD: 123456
          MYSQL_DATABASE: wordpress
        volumes:
          - wordpress-db-data:/var/lib/mysql
        networks:
          - wordpress-bridge
      # web 服务容器
      wordpress-web:
        image: wordpress
        ports:
          - 8000:80
        environment:
          WORDPRESS_DB_HOST: wordpress-db
          WORDPRESS_DB_USER: root
          WORDPRESS_DB_PASSWORD: 123456
          WORDPRESS_DB_NAME: wordpress
        networks:
          - wordpress-bridge
    
    # 存储卷
    volumes:
      wordpress-db-data:
    
    # 网络
    networks:
      wordpress-bridge:
        driver: bridge

    说明:

    1. 在旧版本中,version 可能会有 2 这些情况,建议我们的都用 3,兼容性更强,注意需要引号。

    2. 注意关键字的单数和复数的使用,如果是复数,说明该值是列表,那么值前面就需要横线 -

    3. 配置中的环境变量都是来源于该镜像的官方文档。

    4. 为了项目分开,我们一般都会选择不通的项目创建不同的单独的网络环境用于区分。

    5. 顶级的 volumes 和 networks 其实都类似于声明的作用。

    当然还有一些其它的关键字,但是一般很少用,可以自己去了解,类似 depends_on 这种。

    启动:

    docker-compose -f docker-compose.yml up

    结果如图:

    使用 -f 指定配置文件,up 启动,但是是前台启动,意味着 ctrl + c 就能停止容器,适用于调试阶段。最后加个 -d 参数就可以后台运行。

    访问测试:

    除此之外,该命令的使用方法其实和 docker 类似,可以通过 help 查看用法:

    docker-compose -f docker-compose.yml --help

    结果如图:

    其中主要的包含:ps(查看定义的所有容器),stop(停止所有定义的容器),start,up,down(停止并删除),当然也可以使用 rm 删除。

    docker compose 负载均衡

    项目还是以之前的 Flask redis 为例:

    https://www.cnblogs.com/Dy1an/p/12362971.html

    配置 docker-compose.yml 如下:

    version: "3"
    
    # 容器
    services:
      redis-demo:
        image: redis
        networks:
          - flask-bridge
      
      flask-demo:
        build:
          context: .
          dockerfile: Dockerfile
        environment:
          REDIS_HOST: redis-demo
        networks:
          - flask-bridge
    
      loadblance-demo:
        image: dockercloud/haproxy
        links:
          - flask-demo
        ports:
          - 8000:80
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
        networks:
          - flask-bridge
    
    # 网络
    networks:
      flask-bridge:
        driver: bridge

    值得注意的是,我们这里 flask 并未直接指定镜像,而是使用 Dockerfile 构建的镜像。

    这里也使用了一个新的容器:haproxy

    此时运行容器:

    docker-compose -f docker-compose.yml up

    启动之后查看生成的镜像:

    可以发现名字是拼接形成的,一个是目录的名字,一个是配置中指定名称。

    同样的查看新增的网络:

    也是如此,都不是我们直接在文件中配置的,都是经过拼接而来。

    当然,这并不能满足标题提到的负载均衡,毕竟 flask 默认只运行了一个容器,此时我们停止容器再度重新运行:

    docker-compose -f docker-compose.yml up --scale flask-demo=3 -d

    通过 up 后面的 --scale 参数指定配置文件中的某个容器运行多少个实例。

    查看容器运行情况:

    此时访问测试:

    再访问:

    这也就会发现会在三个容器之间不通的切换,以此来实现了负载均衡。

  • 相关阅读:
    谈谈我对雾霾的看法
    2016年书单分享
    我的面试心得:面试官视角
    Cesium原理篇:GroundPrimitive
    Cesium原理篇:Batch
    Peter Hessler和他的中国三部曲(上)
    Cesium原理篇:Material
    全球PM25实时可视化
    Cesium原理篇:Property
    次郎的寿司梦
  • 原文地址:https://www.cnblogs.com/Dy1an/p/12371406.html
Copyright © 2011-2022 走看看