docker-compose學習


該實踐是在已經安裝了docker的基礎上,如果還未安裝docker,請先安裝docker : https://www.cnblogs.com/theRhyme/p/9813019.html

docker-compose容器編排,可以啟動多個容器(在docker-compose.yml中配置),或重新編譯多個容器,以及關閉等操作。

 

1. 安裝

 

第一種方式:使用pip安裝(推薦)

sudo pip install docker-compose

 

第二種方式:Docker官網安裝教程

https://docs.docker.com/compose/install/

在Linux系統下執行下面的命令:

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

該過程大概需要10多分鍾。

 

給docker-compose添加權限

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

 

版本

查看docker-compose版本

docker-compose --version

  

2. Get started with Docker Compose

下面運行一個python框架flask的web項目

 

Step 1: 項目設置

創建一個項目目錄,進入到該目錄

mkdir docker-comopse-test
cd docker-compose-test

  

在該目錄下創建一個app.py文件,並加入下面的內容

大體意思是訪問項目路徑"/",在redis中點擊次數"hits"+1

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)

  

創建一個文本項目"requirements.txt",該文件內容是項目所依賴的東西

flask
redis

  

Step 2: Create a Dockerfile

 創建Dockerfile為了創建一個docker鏡像,這個鏡像包含了全部的項目依賴:

FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

構建一個python3.4的鏡像;

將當前目錄"."添加到鏡像的/code目錄下;

設置鏡像工作目錄為/code;

構建鏡像階段執行集成項目依賴的命令;

為容器啟動后默認執行的命令

 

Step 3: Define services in a Compose file

創建一個docker-compose.yml在當前項目目錄下,內容如下:

version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

  

這個Compose文件定義了兩個服務:web和redis;

web服務使用的鏡像是build當前目錄下"."下Dockerfile后的鏡像,暴露當前宿主機(localhost)的端口號5000,與docker容器的5000端口(本項目的flask)映射;

redis服務的鏡像就是從docker倉庫拉下來的公共的Redis鏡像;

 

 

Step 4: Build and run your app with Compose

構建並運行剛才的flask web項目

docker-compose up

  

通過瀏覽器訪問http://localhost:5000/,如下圖

 

上圖,是我多次刷新的效果。

由於剛才的啟動命令沒有才后台運行,所以我們再開啟一個terminal窗口執行:

docker image ls

  

就能夠看到我們剛剛已經構建的本地鏡像列表

剛才我們的web服務的鏡像名,是"當前目錄名稱_服務名"的格式自動生成。

 

關閉當前容器:

在項目的根目錄,docker-compose.yml所在的目錄執行命令

docker-compose down

 該命令會停止容器並且刪除容器對應的鏡像(web和redis),以及網絡配置

 

或者在未后台運行的窗口:"Ctrl+C"

 

 

Step 5: Edit the Compose file to add a bind mount

編輯"docker-compose.yml"文件內容,把宿主機的路徑"."(當前目錄)掛載到容器中的"/code",格式是:"HOST:CONTAINER"

version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  redis:
    image: "redis:alpine"

  

Step 6: Re-build and run the app with Compose

docker-compose up

  

Step 7: Update the application

編輯"app.py"文件,將返回的內容修改為

return 'Hello from Docker! I have been seen {} times.\n'.format(count)

  

刷新瀏覽器,返回結果已經改變了

Step 8: Experiment with some other commands

執行"docker-compose"命令必須在當前目錄或環境下要有對應的"docker-compose.yml"文件

后台啟動運行

docker-compose up -d

  

查看已經啟動的容器

docker-compose ps

  

執行一次性的命令:docker-compose run

比如查看某個service的環境參數:docker-compose run 服務名 env

這里的服務名即是"docker-compose.yml"文件中"services"節點下的名稱,如"web".

docker-compose run web env

 

創建並進入docker 容器 

docker-compose run service名稱 sh

 

 

停止容器

如果是容器是以后台方式運行的,可以使用

docker-compose stop

僅僅停止運行的容器

 

關閉所有內容,完全刪除容器,並且刪除數據卷

docker-compose down --volumes

  

docker-compose --help

  

 

 

來源:https://docs.docker.com/compose/gettingstarted/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM