iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0
DevOps

以 Docker 為始的多種開源服務初探系列 第 27

Day 27 上傳自己的 Image 到 Dockerhub

藉著 Day 14 建一個 Node.js 容器 所建立的基底,來製作一個 Image 並上傳到 Docker Hub 吧。

由 dockerfile 生成映像檔和容器

  1. 撰寫 Dockerfile
FROM node:12.19
WORKDIR /app
COPY ./time.js .
  1. 執行 docker build . 建立映像
    build 後方的 "空一格 + ." 請別忘記了
#Step 1/3 : FROM node:12.19
# ---> 82c222f66a6c
#Step 2/3 : WORKDIR /app
# ---> Running in f480ee3e2d7f
#Removing intermediate container f480ee3e2d7f
# ---> 417bc3df1095
#Step 3/3 : COPY ./time.js .
# ---> 1295ab42cf68
# 獲得映像檔 ID Successfully built 1295ab42cf68
  1. 從映像檔產生新容器
    docker run -ti 1295ab42cf68 /bin/bash
  2. 進入容器,執行 node time.js ,你就會看見時間每秒不停的印出
Mon Sep 13 2021 03:47:45 GMT+0000 (Coordinated Universal Time)
Mon Sep 13 2021 03:47:46 GMT+0000 (Coordinated Universal Time)

上傳到 Docker Hub

  1. 先上 Docker Hub 官網註冊一個帳號,並完成 Email 驗證
    docker-repo1
  2. 接著如同 Github 一般,建立一個 Repository
    docker-repo2
    docker-repo3
  3. 輸入 docker images 檢查你的映像檔清單
    你會發覺你新建立的映像檔其 Repository 名稱為 "none",這需要修改成跟你方才建立的 Repo 一樣。例如 andy/nodejs12-custom
    指令為:
# before
REPOSITORY                        TAG           IMAGE ID       CREATED          SIZE
<none>                            <none>        1295ab42cf68   33 minutes ago   918MB

# after
REPOSITORY                        TAG           IMAGE ID       CREATED          SIZE
andy/nodejs12-custom              <none>        1295ab42cf68   33 minutes ago   918MB
  1. 使用 docker login 完成登入
  2. 將你的 Repo 推上 docker hub。指令為:docker push <遠端 docker repo 名稱>
    docker-repo4

注意事項

1. Access to outside of context in Dockerfile

預設情況下,Dockerfile 是不允許存取 dockerfile 外層的資料夾內容。這裡的外層,是指 dockerfile 的檔案所在當作相對路徑起算點。換言之,dockerfile 放在專案的根目錄下,方能確保存取到全部內容

2. 產生的容器內,未含文本工具,如何檢查檔案內容?

可以自行安裝文本工具即可,這邊提供簡化版的 vim 工具 - vi 的安裝方式:

# 進入容器
docker exec -it <container ID> bash 
# 獲取套件清單
apt-get update
# 開始安裝
apt-get install vim-tiny

3. 推到遠端 Repo 時出現 denied: requested access to the resource is denied

很高機會是你的登入狀態有問題(或是完全沒有登入),所以請執行 docker login 後,直到看見 Login Succeeded 字樣出現在命令列上

Reference

  1. Dockerfile 中的 COPY 与 ADD 命令
  2. Access to outside of context in Dockerfile
  3. 【Docker】在容器中安装使用Vim及Vim常用技巧
  4. 《Docker —— 從入門到實踐­》正體中文版 - 映像檔建立

上一篇
Day 26 批次網路影片下載工具 - youtube-dl-server
下一篇
Day 28 Docker Portainer 圖像化容器管理工具
系列文
以 Docker 為始的多種開源服務初探30

尚未有邦友留言

立即登入留言