Docker-compose简明教程

简介

docker-compose 是一个定义和运行多个 docker 容器实例的工具。它使用一个 docker-compose.yml(yaml格式)来定义一组关联的容器应用为一个项目(porject)。通过一个简单的命令,可以创建启动yml中配置的多个容器。它可以在所有的环境中使用,包括生产,开发,测试,持续集成环境。

docker-compose中有两个重要概念:

  • 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

  • 项目(project):由一组关联的应用容器组成的一个完整业务单元。

可以看出,一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理。

docker-compose有很多命令,用于容器应用的整个生命周期:

  • 启动,停止,重建服务。
  • 查看运行中服务的状态。
  • 流式输出运行中服务的日志。
  • 对服务运行的命令。

安装

一般在 Linux 中直接下载二进制文件即可:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose

$ docker-compose --version
docker-compose version 1.22.0, build f46880fe

开始使用docker-compose

#创建文件夹 dockertest ,在该目录中编写app.py,内容为

#!/usr/bin/env python
# -*- coding: utf-8 -*-

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 文件,内容为

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"
  redis:
    image: "redis:alpine"

docker-compose.yml 文件中定义两个服务:web 和redis。

web:使用了Dockerfile中构建的镜像,把容器中的5000端口映射到宿主机的8300端口。

redis:使用了从 Docker Hub registry 中拉取的官方 redis 镜像。

使用说明

docker-compose的基本使用格式如下:

Usage:
  docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  docker-compose --help
  docker-compose command --help

选项说明

  • -f FILE 指定使用的 compose 模板文件(显示指定文件路径),默认为当前目录下的 docker-compose.yml ,如果没有则报错。
  • -p NAME 指定项目名称,默认将使用所在目录名称作为项目名。
  • --verbose 显示详细输出。
  • --log-level LEVEL 设置日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL)。
  • -v, --version 打印版本并退出。

命令说明

build

构建或重建项目中的服务容器。

Usage: build [options] [--build-arg key=val...] [SERVICE...]

服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。
可以随时在项目目录下运行 docker-compose build 来重新构建服务。

选项包括:

  • --force-rm 删除构建过程中的临时容器。
  • --no-cache 构建镜像过程中不使用 cache(这将加长构建过程)。
  • --pull 始终尝试通过 pull 来获取更新版本的镜像。
  • -m, --memory MEM 为创建的容器设置内存限制