1.06 docker Compose多容器部署

1.docker部署wordpress

  • 将dockerHub上的wordpress和mysql拉取到本地
    1.06 docker Compose多容器部署
    1.06 docker Compose多容器部署
  • 创建mysql的container,端口不需要映射,数据库是wordpress去访问
    1.06 docker Compose多容器部署
  • 创建wordpress的container,映射到本地的8080端口
    1.06 docker Compose多容器部署
  • 访问IP:8080,可以看到wordpress的欢迎页
    1.06 docker Compose多容器部署
  • 选中文,继续
    1.06 docker Compose多容器部署
  • 填写信息,点击安装
    1.06 docker Compose多容器部署
  • 点登录,通过两个image成功部署了wordpress
    1.06 docker Compose多容器部署
    1.06 docker Compose多容器部署

2.docker compose介绍

  • 多容器的APP很难部署和管理
  • docker compose就类似于批处理
    1.06 docker Compose多容器部署
  • docker compose是一个命令行工具,可以通过一个yml格式的文件定义多容器的docker应用
  • 通过一条命令就可以根据yml文件的定义去创建或者管理多个容器
  • docer compose版本2只能用于单机,版本3可以用于多机
  • docker-compose.yml是默认的名字,文件中有如下三种重要的概念
    1.06 docker Compose多容器部署
  • Services:一个service代表一个container,这个container可以由dokerHub的image创建,也可以由本地的Dockerfile build出来的image创建
  • Services的启动类似于docker run,可以给其指定network和volume,所以可以给service指定network和volume的引用

3.docker compose安装和使用

  • 下载docker compose
    1.06 docker Compose多容器部署
  • 赋权限
    1.06 docker Compose多容器部署
  • 查看版本,显示就安装好了
    1.06 docker Compose多容器部署
  • 在某个目录创建docker-compose.yml文件,这里在/home下创建,写入内容
    1.06 docker Compose多容器部署
version: '3'

services:

  wordpress:
    image: wordpress
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: admin
    networks:
      - my-bridge

  mysql:
    image: mysql:5.5
    environment:
      MYSQL_ROOT_PASSWORD: admin
      MYSQL_DATABASE: wordpress
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - my-bridge

volumes:
  mysql-data:

networks:
  my-bridge:
    driver: bridge
  • 启动docker-compose
    1.06 docker Compose多容器部署
  • 另一个窗口查看容器网络状态
    1.06 docker Compose多容器部署
    1.06 docker Compose多容器部署
  • 在另一个会话,查看当前docker进程
    1.06 docker Compose多容器部署
  • 查看docker-compose
    1.06 docker Compose多容器部署
  • 停止docker-compose
    1.06 docker Compose多容器部署
  • 启动docker-compose
    1.06 docker Compose多容器部署
  • 停止并删除docker-compose
    1.06 docker Compose多容器部署
  • 后台运行docker-compose
    1.06 docker Compose多容器部署
  • 交互运行docker-compose的方法
    1.06 docker Compose多容器部署
  • 找到之前写的flask-redis,进入目录
    1.06 docker Compose多容器部署
  • 创建docker-compose.yml,写入如下内容
version: "3"

services:

  redis:
    image: redis

  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:5000
    environment:
      REDIS_HOST: redis
  • 启动docker-compose
    1.06 docker Compose多容器部署
  • 启动后,浏览器访问IP:8080,可以看到如下
    1.06 docker Compose多容器部署
  • 停止并删除
    1.06 docker Compose多容器部署
    4.容器扩展和负载均衡
  • 启动并后台运行compose
    1.06 docker Compose多容器部署
  • 查看进程,此时有一个redis和一个web
    1.06 docker Compose多容器部署
  • 扩展web的应用部署
  • 但是运行完会报错,8080端口占用
    1.06 docker Compose多容器部署
    1.06 docker Compose多容器部署
  • 停止并删除compose
    1.06 docker Compose多容器部署
  • 删除docker-compose.yml中的如下两行
    1.06 docker Compose多容器部署
  • 启动并创建3个web服务
  • 运行中也可以扩展,实现了高效快速扩展
    1.06 docker Compose多容器部署
  • 查看进程
    1.06 docker Compose多容器部署
  • 假如有多个web,同时访问一个redis,还需要一个负载均衡器
    1.06 docker Compose多容器部署
  • 修改之前的app.py如下
    1.06 docker Compose多容器部署
  • 修改之前的Dockerfile如下
    1.06 docker Compose多容器部署
  • 修改之前的docker-compose.yml如下,最后加一段haproxy
    1.06 docker Compose多容器部署
  • 停止并删除compose
    1.06 docker Compose多容器部署
  • 运行compose
    1.06 docker Compose多容器部署
  • 尝试访问
    1.06 docker Compose多容器部署
  • 动态将web扩展成3个
    1.06 docker Compose多容器部署
  • 查看进程
    1.06 docker Compose多容器部署
  • 尝试访问
    1.06 docker Compose多容器部署
  • 当访问高峰过去,还可以减少集群节点
    1.06 docker Compose多容器部署
  • 查看进程
    1.06 docker Compose多容器部署
  • 停止并删除compose
    1.06 docker Compose多容器部署

5.复杂应用部署

  • 有两个对外的App,votingApp是对外投票用的,resultsApp会实时显示候选人得票情况
  • votingApp访问量大,先把投票结果写到redis缓存,java去取结果写到数据库
  • resultsApp从数据库获取最新的投票结果
    1.06 docker Compose多容器部署
  • 进入目录
    1.06 docker Compose多容器部署
  • 启动docker-compose
    1.06 docker Compose多容器部署
  • 浏览器访问5000和5001端口
    1.06 docker Compose多容器部署
    1.06 docker Compose多容器部署
  • 关闭并删除
    -1.06 docker Compose多容器部署