版权声明:作者已开启版权声明,如转载请注明转载地址。 https://blog.csdn.net/qq_34829447/article/details/85644860
一.通过容器部署一个WordPress
1.wordpress组成
- 前端软件
- 数据库存储
2.操作流程
- 创建mysql的container
docker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql
其中数据库用户名和密码都是root,且有一个数据库叫wordpress - 创建wordpress的container
docker 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 ......
- 从dockerhub中获得image
三.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
查看当前启动的servicedocker-compose stop
停掉当前启动的service(但不remove,可以重新start)docker-compose start
启动yml中的servicedocker-compose down
停掉所有的service(没法再start,但没有删除image)docker-compose images
可以查看docker compose中的container以及他们的imagesdocker-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启动项目快捷方便