Docker 入門實作
本篇將會簡單的講述 docker 常見的開發流程,主要是給對 docker 還不太了解的讀者參考。

開始之前如果對 Container 和 Docker 還不太了解,推薦先閱讀這篇文章 Container 基本概念介紹 (Docker)。
本篇將會簡單的講述 docker 常見的開發流程,主要是給對 docker 還不太了解的讀者參考。
安裝指南 Installation Guide
在開始之前首先需要安裝 Docker。只要按著文檔走,安裝 Docker 其實非常簡單。如果是 Linux OS 的話我個人推薦 Digital Ocean 的文檔,寫得很詳細而且各式版本都有。
開發流程

在使用 Docker 時,最常見的指令 Command 有以下幾種:
- docker build - 創建 Image
- docker pull/push <image> - 對倉庫 Registry 推送和抓取 Image
- docker run <image> - 根據 Image 運行 Container
而創建 Image 則是需要撰寫一個 Dockerfile 文檔。寫 Dockerfile 有很多 Best Practices,比如所建出的 Image 大小、以及 Security 相關等等。這裡我們暫時先不考慮太多,以創建簡單的 Image 為重點。
💡 下面 asciinema 影片裡的所有指令直接 highlight 用於複製貼上喔!
下面我們會創建一個簡易的軟體並包裝成 Container,跑一些常用的除錯指令,然後上傳至 Registry 等等。
創建軟體
首先我們來寫一個簡單的 count.sh
,它的功用是從一數到三。如果對 Shell 語法不太熟悉也不需要擔心,這只是演示用的而已。
#!/bin/sh
# Purpose of this script is to count to 3
i="1"
while [ $i -lt 4 ]
do
echo $i
i=$(($i + 1))
sleep 1
done
創建 Image
接下來我們將寫好的 application 包裝成映像檔 Image。簡單解釋一下:
FROM alpine:3
COPY count.sh .
CMD ["./count.sh"]
-
FROM alpine:3
是指使用 Linux 發行版 alpine 的最新版本 3,這會從 Docker Hub 中抓取官方上傳好的 Linux alpine 發行版下來,相當於運行了docker pull alpine:3
,如果在本底已有alpine:3
的 Image 則會直接取用。
通常我們會稱此為 Base Image。 COPY count.sh
是指將上面寫好的count.sh
複製進入 Image 裡面。CMD ["./count.sh"]
則是只默認運行./count.sh
。
這裡使用了 docker build -t ewocker/count .
來創建 Image,簡單解釋一下:
-t ewocker/count .
-t => --tag
是指命名 Image 的全名為ewocker/count
,ewocker
是我在 Docker Hub 上面的 Repository ID,count
則是 Image 的名字。最後的.
則是指在目前路徑~/Desktop/docker
運行指令。- 最後創建出的 Image 寫到
Successfully tagged ewocker/count:latest
代表 Image 的全名 tag 為ewocker/count:latest
,因為在創建時沒有給予版本,所以默認會在後面加上latest
。
簡單來說 Image tag 的組成是<registry path>/<name>:<version>
。
運行 Container
在創建好 Image 後我們可以簡易的運行 Container。
這裡使用了兩種方式來運行 Container,簡單解釋一下:
docker run --rm ewocker/count
--rm
是指運行結束後將 container 移除。ewocker/count
則是指根據這個 Image 來運行 container。docker run --rm -it ewocker/count /bin/sh
這是比較常見的 debug 用指令,-it
分別是-i => --interactive
和-t => --tty
。
簡單的說就是在運行 container 後連接一個 STDIN Shell,並用/bin/sh
覆寫默認的./count.sh
。
在運行後本來應該數完1->3
就結束的 container 因為並沒有運行默認的 shellscript 而是運行了一個shell
,所以可以在 Container 裡面運行任何指令用於 debug。簡單來說就是進入到一個 Container 裡面,在上面影片裡我們在進入到 container 裡面後運行ls
發現 output 和在本地運行時完全不同,因為我們是在一個運行中的 linux alpine container 中運行的指令。
使用 Registry
最後我們演示如何使用 registry。
這裡主要使用 docker push ewocker/count
和 docker pull ewocker/count
:
docker push ewocker/count
首先我們將 Imageewocker/count:latest
上傳至 registry,在那之前我們必須要有一個 Docker Hub 的帳號,如果還沒有創辦可以在這個 link 上先創辦一個。有了帳號後要先運行docker login
來登入帳號。
在影片中我們看到The push refers to repository [docker.io/ewocker/count]
。在使用docker push
時默認 registry 會使用 Docker Hubdocker.io
,而全 repository path 則變成docker.io/ewocker/count
。docker pull ewocker/count
在上傳之後,我們先用docker image rm ewocker/count
將本地的 Image 移除來模擬在另一台電腦上原先並沒有 Image 的情況。接著運行 pull 來將 Image 抓取下來,而在那之後運行docker image ls | grep ewocker/count
來表示 Image 已經被抓取到本地了。
結語
本篇非常簡單的講述了 docker 常見的開發流程,說到 container 雖然不有 docker,但最常見和必須知道的目前還是非 docker 莫屬。