系统学习Docker 践行DevOps理念 笔记(五)|Docker Compose多容器部署
Docker Compose多容器部署,是课程第六章的内容
1.根据前面所学部署一个wordpress
启动两个容器,一个mysql一个wordpress,wordpress依赖mysql服务。
docker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xphone123 -e MYSQL_DATABASE=wordpress mysql
这个是启动mysql容器的,-v指定了一个volume,-e指定了两个环境变量docker run -d --name workpress --link mysql -p 8080:80 -e WORDPRESS_DB_HOST=mysql:3306 wordpress
这个是启动wordpress容器的,先link到mysql容器,那么mysql:3306,就会自动解析到mysql容器的ip:3306,link之后,wordpress容器还会去读取mysql容器的环境变量作为己用
2.Docker Compose到底是什么
2.1Docker compose是什么
- Docker Compose是一个工具
- 这个工具可以通过一个yml文件定义多容器的docker应用
- 通过一条命令就可以根据yml文件的定义去创建或管理这多个容器
2.2Docker compose file
docker compose file,也就是这个配置文件,是有version的,推荐使用version=3的,因为version=2的,只能在单机环境下使用。虽然version=3默认也是在单机环境下使用的,但是version=3是可以在多个机器的环境下使用的
2.3Services
- 一个service代表一个container,这个container可以从dockerhub的image来创建,或者从本地的Dockerfile build出来的image来创建
- service的启动类似docker run,我们可以给其指定network和volume,所以可以给service指定network和volume的引用
2.4Networks
2.5Volumes
3.Docker Compose的安装和基本使用
3.1安装
- https://docs.docker.com/compose/install/#prerequisites ,下载
- chmod +x docker-composes
- 可能需要重新打开terminal
3.2相关命令
docker-compose up -d
,-d表示在后台,需要在docker-compose.yml所在的文件夹运行docker-compose ps
,docker-compose stop
,停止所有的servicesdocker-compose down
,停止所有的services,并且删除所有包括volumes和networks,但是要删除volumes需要加上-v参数docker-compose start
,启动docker-compose images
,打印出compose里面的container,以及container使用的imagedocker-compose exec service_name bash
,就可以进入我们定义的service里面,bash是运行的命令docker-compose logs
,可以查看日志
4.水平扩展和负载均衡
水平扩展
docker-compose up -d --scale web=3
,这样就会启动3个web这个service,需要注意的是,这个是可以动态运行的。比如我已经运行过docker-compose up -d了,那么就有一个web的service了,然后我运行–scale web=3这个命令,运行之后,web的service总数就变成3,而不是加3。也可以变小,比如现在有10个,然后–scale web=3,那么运行完之后就变成3个了
负载均衡
可以使用haproxy这个image来做负载均衡,大致原理如下:
5.部署一个复杂的投票应用
具体可以查看https://github.com/liguoqinjim/docker-labs
NOTICE
docker-compose build
,要是compose下的Dockerfile有修改的话,使用up命令是会直接启动的,不会再去build了,所以这时候要使用build命令先打包镜像- docker-compose是用于本地开发的一个工具,不是部署生产环境app的工具