Docker 小筆記

長草太久了,簡單記錄一些最近遇到的問題好了 ...

先放參考文章

近期公司做了一些組織變動,因緣際會下有機會碰到一點點 linux OS 及 docker
的皮毛 😅

而剛好這兩者我之前都只接觸非非非非非非非常少

大概就是只會連進去下 ls 或 docker ps 的程度而已

狀況其實很簡單

正式環境有服務以 docker 形式 run 在 ubuntu 主機上

而原本維護的人員,在無法做太多交接工作情況下離職了

我跟同事 2 個菜雞就需要來研究它是怎麼做

  1. 版本控制
  2. 建置&部署

版控部分後來找到 repo 了,並且發現根目錄下有個 Dockerfile

內容大致上是:以 Asp.Net Core 2.1 為基底,進行 restore、build、publish 一個 Web 站台

於是我們推測流程應該是:

  1. ssh 連線進 ubuntu 主機
    (我隨便 google 一下就先抓了 PuTTY 來用,同事用 XShell,應該還有其他好用軟體可選擇)
  2. git pull 抓版控原始碼到適當目錄下 (?)
  3. 使用 docker build -t <包含Dockerfile的目錄>

    -t 是用來命名 image 的,後面可以帶一個 tag (沒給的話會預設為 latest)

    要稍微留意 docker build 語法要在 Dockerfile 檔案的 "上一層" 目錄執行

    例如: docker build -t myimg:v1 MyAspNetCoreProj/

    然後就等 docker 依照 dockerfile 內定義的流程建置出指定的 image

    第一次 build 會比較久,要等它 pull 基底的 image 下來

    build 完沒問題的話可以 docker image ls 看是否有產生指定的 image

    20200104015816.png

  4. 把剛剛建置好的 image 實際跑一個 container 起來

    docker run -d --rm --name <CONTAINER名稱> -p <HOST OS PORT>:<CONTAINER PORT> <IMAGE NAME>

    -d 是在背景執行

    --rm 是 container 結束時自動移除 container

    --name 是實際運行時 NAMES 這個欄位顯示的名字

    -p 是指定外部主機跟 container 內部的埠號對應

    例如 5000:80 就是從外部 http://localhost:5000 可以連至 container 內的 80 port

    最後的 image 名稱則是指定要用哪個 image 來運行 container,例如剛剛的 myimg:v1

    例如:docker run -d --rm --name myapp -p 5000:80 myimg:v1

如果成功應該可以在 docker ps 看到新的 containter 正在運作

也可以在 host 主機用瀏覽器打開 http://localhost:5000 連到服務

還沒有成功運行的圖 😛

因為以上都是先在本機測試,container 的網站啟動時連不到正式環境所以死掉了

這時候 docker run 就不能加 -d

不然它在背景啟動結果掛掉,你也看不到錯誤 output 😆 讓我鬼打牆了一下


前面其實還有遇到一個問題

  • 為了模擬公司 ubuntu 主機環境,我在本機 Win10 下啟用了 WSL (Windows Subsystem for Linux)

    並到微軟商店下載 ubuntu 18.04 LTS,然後首次登入、建立帳密就連進去

    結果第一步 docker version 就出錯了

    一開始的錯誤沒記錄到,但大致上是說目前使用者沒有足夠權限之類的

    可以參考官網這一節

    來增加使用者至相對群組 (以我目前對 linux 的非常粗淺的理解)

  • 第二階段的錯誤則是

    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

    爬了好幾篇文後得知目前 wsl 的 docker 還有些限制

    必須動點手腳讓它連結你 Win10 本機的一些 docker 服務

    大致步驟為

    1. 本機先安裝 docker (我好像是直接抓 docker desktop 安裝比較簡單)

    2. 從右下的 docker 圖示右鍵 => settings => General=> Expose daemon on tcp://localhost:2375 without TLS

    3. 編輯 ~/.bashrc 在最後一行加上 export DOCKER_HOST=tcp://127.0.0.1:2375

      指定每次 wsl 啟動時都要設這組環境變數

      幾個步驟做完後可能要重登 ubuntu 來生效

這篇先這樣吧,希望菜雞到時候操作正式環境不要烙賽

留言區

結果這幾天問到離職同事 原來 Prod 環境都要用什麼 Ansible 去操作 尬得又一個要研究的陌生名詞 😂🤣😂

Soon

新增一則留言