管理貨櫃的碼頭工人-- Docker (二)

Dockerfile 是什麼?

簡單來說,它是一個描述 Docker Image 如何建立的過程,描述的方法有點類似像安裝說明文件一樣。下面是一個 Dockerfile 範例:

在撰寫 Dockerfile 的時候,關鍵字通常會用全大寫,如上面的例子是 FROM MAINTAINER RUN 三個。後面接的就是執行的內容,每個 Dockerfile 都一定會有一個 FROM ,它代表 Image 要從哪開始做起。 MAINTAINER 是標示 Dockerfile 維護者。 RUN 是執行 shell 指令,上面有兩個 RUN ,第一個是用 apt 安裝 zip extension ,第二個是安裝 PHP Composer 。

看完這個 Dockerfile 應該可以猜得出來,它描述瞭如何建置有 Composer 的 Docker Image 。實際建置的指令如下:

這樣就建好了一個有 Composer 的 Docker Image 了,來試 run 看看:

補充說明: --rm 指的是每次執行完指令,容器就刪除; Image 名稱後面接的是指令,所以也可以接 composer 或 ls 等等。

如何從頭寫一個 Dockerfile

寫 Dockerfile 並不難,做起來就很像是給一臺空的機器,再安裝需要的軟體和設定,最後就會成為一個符合需求的 Docker Image 。

比方說我們想要一個可以執行 Gulp 的 Image ,首先應該會想到的是,我們需要 Node 。因此第一步要上 Docker Hub 找有沒有 Node , Node 這麼熱門當然官方有提供 Image 。因此我們決定好版本後,就可以開始寫第一行了:

寫好一行之後,這時要開始發揮 CI 精神了!要先驗證嘛!因此先 build 再執行看看,有沒有 node 我們可以執行 node -v 試試:

有看到版本了!再來 Gulp 可以用 package.json 安裝,也可以用 -g 全域安裝,那我們要的是一個可以全域執行 Gulp 的 Image ,所以使用全域安裝好了:

這次應該就可以用 gulp -v 了!

接著我們就可以用這樣的方法來執行 Gulp 的任務了:

今天學習了怎麼使用 Docker 建置屬於自己的環境,這樣就可以把家裡許多服務都容器化,但接著該如何管理它們呢?