Docker Compose多容器部署,是课程第六章的内容

1.根据前面所学部署一个wordpress

启动两个容器,一个mysql一个wordpress,wordpress依赖mysql服务。

  1. 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指定了两个环境变量
  2. 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是可以在多个机器的环境下使用的

docker_compose

2.3Services

  • 一个service代表一个container,这个container可以从dockerhub的image来创建,或者从本地的Dockerfile build出来的image来创建
  • service的启动类似docker run,我们可以给其指定network和volume,所以可以给service指定network和volume的引用

service1

service2

2.4Networks

network

2.5Volumes

volume2

3.Docker Compose的安装和基本使用

3.1安装

  1. https://docs.docker.com/compose/install/#prerequisites ,下载
  2. chmod +x docker-composes
  3. 可能需要重新打开terminal

3.2相关命令

  1. docker-compose up -d,-d表示在后台,需要在docker-compose.yml所在的文件夹运行
  2. docker-compose ps
  3. docker-compose stop,停止所有的services
  4. docker-compose down,停止所有的services,并且删除所有包括volumes和networks,但是要删除volumes需要加上-v参数
  5. docker-compose start,启动
  6. docker-compose images,打印出compose里面的container,以及container使用的image
  7. docker-compose exec service_name bash,就可以进入我们定义的service里面,bash是运行的命令
  8. 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来做负载均衡,大致原理如下: haproxy

5.部署一个复杂的投票应用

具体可以查看https://github.com/liguoqinjim/docker-labs

NOTICE

  1. docker-compose build,要是compose下的Dockerfile有修改的话,使用up命令是会直接启动的,不会再去build了,所以这时候要使用build命令先打包镜像
  2. docker-compose是用于本地开发的一个工具,不是部署生产环境app的工具