Docker compose开发与应用

版权声明:作者已开启版权声明,如转载请注明转载地址。 https://blog.csdn.net/qq_34829447/article/details/85644860

一.通过容器部署一个WordPress

1.wordpress组成

  • 前端软件
  • 数据库存储

2.操作流程

  • 创建mysql的containerdocker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql其中数据库用户名和密码都是root,且有一个数据库叫wordpress
  • 创建wordpress的containerdocker run -d -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 8080:80 wordpress设置wordpress的db主机端口,并通过-p将8080映射到80
  • 访问本地的127.0.0.1则会启动wordpress

3.思考

  • 像这样互相提供服务的container可以统一定义成一个组group,统一的创建,统一的删除,从而docker compose就诞生了

二.Docker compose简介——批处理

  • Docker compose是一个工具[安装docker时会携带安装]
  • 这个工具可以通过一个yml文件定义多容器的docker应用【默认docker-compose.yml】
  • 通过一条命令就可以根据yml文件的定义取创建或者管理多个容器

1.docker-compose.yml的三大概念

  • Services
    • 一个service代表一个container,这个container可以从dockerhub的image来创建,或者从本地的Dockerfile build出来的image来创建
    • Service的启动类似docker run,我们可以给其指定network和volume,所以可以给service指定network和volume的引用
  • Networks
    • 表示network网络连接
  • Volumes
    • 表示存储volume
  • 示例文件
    • 从dockerhub中获得image
      version: '3' #表示使用的是docker compose的第三个版本
      service:
          db:
              image:postgres:9.4 #从dockerhub中拉取的
              volumes:
                  - "db-data:/var/lib/postgresql/data"
              networks:
                  - back-tier #使用的是下方的networks定义的别名
      volumes:
          db-data:
      networks:
          front-tier:
              driver:bridge
          back-tier:
              driver:bridge
      
      相当于
      docker run -d --network back-tier -v db-data:/var/lib/postgresql/data postgres:9.4
      docker volume create db-data
      docker network create -d bridge back-tier
      
    • 从本地创建image
      services:
          worker:
              build: ./worker #指定本地的dockerfile地址
              links:
                  - db
                  - redis
              networks:
                  - back-tier
      ......
      

三.Docker compose使用(docker compose通常用于本地开发,查看部署结果)

  • docker-compose up启动docker compose的yml文件中的所有container,默认寻找docker-compose.yml,如果使用docker-compose -f docker-compose.yml up则可以设置要启动的yml文件【如果有的image之前没有,则可以先运行docker-compose build先build其中的image,这样之后运行up时就会快些,up命令会先build再up】
  • docker-compose ps查看当前启动的service
  • docker-compose stop停掉当前启动的service(但不remove,可以重新start)
  • docker-compose start启动yml中的service
  • docker-compose down停掉所有的service(没法再start,但没有删除image)
  • docker-compose images可以查看docker compose中的container以及他们的images
  • docker-compose exec service名称 bash在指定service中执行某命令
  • 利用docker-compose做水平扩展与负载均衡
    • 可以利用docker-compose --scale service名称=指定数量 -d up指定启动某服务多少个
    • 这样比如启动4个web服务并访问同一个redis时,服务前添加load balancer可以做到负载均衡
    • yml文件内容
      services:
          redis:
              image:redis
          web: #为python写的flask程序
              build:
                  context: . #表示在当前目录
                  dockerfile:Dockerfile
              environment:
                  REDIS_HOST:redis
          lb: #load balancer
              image:dockercloud/haproxy
              links:
                  - web
              ports:
                  - 8080:80
              volumes:
                  - /var/run/docker.sock:/var/run/docker.sock
      
    • docker-compose up --scale web=3 -d执行此命令会开启3个web服务和一个redis服务,访问127.0.0.1:8080时会经过load balancer负载均衡轮询访问其中的web服务
  • 实例部署
    • 功能需求:部署 1个投票服务器A,接redis服务器R,接Java服务器用作实时计算J,接数据存储的pg服务器PG,1个查看投票结果服务器B直接连pg服务器
    • A/B/J服务器项目都自行编写逻辑完成并添加dockerfile文件
    • 利用docker-compose设置启动所有服务器并相互连接,编写docker-compose.yml文件
    • 执行docker-compose up则会一步构建整个项目,直接访问端口查看即可
    • 故使用docker-compose启动项目快捷方便

猜你喜欢

转载自blog.csdn.net/qq_34829447/article/details/85644860