如何打包Docker映象並推送到遠端倉庫

Dom_秋發表於2019-03-18

這個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

如何打包Docker映象並推送到遠端倉庫

Registy mirrors 用阿里給你分配的加速地址, 然後應用重啟 Docker for Mac / Docker for Windows.

完.

相關文章