常用¶
警告
docker compose is the most recent version and should be used instead of docker-compose. For more details and information check out: https://stackoverflow.com/questions/66514436/difference-between-docker-compose-and-docker-compose
Docker Compose 是Docker三剑客之一,是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。 Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。 docker-compose 是一个用来把 docker 自动化的东西。有了 docker-compose 你可以把所有繁复的 docker 操作全都一条命令,自动化的完成。
Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。 Compose 中有两个重要的概念:
1. 服务 (service): 一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
2. 项目 (project): 由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义
Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。
实例¶
web 应用:
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:
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]
docker-compose.yml:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
depends_on: // 指定依赖
- mongodb
redis:
image: "redis:alpine"
container_name: redis-name // 指定 container 名
working_dir: /opt/workedge // 指定工作目录
command: ls -lh // 指定执行命令
volumes: // 指定挂载目录
- .:/data/
ports: // 指定端口绑定
- "27017:27017"
restart: always // 容器挂掉时,是否重启
实例-指定网络(mongo_net):
version: '3'
services:
mongo:
image: mongo:4.0.27
networks:
mongo_net:
networks:
mongo_net:
driver: bridge
ipam:
config:
- subnet: 172.16.0.0/24
gateway: 172.16.0.254
实例-指定 volumes:
version: "3.9"
services:
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
运行 compose 项目:
$ docker-compose -f file.yml up
or
$ docker stack deploy -f file.yml <name>