使用Docker Compose
前言
Docker compose是用来定义和运行多个Docker容器的应用。当你使用compose的时候,只需要创建一个YAML文件来配置你的应用服务,然后只要使用一行命令你就可以启动配置中的所有应用。
方法
使用Compose基本按下面3步进行:
- 为你的应用创建一个
Dockerfile
来定义它的环境。 - 将组成你的应用的services写到
docker-compose.yml
中,所以它们可以在一个独立的环境中一起运行。 - 执行
docker-compose
然后Compose会帮你运行起整个应用。
一个docker-compose.yml
的例子如下:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
Get Started
首先需要新建一个文件夹,将它起名为你的项目名字,比如composetest
。
创建一个app.py
文件,执行这个文件将会启动application。作为例子,可以先写上下面的内容。
import time
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)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
然后你需要写一个Dockerfile
来创建Docker Image。这个Image包含着appliation需要的环境和依赖项。在这里,可以这样写:
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
还差一步了!新建一个文件叫docker-compose.yml
,粘贴上以下内容:
version: '3'
services:
web:
build: .
ports:
- "4000:5000"
redis:
image: "redis:alpine"
Compose可以帮助我们开启多个container,这里的docker-compose.yml
的含义就是定义了两个services:web
和redis
。
其中,web
service 使用的是Dockerfile
创建的Image,redis
servie 使用的是从Docker Hub上拉取的公共的Image。
注意这里web
service将container中的5000端口映射到了host machine的4000端口。
最后,使用docker-compose up
来运行这个application。你可以从浏览器中访问http://0.0.0.0:5000/
来查看这个简单的application的运行效果。
更多docker compose 命令
docker compose logs
# 暂停运行,保持container状态
docker compose pause
# 继续运行
docker compose unpause
# 停止container运行,但不会删除container
docker compose stop
# 删除container,network,volume
docker compose down
# 删除image
docker image rm nginx:alpine
# 删除不运行的image
docker image prune -a