天天看点

docker-compose 基础和介绍

介绍:
    docker compose 是 docker 官方推出的一款单机容器编排工具,
        和 docker swarm, docker machine 并称为 docker 容器编排三剑客, 虽然其被 k8s 吊打,
        但是由于其简单易学在中小规模的集群中还是占有相当的一部分地位的

    使用Compose的步骤:
        1、定义您的应用程序环境,Dockerfile以便可以在任何地方进行复制
        2、定义构成应用程序的服务,docker-compose.yml 以便它们可以在隔离环境中一起运行
        3、运行 docker-compose up 和 Compose starts 运行整个应用程序

compose 的特性:
    1、单个主机上的多个环境隔离
    2、创建容器时保留卷数据
    3、仅重新创建已更改的容器
    4、变量和在环境之间移动合成

安装:
    docker compose 依赖所有的工作依赖于 docker, 在安装 compose 前请确保已在本地或远程主机中安装 docker

    二进制安装:
        curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
        chmod +x /usr/local/bin/docker-compose

    pip安装:
        pip install docker-compose

一个简单的例子:
    mkdir composetest && cd composetest             #创建一个专用目录,用于编写和保存 compose 文件
    cat app.py                                      #编写一个 flask web 应用作为测试
        import time
        import redis
        from flask import Flask

        app = Flask(__name__)
        cache = redis.Redis(host='redis', port=6379)        #连接 redis

        # 定义函数
        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()
            # 每访问一次返回的 count 加 1
            return 'Hello World! I have been seen {} times.\n'.format(count)

        if __name__ == "__main__":
            #运行 web 应用
            app.run(host="0.0.0.0", debug=True)

    cat Dockerfile                                          #编写docker file 文件以便 compose 可以根据 docker file 动态构建镜像
        FROM python:3.4-alpine
        ADD . /code
        WORKDIR /code
        RUN pip install flask redis
        CMD ["python", "app.py"]

    cat docker-compose.yml                                  #编写 compose 文件定义容器间的关系
        version: '3'
        services:
          web:
            build: .
            ports:
             - "5000:5000"
            volumes:
             - .:/code
          redis:
            image: "redis:alpine"

    docker-compose up                                       #启动 docker compose 定义的 docker 集群
    curl http://127.0.0.1:5000/                             #访问 Web APP

        # 示例来源
    # https://docs.docker.com/compose/gettingstarted/#step-5-edit-the-compose-file-to-add-a-bind-mount    

docker-compose 命令:
    介绍:
        1、docker-compose 命令的执行都必须指定或者在当前目录下存在 compose 文件, 且输出的内容都是这个 compose.yml 文件定义的集群内的信息
        2、每个集群中可以拥有多个 services, services 由 compose.yml 的 services 定义

    选项:
        -f      指定 compose 文件路径(可以指定多个)

    子命令:
        create             创建 compose 集群, 但不启动(已废弃, 使用 up --no-start 代替)
        down               停止或删除容器, 网络, 镜像和数据卷
        exec               运行容器中的命令或者连接容器
        help               查看帮助信息
        images             列出 compose 集群所用的镜像
        kill               kill 掉 compose 集群
        logs               获取 compose 集群日志
        pause              暂停 compose 集群
        ps                 列出正在运行的容器
        pull               拉取 compose.yml 文件中定义的所有 docker 镜像
        push               上传 compose.yml 文件中定义的所有 docker 镜像
        restart            重启 compose 集群
        rm                 删除一个停止的容器或者 compose 集群
        run                和 exec 相同
        scale              更改 compose 集群内指定的 services 的副本数量
        start              启动 compose 集群
        stop               停止 compose 集群
        top                显示 compose 集群中运行的进程及其状态
        unpause            恢复被暂停的 compose 集群
        up                 创建并启动一个 compose 集群
        version            输出 compose 版本
           

继续阅读