2023年2月1日

建立 Docker Image

建立 Docker Image

本文以下列情境進行說明:由 Docker Registry (Container Registry) 取得 Nginx Image、執行 Container 並添加檔案或程式、退到背景與檢查執行狀態、打包新的 Image、最後上傳至 Docker Registry。

使用 Nginx 為 Web APP 為範例

  1. 取得官方所提供之 nginx image

    docker pull nginx
    
  2. 啟動 nginx 成為 web server

    docker run -d -p 8080:80 --name webserver nginx
    
    參數 說明
    -d 同於 --detach,是將 container 以背景方式執行
    -p 將本機 port 對應到 container 中的 port
    –name 指定容器名稱
    nginx 為 docker image 名稱

    執行後,在瀏覽器輸入 localhost:8080,便可以看到 Welcome to nginx! 網頁

  3. 停止、啟動、重啟 container

    docker stop webserver
    docker start webserver
    docker restart webserver
    
  4. 進入 container shll Section
    首先確定 container 在執行狀態,輸入下列指令,可以進入 shell 環境

    docker exec -it webserver sh
    
    說明
    i 同於 --interactive,保持 STDIN 互動模式
    t 同於 --tty,為 pseudo-tty,進入終端機模式,通常與 -i 同時使用,可直接輸入 -it

    Nginx 預設首頁位於 /usr/share/nginx/html/index.html,可以使用下列指令來確認:

    # cat /usr/share/nginx/html/index.html
    

    在 bash 命令下,可以輸入 exit 離開 terminal,回到 PowerShell。

  5. 複製檔案取代預設網頁
    簡單撰寫一個 Hello World 的 HTML

    <!DOCTYPE  html>
    <html>
    <head>
    	<title>Hello World Sample</title>
    </head>
    <body>
    	Hello World!
    </body>
    </html>
    

    透過 docker cp 將檔案覆蓋 container 的首頁

    docker cp ./index.html webserver:/usr/share/nginx/html
    

    在瀏覽器輸入 localhost:8080,便可以看到首頁已更新。

  6. 建立新的 image name
    使用 docker commit 將 container 儲存為新的 image。

    docker commit webserver <docker_hub_account>/hello_world_nginx:1.0
    
  7. 停止並刪除 container
    接下來停止目前執行中的 container,並刪除

    docker stop webserver
    docker rm webserver
    
  8. 測試新建立的 docker image
    執行新建立的 docker image,並以瀏覽器測試 localhost:8080

    docker run -d -p 8080:80 \
      --name webserver \
      <docker_hub_account> \
      /hello_world_nginx:1.0
    
  9. 登入 docker hub 並將新的 docker image 上傳
    首先登入 docker hub

    docker login
    

    接下來便可以上傳至 docker hub

    docker push <docker_hub_account> \
      /hello_world_nginx:1.0
    

    完成後,便可以在 docker hub 網頁中,看到新增的 docker image。


參考資料:
Docker 指令小抄
How to Create a Docker Image From a Container


沒有留言:

Deploying Vue & .NET with Google OAuth on GCP Cloud Run

Deploying Vue & .NET with Google OAuth on GCP Cloud Run Deploying Vue & .NET with Google OAuth on GCP Cloud Run...