編寫Dockerfile和docker-compose.yaml檔案案例
阿新 • • 發佈:2018-12-16
本文使用flask基於redis構建一個web介面,教你使用Dockerfile來構建映象和使用docker-compose來啟動這一系列服務。
1. Flask服務
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host="redis",port=6379)
@app.route("/")
def hello():
count = redis.incr('hits')
return 'hello world! {}\n'.format (count)
if __name__ == "__main__":
app.run(host="0.0.0.0",debug=True,port=9999)
上面的程式碼的意思是啟動一個埠號為9999
的服務,對外開放。
訪問0.0.0.0:9999
可以看到redis
資料庫中hits
的值,每訪問一次hits
的值就增加1
.
2. Dockerfile構建映象
Dockerfile 是一個文字檔案,其內包含了一條條的指令(Instruction),每一條指令構建一層,因此每一條指令的內容,就是描述該層應當如何構建。
例如我們接下來要寫的一個Dockerfile,這裡逐行解釋一下:
# FROM代表此次構建的映象以哪個映象為基礎 FROM python:3.6-alpine # COPY是拷貝宿主機檔案到映象中的命令,這裡需要注意,COPY的兩個引數需要同時是資料夾或者檔案 COPY ./fapp /code # RUN則是在映象中執行命令 RUN ls /code # 切換工作目錄,便於執行其他命令 WORKDIR /code # 安裝啟動web服務需要的依賴 RUN pip install redis flask # CMD代表映象啟動後預設執行的命令,這裡要注意CMD打上中括號等同於exec執行命令 # 不打中括號等同於 sh -c 執行命令 CMD ["python","app.py"]
上面程式碼的做的事情就是把flask web專案的程式碼拷貝到映象中,並且安裝了相關依賴。
Dockerfile 寫好後,可以執行以下命令進行配置檔案的檢查:
docker build ocnfig
如果配置檔案有錯誤,程式會馬上提示你
然後構建映象:
docker build . -t flask_web_1:v1.0
這裡的-t代表指定映象的name:tag
會打印出如下日誌:
Sending build context to Docker daemon 4.608kB Step 1/6 : FROM python:3.6-alpine ---> 1d981af1e3b4 Step 2/6 : COPY ./fapp /code ---> 5d8d96e4d362 Step 3/6 : RUN ls /code ---> Running in a5e6a7d07a3a app.py Removing intermediate container a5e6a7d07a3a ---> 24382c5ece54 Step 4/6 : WORKDIR /code ---> Running in 14c889f263a7 Removing intermediate container 14c889f263a7 ---> 709023e4287e Step 5/6 : RUN pip install redis flask ---> Running in 6ee546163adc Collecting redis Downloading https://files.pythonhosted.org/packages/f5/00/5253aff5e747faf10d8ceb35fb5569b848cde2fdc13685d42fcf63118bbc/redis-3.0.1-py2.py3-none-any.whl (61kB) ... Removing intermediate container 6ee546163adc ---> a5dec86e4d5c Step 6/6 : CMD ["python","app.py"] ---> Running in 4a2f28da4c96 Removing intermediate container 4a2f28da4c96 ---> ceb14bbf724d Successfully built ceb14bbf724d Successfully tagged flask_web_1:v1.0
說明構建成功了,使用docker images
也可以看到:
3. docker-compose啟動服務
同樣貼上檔案內容:
version: '3' # compose-file的語法版本
services: # 定義服務
web: # 指定服務1 web
build: . # 使用當前目錄下的Dockerfile構建映象
ports: # 指定埠對映
- "9999:9999"
container_name: flask_web # 容器名稱 container_name+services_name 會作為映象名稱
redis:
image: "redis:alpine"
volumes: # 指定資料卷
- redis-data:/data
container_name: redis
volumes:
redis-data:
driver: local
這裡注意,compose操作會幫我們構建映象,也就說執行compose操作後images映象庫中會新生成你指定的映象。
在compose檔案的目錄下可以執行如下命令:
docker-compose up 啟動服務
docker-compose up -d 後臺啟動服務
docker-compose down 解除安裝服務(容器也會被刪除)
docker-compose logs 當後臺啟動服務的時候,可以使用這種方式檢視日誌
這裡使用docker-compose up -d
啟動服務即可:
Creating redis ... done
Creating flask_web ... done
然後可以使用docker-compose logs
檢視是否執行成功。
如果執行成功,可以執行curl 127.0.0.1:5000
進行測試:
hello world! 1
hello world! 2
hello world! 3
能夠正常輸出以上內容的話,說明使用docker-compose構建服務成功。
附上Ubuntu 14/16快捷安裝docker的指令碼
Ubuntu 14.04/16.04 (使用apt-get進行安裝)
# step 1: 安裝必要的一些系統工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安裝GPG證書
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 寫入軟體源資訊
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新並安裝Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
sudo chmod 777 start.sh
./start.sh