開始之前如果對 Container 和 Docker 還不太了解,推薦先閱讀前面的文章 Container 基本概念介紹!
在開始之前首先需要安裝 Docker。只要按著文檔走,安裝 Docker 其實非常簡單。如果是 Linux OS 的話我個人推薦 Digital Ocean 的文檔,寫得很詳細而且各式版本都有。
在使用 Docker 時,最常見的指令 Command 有以下幾種:
docker build
docker pull/push <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
接下來我們將寫好的 application 包裝成映像檔 Image。簡單解釋一下:
FROM alpine:3
COPY count.sh .
CMD ["./count.sh"]
FROM alpine:3
docker pull alpine:3
,如果在本底已有 alpine:3
的 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
運行指令。Successfully tagged ewocker/count:latest
ewocker/count:latest
,因為在創建時沒有給予版本,所以默認會在後面加上 latest
。簡單來說 Image tag 的組成是 <registry path>/<name>:<version>
。在創建好 Image 後我們可以簡易的運行 Container。
這裡使用了兩種方式來運行 Container,簡單解釋一下:
docker run --rm ewocker/count
--rm
是指運行結束後將 container 移除。ewocker/count
則是指根據這個 Image 來運行 container。docker run --rm -it ewocker/count /bin/sh
-it
分別是 -i => --interactive
和 -t => --tty
。/bin/sh
覆寫默認的 ./count.sh
。1->3
就結束的 container 因為並沒有運行默認的 shellscript 而是運行了一個 shell
,所以可以在 Container 裡面運行任何指令用於 debug。簡單來說就是進入到一個 Container 裡面,在上面影片裡我們在進入到 container 裡面後運行 ls
發現 output 和在本地運行時完全不同,因為我們是在一個運行中的 linux alpine container 中運行的指令。最後我們演示如何使用 registry。
這裡主要使用 docker push ewocker/count
和 docker pull ewocker/count
:
docker push ewocker/count
ewocker/count:latest
上傳至 registry,在那之前我們必須要有一個 Docker Hub 的帳號,如果還沒有創辦可以在這個 link 上先創辦一個。有了帳號後要先運行 docker login
來登入帳號。The push refers to repository [docker.io/ewocker/count]
。在使用 docker push
時默認 registry 會使用 Docker Hub docker.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 莫屬。