Dockerfile與騰訊雲容器服務構建鏡像

本地通過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]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章