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应用