Docker三剑客之compose

时间:2023-03-09 19:22:14
Docker三剑客之compose

简介

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。其代码目前在 https://github.com/docker/compose 上开源。
Compose 定位是"定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)",其前身是开源项目 Fig。
Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose 中有两个重要的概念:

  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

可见,一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

Compose标准模板文件应该包含version、services、networks 三大部分;version用来定义所使用的语言版本,compose有三大版本,其中第一版已经处于被废弃状态了,主要使用由version 2 与version 3

其实我并不推荐使用compose,因为compose是根据python定制的一套docker接口语言,而且每个版本之间功能混乱,就连小版本之间的功能也会出现矛盾,比如:2.2版本中的build 与 2.4版本中的build使用方式就不一样,有些功能只能在swarm模式下面使用,所以我极度不喜欢这个功能,但是也是三剑客之一,不得不学习,如果我们在平时工作中对docker-compose使用不是很顺手也可以根据自己拿手的语言通过docker API自己定制;下面是关于docker-compose的一些常用命令及操作

安装与卸载

Compose 支持 Linux、macOS、Windows 10 三大平台。
Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。
前两种方式是传统方式,适合本地环境下安装使用;最后一种方式则不破坏系统环境,更适合云计算场景。
Docker for Mac 、Docker for Windows 自带 docker-compose 二进制文件,安装 Docker 之后可以直接使用。

Linux下安装Compose

二进制安装
curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
PIP安装
注: x86_64 架构的 Linux 建议按照上边的方法下载二进制包进行安装,如果您计算机的架构是 ARM (例如,树莓派),再使用 pip 安装。

pip install -U docker-compose

可以看到类似如下输出,说明安装成功
Collecting docker-compose
Downloading docker-compose-1.17..tar.gz (149kB): 149kB downloaded
...
Successfully installed docker-compose cached-property requests texttable websocket-client docker-py dockerpty six enum34 backports.ssl-match-hostname ipaddress
二进制卸载

如果是二进制包方式安装的,删除二进制文件即可。

rm /usr/local/bin/docker-compose
PIP卸载
pip uninstall docker-compose

web案例

新建文件夹,在该目录中编写 app.py 文件

from flask import Flask
from redis import Redis app = Flask(__name__)
redis = Redis(host='redis', port=) @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 文件,内容为

FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]

编写 docker-compose.yml 文件

version: ''
services: web:
build: .
ports:
- "5000:5000" redis:
image: "redis:alpine"

运行 compose 项目

docker-compose up

此时访问本地 5000 端口,每次刷新页面,计数就会加 1。

官网参考地址:https://docs.docker.com/compose/compose-file/

命令参考地址:https://blog.51cto.com/9291927/2310444

文件参考地址:https://yeasy.gitbooks.io/docker_practice/content/compose/compose_file.html