Compose的使用步骤
- Define your app’s environment with a
Dockerfile
so it can be reproduced anywhere.
- Define the services that make up your app in
docker-compose.yml
so they can be run together in an isolated environment.
- Run
docker compose up
and the Docker compose command starts and runs your entire app. You can alternatively run docker-compose up
using the docker-compose binary.
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
安装
# 1.下载
# 官网提供 (没有下载成功)
curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 国内地址
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 2.授权
chmod +x /usr/local/bin/docker-compose
# 3.查看版本
[root@iz8vbd1ko98b0el6771a37z bin]# docker-compose version
docker-compose version 1.25.5, build 8a1c60f6
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
体验
- 创建项目目录
[root@iz8vbd1ko98b0el6771a37z ~]# mkdir composetest
[root@iz8vbd1ko98b0el6771a37z ~]# cd composetest
- 创建应用文件app.py
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)
- 创建requirements.txt
flask
redis
- 编写Dockerfile,将app.py应用打包为精细
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
- 编写docker-compose.yml文件,定义整个服务,需要的环境。web、redis
version: "3.3"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
- 启动compose项目
[root@iz8vbd1ko98b0el6771a37z ~]# docker-compose up
流程
- 创建网络
Creating network "composetest_default" with the default driver
- 执行Docker-compose.yml
- 启动服务
Creating composetest_redis_1 ... done
Creating composetest_web_1 ... done
yaml规则
version: "2.4" # 版本
services: # 服务
服务1:web
images
build
network
......
服务2:redis
images
build
network
......
# 其他配置
volumes:
netowrks:
configs: