docker-compose 基礎和介紹

介紹:
    docker compose 是 docker 官方推出的一款單機容器編排工具,
        和 docker swarm, docker machine 並稱爲 docker 容器編排三劍客, 雖然其被 k8s 吊打,
        可是因爲其簡單易學在中小規模的集羣中仍是佔有至關的一部分地位的

    使用Compose的步驟:
        一、定義您的應用程序環境,Dockerfile以即可以在任何地方進行復制
        二、定義構成應用程序的服務,docker-compose.yml 以便它們能夠在隔離環境中一塊兒運行
        三、運行 docker-compose up 和 Compose starts 運行整個應用程序

compose 的特性:
    一、單個主機上的多個環境隔離
    二、建立容器時保留卷數據
    三、僅從新建立已更改的容器
    四、變量和在環境之間移動合成

安裝:
    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 命令:
    介紹:
        一、docker-compose 命令的執行都必須指定或者在當前目錄下存在 compose 文件, 且輸出的內容都是這個 compose.yml 文件定義的集羣內的信息
        二、每一個集羣中能夠擁有多個 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 版本
相關文章
相關標籤/搜索