compose是docker容器进行编排的工具,通过定义一个配置文件(默认docker-compose.yml),管理多个容器的运行。
安装
因为装了Python3环境,使用pip3命令安装,然后创建软连接即可;
[root@Python ~]# pip3 -V
pip 10.0.1 from /usr/local/python3/lib/python3.7/site-packages/pip (python 3.7)
[root@Python ~]# pip3 install docker-compose
[root@Python ~]# ln -s /usr/local/python3/bin/docker-compose /usr/local/bin/docker-compose
[root@Python ~]# docker-compose version
docker-compose version 1.23.2, build 1110ad0
docker-py version: 3.7.1
CPython version: 3.7.0
OpenSSL version: OpenSSL 1.0.2k-fips 26 Jan 2017
由于 docker-compose 托管在 github 上,也可以到 github 上下载,然后给予执行权限即可:
[root@test-101 ~]# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 617 0 617 0 0 100 0 --:--:-- 0:00:06 --:--:-- 128
100 15.4M 100 15.4M 0 0 39911 0 0:06:45 0:06:45 --:--:-- 37669
[root@test-101 ~]# chmod +x /usr/local/bin/docker-compose
[root@test-101 ~]# docker-compose --version
docker-compose version 1.24.1, build 4667896b
上面下载的是 1.24.1 版本的 docker-compose,访问 releases 页面可以查看最新版本的 docker-compose。
简单使用
举个栗子
用 Python 来建立一个能够记录页面访问次数的 web 网站:
[root@python syztoo]# ls
app.py docker-compose.yml Dockerfile
app.py文件内容:
[root@python syztoo]# cat app.py
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
count = redis.incr('hits')
return 'Hello World! 该页面已被访问 {} 次。\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
Dockerfile文件内容:
[root@python syztoo]# cat Dockerfile
FROM python:3.7-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]
docker-compose.yml文件内容:
[root@python syztoo]# cat docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
启动容器:
[root@python syztoo]# docker-compose up -d
登陆浏览器验证,也可使用curl进行本地验证
[root@python syztoo]# curl '127.0.0.1:5000'
Hello World! 该页面已被访问 1 次。
[root@python syztoo]# curl '127.0.0.1:5000'
Hello World! 该页面已被访问 2 次。
[root@python syztoo]# curl '127.0.0.1:5000'
Hello World! 该页面已被访问 3 次。
命令格式
docker-compose [options] [COMMAND] [ARGS...]
options:
-f filename 指定使用的模板文件,默认docker-compose.yml
-p projectname 指定项目名字,默认以当前目录作为项目名字
COMMAND:
up 启动项目
up -d 启动并后台运行
down 停止项目并移除网络
config 验证compose文件格式是否正确
exec 进入指定的容器
images 列出项目中所包含的容器
kill 强制停掉某容器
logs 查看容器日志
port 查看某容器映射的端口
pause 暂停某容器运行
unpause 恢复暂停状态的容器
start 运行停止状态的容器
stop 停止运行状态的容器
docker-compose.yml
默认的模板文件名称为 docker-compose.yml ,格式为 YAML 格式。
举栗子说明
version: "3"
services:
webapp:
image: nginx
ports:
- "80:80"
volumes:
- "/home/nginx/html:/usr/share/nginx/html"
- "/home/nginx/conf:/etc/nginx"
image,指定镜像;
ports,指定映射端口;
volumes,数据卷所挂载路径设置;
version: '3'
services:
web:
build: ./syztoo
version: '3'
services:
web:
build:
context:/home/syztoo
dockerfile:Dockerfile-web
build,直接指定Dockerfile文件所在目录,也可以配合context、dockerfile指令,指定Dockerfile文件位置。每个服务中必须包含基础镜像,可通过image指令指定,也可通过build结合Dockerfile构建。
version: "3"
services:
mysql:
image:mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
secrets:
- db_root_password
- my_other_secret
networks:
- some-network
secrets:
my_secret:
file: ./my_secret.txt
my_other_secret:
external: true
networks:
some-network:
networks,指定网络;
environment,直接指定环境变量;也可通过env_file指向环境变量文件指定;
secret,存储敏感数据,比如数据库密码;
其他指定
expose,暴露服务端口,但不映射到主机,只被连接的服务访问;
labels,为容器添加元数据信息;
depends_on,指定依赖关系,关系容器的启动顺序;
deploy,configs 配合 docker swarm 使用。