Compose负责实现对Docker容器集群的快速编排。定位是 定义和运行多个Docker容器的应用,前身是Fig。
Compose允许用户通过单一docker-compose.yml模板文件(YAML格式)来定义一组相关的应用容器为一个项目。通过子命令对项目中的一组容器进行生命周期管理。
Compose中两个重要概念:
服务(service):一个应用的容器,实际上可以包含若干运行相同镜像的容器实例。
项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。
Compose项目由Python编写,实现上调用了Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持DockerAPI,就可以利用compose进行编排管理。
安装与卸载
Compose支持Linux、macOS、Windows10三大平台。
Compose可以通过Python的包管理工具pip进行安装,也可以直接下载编译好的二进制文件使用,甚至可以直接在Docker容器中运行。
Docker Desktop for Mac/Windows自带docker-compose二进制文件,安装Docker之后可以直接使用。
书上是建议直接下载二进制文件(版本号注意调整成最新)。
curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
我在本地直接这样装的(ubuntu)apt install docker-compose
还有就是如果不是x86_64架构的Linux,比如ARM(树莓派),可以用pip安装(要Python)。
sudo pip install -U docker-compose
卸载的话:
二进制安装的话直接删除文件 sudo rm /usr/local/bin/docker-compose
pip安装直接sudo pip uninstall docker-compose
如果是像我那样apt安装的 apt remove docker-compose
一个简单例子,Python建立一个记录访问次数的web网站。
app.py文件(注意缩进问题)
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
countx = redis.incr('hits')
return 'Hello World!{}\n'.format(countx)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
Dockerfile文件
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]
docker-compose.yml文件
version: "2.0"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
关于上面那几行可怜的内容我有话说,第一,版本号2.0根据实际情况自己写,书上是3,我的是1.8.x的所以我写2.0,还有就是格式 格式 格式,不要用tab键盘,并且看好了都在什么地方需要有空格。也查好空格的个数。
经过各种坑之后,终于跑起来了。
docker-compose up
Compose命令说明
命令对象与格式
Compose大部分命令的对象既可以是项目本身,也可以指定项目中的服务或者容器。如果没有别的说明,命令对象将是项目,意味着所有的服务都会受到命令影响。
命令查询格式 docker-compose [COMMAND] --help
或者 docker-compose help [COMMAND]
docker-compose 命令格式:docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
-f,--file FILE 指定Compose模板文件,默认docker-compose.yml
-p,--project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名称。
--x-networking 使用docker的可拔插网络后端特性
--x-net