node-index
node-index copied to clipboard
[docker] 入门 - 05 Docker Compose 多容器部署
Docker Compose 多容器部署
01、部署一个wordPress
启动一个mysql 数据容器: docker run -d --name=mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql:5.6
启动WordPress: docker run -d -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 8080:80 wordpress
然后直接去宿主机访问 ip:8080 就可以了
然后依次安装就OK了
02、Docker Compose 是什么
一个应用需要多个容器, 统一管理容器就显得很痛苦, Docker Compose 就是做这个事儿的 。
是一个基于Docker 的一个工具, 可以定义yml文件来定义多个容器。
默认文件名: docker-compose.yml
三个基本概念: Services 、Networks、 Volumes
Services
一个service代表一个container, 可以从dockerHub拉取, 也可以从本地image 创建。
service启动类似于 docker run , 可以指定network和volume, 也可以直接指定其应用。
例如:
services:
db:
image: postgres: 9.4
volumes:
- "db-data:/var/lib/postgresql/data"
networks:
- back-tier
上面这个实际上就是这样: docker run -d --network back-tier -v db-data:/var/lib/postgresql/data postgres:9.4
servies:
worker:
build: ./worker
links:
- db
- redis
networks:
- back-tier
把第一节的 部署wordpress 用docker-compose 的方式部署, 就是这样子的
version: '3'
services:
wordpress:
image: wordpress
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_PASSWORD: root
networks:
- my-bridge
mysql:
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
volumes:
- mysql-data:/var/lib/mysql
networks:
- my-bridge
volumes:
mysql-data:
networks:
my-bridge:
driver: bridge
03、docker-compose的安装和基本使用
安装详情可以参考这里: https://docs.docker.com/compose/install/
具体步骤:
1、 sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2、 sudo chmod +x /usr/local/bin/docker-compose
重要命令:
命令行 | 作用 |
---|---|
docker-compose up |
默认启动docker-compose.yml 文件, 可以看到日志 |
docker-compose -f docker-compose.yml up |
启动指定的yml 配置文件 |
docker-compose ps |
查看启动的容器 |
docker-compose stop |
停止容器 |
docker-compose start |
启动容器 |
docker-compose down |
stop and remove |
docker-compose up -d |
后台执行, 不会看到日志 |
docker-compose images |
可以列出创建容器所需要的image |
dcoker-compose exec [service name] bash |
进入指定容器的bash |
04、水平扩展和均衡负载
docker-compose up --scale web=3 -d
比如有一个这样的 docker-compose.yml 文件:
version: "3"
services:
redis:
image: redis
web:
build:
context: .
dockerfile: Dockerfile
environment:
REDIS_HOST: redis
lb:
image: dockercloud/haproxy
links:
- web
ports:
- 8080:80
volumes:
- /var/run/docker.sock:/var/run/docker.sock
web 服务都是链接到 redis 上面的,如果想启动多个web 服务器: docker-compose up --scale web=3 -d
这个时候, 所有的web 服务都是均衡的链接到 redis 上面的。
部署一个复杂应用
直接把 code/chapter6/labs/example-voting-app/ 目录下面的内容拷贝到虚拟机上 /home/vagrant/labs/
;
进入虚拟机之后 运行 docker-compose up
这个过程非常慢, 因为需要拉取基础镜像、生成源码 image;
如果有一些 docker-compose 里面定义的service 有些是需要dockerFile build 生成的, 就可以直接通过 docker-compose build
直接生成就可以了。
然后在执行docker-compose up
就可以了。 如果直接执行 docker-compose build
会直接先build 在 up.
说明 docker-compose 一般来说是用于本地开发的一个工具, 并不适合用于 生产环境