這個demo簡單演示瞭如何把一個flask的 Hello World 頁面打包成docker鏡像, 而且發到遠程鏡像倉庫的方法.html
首先, 新建應用文件app.py, requirments.txt, 和一個docker文件.python
mkdir demo && cd demo
touch Dockerfile app.py requirements.txt
複製代碼
flask
redis
複製代碼
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)
複製代碼
# 基於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"]
複製代碼
準備好文件就能夠開始打包鏡像了redis
docker build --tag=demo .
複製代碼
查看新鏡像docker
docker image ls -a
複製代碼
運行鏡像flask
docker run -p 8000:80 demo
複製代碼
打開瀏覽器訪問 http://localhost:8000, 就能夠看到 hello world 了.瀏覽器
爲了方便學習 Docker 咱們能夠安裝桌面客戶端的 Docker for Mac
/ Docker for Windows
.bash
推鏡像以前咱們通常會給鏡像打標籤, 方便維護管理app
打標籤命令:python2.7
docker tag image username/庫名:標籤
# 咱們能夠這樣敲
docker tag demo monk/demo:v1.0
複製代碼
到官方的鏡像倉庫 Docker Hub 註冊登陸, 推鏡像時就會在這裏看到你的image了, 公開的鏡像能夠分享給別人使用.socket
推送鏡像以前須要先在終端登陸 dockerhub:
docker login
複製代碼
推送完咱們能夠在docker hub上看到這個鏡像.
docker push monk/demo:v1.0
複製代碼
在國內docker hub的速度比較慢, 建議仍是用國內的鏡像倉庫, 好比阿里的, 須要在阿里管理後臺容器鏡像服務設置倉庫.
在終端切換阿里的docker帳號
docker login --username=username registry.cn-shenzhen.aliyuncs.com
複製代碼
阿里管理後臺說明了如何登陸, 推送, 還有內網地址等操做, 跟着作就能夠了, 步驟跟 DockerHub 的差很少只是換了阿里的地址.
阿里雲還有鏡像加速器, 其實就是一個加速連接.
在Docker Desktop
設置 Prefrence > Daemon > Basic
在 Registy mirrors
用阿里給你分配的加速地址, 而後應用重啓 Docker for Mac
/ Docker for Windows
.
完.