1. 程式人生 > >編寫Dockerfile和docker-compose.yaml檔案案例

編寫Dockerfile和docker-compose.yaml檔案案例

本文使用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的指令碼

start.sh

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