Datawhale-Docker学习笔记-0005-Docker Compose
- 1. 什么是Docker compose
- 2. Docker compose的安装
- 3. Compose文件
- 4. Compose指令
1. 什么是Docker compose
很多时候,当我们想完成一个任务时,一个容器往往是无法完成的。例如,我们想要做一个Web服务器时,不仅仅需要服务器的后端,还需要数据库容器和负载均衡容器等等。只有将上述的服务组织在一起,才是一个可用的应用。
而Docker compose就是完成这样的工作。Docker compose并不是通过脚本和多条docker命令组合在一起将应用组织起来的,而是通过一个声明式的配置文件描述整个应用,从而使用一条命令完成部署。
2. Docker compose的安装
在windows10上安装Docker for windows的时候会包含在DFW的安装包中。
可以通过如下指令查看Docker compose是否安装:
docker-compose --version
3. Compose文件
Docker Compose使用YAML文件来定义多服务的应用。我们可以把YAML理解为JSON的一个子集,因此也可以使用JSON文件。Docker Compose默认使用的文件名为dockers-compose.yml。当然,也可以通过-f参数指定具体的文件。
举例:
app.py
from flask import Flask
from redis import Redis
import os
import socket
app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)
@app.route('/')
def hello():
redis.incr('hits')
return 'Hello Container World! I have been seen %s times and my hostname is %s.\n' % (redis.get('hits'),socket.gethostname())
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
Dockerfile
FROM python:2.7
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]
docker-compose.yml
version: "3"
services:
redis:
image: redis
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "5000:5000"
environment:
REDIS_HOST: redis
当我们把上述的三个文件都准备好后,就可以通过以下指令运行了:
docker-compose up -d
下面我们来看下docker-compose.yml文件的内容。它主要分为4个部分,第一个部分是最主要的,也是必须的,就是版本version。它定义了Compose文件的格式。然后就是services,用于定义不同的服务。Docker会把每个服务部署在各自的容器中。然后就是Networks和volumes。分别用于创建新的网络和创建新的数据卷。
在web的服务中,我们看到build指令。其中context指定了上下文,dockerfile指定了创建文件。然后就是端口的映射和环境变量的设置。
4. Compose指令
在了解完Compose的文件后,我们可以看一下Compose的指令:
- docker-compose up 用于部署一个Compose的应用。
- docker-compose stop 会停止所有Compose相关的所有容器。
- docker-compose rm 会删除已经停止的Compose应用。同时会删除容器和网络,但不会删除卷和镜像。
- docker-compose restart 可以重启已经停止的应用
- docker-compose ps 列出应用中的各个容器
- docker-compose down 会停止并删除运行中的Compose应用