Docker - Compose 服务编排
Docker - Compose简介
Compose 是什么?
Compose是定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用单个命令,您可以创建并启动配置中的所有服务。
Compose适用于所有环境:生产,分期,开发,测试以及CI工作流程。
Compose 历史版本?
Docker Compose目前为止迭代了三个版本,官网建议使用最新的3版本,Docker从1.13.0+
开始支持3版本。
本机的Docker版本是:
[vagrant@docker-host ~]$ docker -v
Docker version 18.05.0-ce, build f150324
参考:https://docs.docker.com/compose/compose-file/#reference-and-guidelines
Docker - Compose.yml
一个简单的dokcer-compose.yml文件:
version: '3'
services:
web:
build: ../../..
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: { }
networks:
my-bridge:
driver: bridge
以上文件可以看出,一个docker-compose.yml
文件主要包含了四个部分:version
、services
、volumes
、networks
。
Version
用于指定docker-compose.yml文件的版本。
Services
一个Service代表一个Container,这个Container可以从dockerhub的image来创建,或者从本地的Dockerfile build出来的image来创建。
service的启动类类似docker run,我们可以给Service指定network和volume,所以可以给service指定network和volume的引用。
Volumes
可以再Service中给镜像定义volumes,然后再在volumes中引用Service中定义的volumes的名称。
Networks
指定docker-compose使用的网络。
Docker - Compose安装
如果是直接在电脑上安装了Docker for Mac
或Docker for Win
,那么Docker Toolbox中已经包含了Docker Compose,无需单独安装。
Centos7安装Docker-Compose
1、下载最新版本的Docker Compose
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2、 给予Docker Compose执行权限
sudo chmod +x /usr/local/bin/docker-compose
3、测试安装
docker-compose -v
docker-compose version 1.21.2, build a133471
使用 PIP 安装 Docker-Compose
安装pip
[root@dk vagrant]# sudo yum -y install epel-release
[root@dk vagrant]# sudo yum -y install python-pip
[root@dk vagrant]# pip install --upgrade pip
[root@dk vagrant]# pip -V
pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
安装Docker-Compose
[root@dk vagrant]# pip install docker-compose --ignore-installed requests
[root@dk vagrant]# docker-compose -v
docker-compose version 1.23.2, build 1110ad0
Docker - Compose使用
使用Compose基本上是一个三步过程:
- 用一个定义你的应用程序的环境,
Dockerfile
这样它就可以在任何地方再现。 - 定义组成您的应用程序的服务,
docker-compose.yml
以便它们可以在隔离的环境中一起运行。 - 运行
docker-compose up
和撰写启动并运行您的整个应用程序。
Docker - Compose命令
命令 | 说明 |
---|---|
build | 构建或重建服务 |
bundle | 从Compose文件中生成一个Docker bundle |
config | 验证并查看Compose文件 |
create | 创建服务 |
down | 停止并移除容器,网络,图像和卷 |
events | 接收来自容器的实时事件 |
exec | 在正在运行的容器中执行命令 |
help | 获取有关命令的帮助 |
images | 列出镜像 |
kill | 杀死运行的容器 |
logs | 查看容器的输出 |
pause | 暂停服务 |
port | 打印端口绑定的公共端口 |
ps | 查看容器列表 |
pull | 拉取服务镜像 |
push | 推送服务镜像 |
restart | 重启服务 |
rm | 移除停止的容器 |
run | 运行一次性命令 |
scale | 设置服务的容器数量 |
start | 启动服务 |
stop | 停止服务 |
top | 显示正在运行的进程 |
unpause | 取消暂停服务 |
unpause | 创建并启动容器 |
version | 显示Docker-Compose版本信息 |
Docker - Compose实践
使用Compse构建多容器WordPress
1、创建一个目录:
mkdir wp
2、进入目录撰写docker-compose.yml
:
cd wp && touch docker-compose.yml
docker-compose.yml:
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
3、使用docker-compose
构建容器:
docker-compose up -d
4、查看运行状态:
[vagrant@docker-host ~]$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------
vagrant_db_1 docker-entrypoint.sh mysqld Up 3306/tcp
vagrant_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8000->80/tcp
使用Compose结果Dockerfile构建一个web应用:
1、创建一个工程目录:
mkdir dk_web && cd dk_web
2、创建web工程文件:
app.py:
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
requirements.txt:
flask
redis
3、撰写Dockerfile:
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
4、撰写docker-compose.yml:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
5、使用Docker Compose来构建应用程序:
docker-compose up
6、查看容器运行状态:
[vagrant@docker-host dk_web]$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------
dk_web_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
dk_web_web_1 python app.py Up 0.0.0.0:5000->5000/tcp
7、访问: