該實踐是在已經安裝了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/
