這個demo簡單演示瞭如何把一個flask的 Hello World 頁面打包成docker映象, 並且發到遠端映象倉庫的方法.
0.新建 Docker 映象
首先, 新建應用檔案app.py, requirments.txt, 和一個docker檔案.
mkdir demo && cd demo
touch Dockerfile app.py requirements.txt
複製程式碼
requirments.txt
flask
redis
複製程式碼
app.py
from flask import Flask
from redis import Redis, RedisError
import os
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
try:
visits = redis.incr("counter")
except RedisError:
visits = 0
html = "<h3>Hello {name}!</h3>" \
"<b>Visits:</b> {visits}"
return html.format(name=os.getenv("NAME", "world"), visits=visits)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
複製程式碼
Dockerfile
# 基於python2.7官網映象
FROM python:2.7-slim
# 設定工作目錄
WORKDIR /app
# 複製當前目錄下的檔案到工作目錄
COPY . /app
# 安裝pip庫
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# 暴露80埠
EXPOSE 80
# 定義環境變數
ENV NAME World
# 容器啟動後執行命令, 執行app
CMD ["python", "app.py"]
複製程式碼
準備好檔案就可以開始打包映象了
docker build --tag=demo .
複製程式碼
檢視新映象
docker image ls -a
複製程式碼
執行映象
docker run -p 8000:80 demo
複製程式碼
開啟瀏覽器訪問 http://localhost:8000, 就可以看到 hello world 了.
1. Docker映象倉庫
為了方便學習 Docker 我們可以安裝桌面客戶端的 Docker for Mac
/ Docker for Windows
.
推映象之前我們一般會給映象打標籤, 方便維護管理
打標籤命令:
docker tag image username/庫名:標籤
# 我們可以這樣敲
docker tag demo monk/demo:v1.0
複製程式碼
1.1 Docker Hub
到官方的映象倉庫 Docker Hub 註冊登入, 推映象時就會在這裡看到你的image了, 公開的映象可以分享給別人使用.
推送映象之前需要先在終端登入 dockerhub:
docker login
複製程式碼
推送完我們可以在docker hub上看到這個映象.
docker push monk/demo:v1.0
複製程式碼
1.2 阿里雲
在國內docker hub的速度比較慢, 建議還是用國內的映象倉庫, 比如阿里的, 需要在阿里管理後臺容器映象服務設定倉庫.
在終端切換阿里的docker賬號
docker login --username=username registry.cn-shenzhen.aliyuncs.com
複製程式碼
阿里管理後臺說明了如何登入, 推送, 還有內網地址等操作, 跟著做就可以了, 步驟跟 DockerHub 的差不多隻是換了阿里的地址.
2. 映象加速
阿里雲還有映象加速器, 其實就是一個加速連結.
在Docker Desktop
設定 Prefrence > Daemon > Basic
在 Registy mirrors
用阿里給你分配的加速地址, 然後應用重啟 Docker for Mac
/ Docker for Windows
.
完.