本地通過dockerfile構建博客項目鏡像過程中通過pip安裝包時經常性超時失敗,通過配置騰訊雲容器服務來構建鏡像,不用考慮安裝包超時的問題
Dockerfile
Dockerfile 是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明
FROM:定製的鏡像都是基於 FROM 的鏡像
RUN: 用於執行後面跟着的命令行命令
COPY: 複製指令,從上下文目錄中複製文件或者目錄到容器裏指定路徑
ADD: 指令和 COPY 的使用格式一致(同樣需求下,官方推薦使用 COPY)。功能也類似,不同之處如下:
CMD: 類似於 RUN 指令, 用於運行程序, 爲啓動的容器指定默認要運行的程序, 程序運行結束容器也就結束, 但二者運行的時間點不同
CMD是在docker run 時運行, RUN 是在 docker build
注:如果 Dockerfile 中如果存在多個 CMD 指令,僅最後一個生效
鏡像的構建
項目結構
web-preject # 倉庫名稱
├── Dockerfile # dockerfile
└── requirements.txt # 要安裝的包
└── run.sh # 容器啓動運行的腳本
這裏只是構建項目運行環境的鏡像,若要和源碼一起構建,則將Dockerfile、requirements.txt和run.sh一起放項目的根目錄下
Dockerfile
FROM python:3.6
ENV PYTHONUNBUFFERED=1
COPY requirements.txt /opt/myapp/requirements.txt
# 需要構建源碼直接把上面的的命令替換成 => COPY . /opt/myapp/
WORKDIR /opt/myapp
RUN pip install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
CMD ["/bin/sh","run.sh"]
requirements.txt
Django==2.0
django-ckeditor==5.4.0
django-js-asset==1.0.0
Pillow==5.0.0
mysqlclient==1.4.6
pytz==2017.3
uwsgi==2.0.18
run.sh
python3 /opt/myapp/manage.py runserver 0.0.0.0:8000
在 Dockerfile 文件的存放目錄下,執行構建動作
通過目錄下的 Dockerfile 構建一個 web:test(鏡像名稱:鏡像標籤)
docker build -t web:test .
注:最後的 . 代表本次執行的上下文路徑,是指 docker 在構建鏡像,有時候想要使用到本機的文件(比如複製),docker build 命令得知這個路徑後,會將路徑下的所有內容打包 (上下文路徑下不要放無用的文件,因爲會一起打包發送給 docker 引擎,如果文件過多會造成過程緩慢)
鏡像倉庫與命名空間
1. 登錄騰訊雲服務控制檯 - 【雲產品】 - 搜索【容器服務】
2. 進入容器服務,選擇左側導航欄中的搜索【鏡像倉庫】>【我的鏡像】
3. 根據提示填寫相關信息,並單擊【開通】進行初始化
4. 設置用戶名和密碼
5. 新建命名空間,選擇左側導航欄中的【鏡像倉庫】 >【我的鏡像】>【命名空間】> 【新建】> 輸入【名稱】
新建鏡像與配置源代碼
1. .選擇左側導航欄中的【鏡像倉庫】>【我的鏡像】>【新建】,輸入名稱、類型、命名空間和描述,點擊提交
2. 配置源代碼,點擊【我的鏡像】>【源代碼授權】github/gitlab
a. 立即授權同步 GitHub 代碼源
b. 輸入賬號、密碼與驗證碼登錄
如下圖所示,授權成功
構建配置
-
代碼源: 選擇 Github
-
Organization:選擇您的 Organization,通常爲您的 Github 賬戶,如果您屬於多個組織,那麼挑選其中一個
-
Repository:選擇您需要構建容器鏡像的倉庫
-
觸發方式:複選模式,支持當 push 代碼到某個分支或者新的 Tag 時,自動觸發容器鏡像構建。也可不選擇觸發方式,在鏡像構建頁面通過手動構建的方式構建鏡像
-
版本命名規則:即容器鏡像 Tag 命名規則,鏡像 Tag 名支持格式化
-
分支/標籤:可以包含分支名 / 倉庫 Tag 名
-
更新時間:鏡像構建時間
-
commit號:分支 / Tag 最近的 commit 號
-
-
覆蓋鏡像版本:構建後將同時生成該版本名的鏡像,並覆蓋已有同名鏡像
-
Dockerfile路徑:Dockerfile 在倉庫中的相對路徑。默認爲空,可以不填,表示 Dockerfile 位於項目的根目錄下,且文件名必須爲 Dockerfile,以大寫 D 開頭。如果 Dockerfile 位於其它目錄,例如位於倉庫的 build 目錄下,文件名爲 Dockerfile,那麼 Dockerfile 路徑爲
build/Dockerfile
-
構建目錄:構建時的工作目錄,Dockerfile 指令將在該目錄下執行
-
構建參數:鏡像構建時傳入的參數,可用於設置環境變量
鏡像構建
選擇一個鏡像構建,輸出構建日誌和構建結果
常用命令
登錄騰訊雲docker registry
~$ sudo docker login --username=[username] ccr.ccs.tencentyun.com
從registry拉取鏡像
~$ sudo docker pull ccr.ccs.tencentyun.com/xxxxxxxx:[tag]
將鏡像推送到registry
~$ sudo docker tag [ImageId] ccr.ccs.tencentyun.com/xxxxxxxx:[tag]
~$ sudo docker push ccr.ccs.tencentyun.com/xxxxxxxx:[tag]