前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker Compose多容器部署(五)

Docker Compose多容器部署(五)

作者头像
蒋老湿
修改2019-12-09 14:34:32
2.3K0
修改2019-12-09 14:34:32
举报
文章被收录于专栏:技术栈技术栈

为什么要有Docker Compose多容器部署

为了多快好省,总结起来就是为了偷懒

在使用 docker Compose之前,我们是怎么部署多个容器的APP应用的呢???

  1. 要从Dockerfile build image 或者 Dockerhub 拉取image
  2. 要创建多个container
  3. 要管理这些container(启动停止删除)

多容器部署的APP太恶心了(每次都这么多步骤)

docker Compose到底是什么

  • Docker Compose 是一个命令行工具
  • 这个工具可以通过一个yml文件定义多个容器的docker应用
  • 通过一条命令就可以根据yml文件的定义去创建或者管理这些容器

docker yml 文件有一个默认在名字叫docker-compose.yml,其中有三个重要的概念:

  • Services
  • Networks
  • Volumes

Services

  • 一个Services代表一个container,这个container可以从dockerhub registory的image来创建,或者从本地的Dockerfile build 出来的image来创建
  • Service的启动类似docker run,我们可以给其指定network和volume,所以可以给service指定network和Volume的引用
代码语言:txt
复制
#docker-compose.yml文件内容示例
services:
    db:     #APP NAME
        images:postgres:9.4     #使用的镜像
        volumes:    #数据卷映射名为db-data
            - "db-data:/var/lib/postgresql/data"
        networks:   #docker network 使用back-tier
            - back-tier

以上内容等同于:docker run -d --network back-tier -v db-data:/var/lib/postgresql/data postgres:9.4

Volumes

Networks

接下来看一个实际的应用例子

代码语言:txt
复制
version: '3'    #docke compose版本
services:
  wordpress:    #App name
    image: wordpress    #使用镜像
    ports:      #端口映射
      - 8080:80
    environment:    #容器环境变量配置
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: root
    networks:   # docker 网卡
      - my-bridge
  mysql:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
    volumes:    #数据卷名mysql-data,对应备份容器中/var/lib/mysql所有内容
      - mysql-data:/var/lib/mysql
    networks:
      - my-bridge
volumes:    #声明
  mysql-data:
networks:   #声明
  my-bridge:
    driver: bridge  # 使用drive为bridge

Docker Compose 的安装

具体安装过程可以参考:docker docs-安装Docker Compose

Docker 水平扩展和负载均衡

代码语言:txt
复制
docker-compose up -d    #以后台方式启动运行
docker-compose ps   # 查看启动的服务App
docker-compose up --help
docker-compose down  #关闭删除
docker-compose build    #

以下面这个docker-compose.yml文件为例:

代码语言:txt
复制
version: "3"
services:
  redis:
    image: redis
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:5000
    environment:
      REDIS_HOST: redis

scale 可以把一个服务扩展成多个,但是如果以上面这个文件启动的话docker-compose up --scale web=3 -d,会发现报错:

原因是因为ports: - 8080:5000重复绑定了,删除即可

我们来看一个负载均衡的例子

代码语言:txt
复制
#Dockerfile
FROM python:2.7
LABEL maintaner="Peng Xiao xiaoquwl@gmail.com"
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 80
CMD [ "python", "app.py" ]
代码语言:txt
复制
#docker-compose.yml
version: "3"
services:
  redis:
    image: redis
  web:
    build:      #指定的镜像需要build
      context: .    #build的路径
      dockerfile: Dockerfile    #要build的dockerfile文件名
    environment:
      REDIS_HOST: redis
  lb:
    image: dockercloud/haproxy  #负载均衡的镜像
    links:      #连接到上面的service名为web的App
      - web
    ports:
      - 8080:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 

结构调用图

实践-部署一个复杂的Application

Voting App 用于投票,redids Queue用来保存投票结果,Java worker实时获取redis 中的数据插入PG database数据库中,Result app 实时从PG database中获取数据展示到页面。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年08月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • docker Compose到底是什么
    • Services
      • Volumes
        • Networks
        • Docker Compose 的安装
        • Docker 水平扩展和负载均衡
        • 实践-部署一个复杂的Application
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档