Dockerfile 建立自訂映像檔 — 架起網站快速又簡單(一)

潔客幫Jackercleaning
6 min readFeb 18, 2019

--

講求效率和一次到位的你,Trust me Docker can make it!本篇著重於編寫Dockerfile的簡易教學,透過在本地端實作,完成Dockerfile。

Dockerfile介紹

對於以往一直在使用VM的工程師們,Docker的出現就像地獄中垂下的蜘蛛之絲,如快速部署、輕量等,相信已經聽聞不少,那Docker的好處在本篇章就不一一列舉。對於初始使用Docker的工程師會碰到的一個問題,如果想修改某些設定就要進入容器(container)下指令,似乎又有那麼點麻煩又沒效率,這時即可使用Dockerfile,讓你豁然開朗。

Dockerfile是一種文字格式的設定檔,可以透過Dockerfile快速建立自訂的映像檔(image),換句話說,Dockerfile就像是建置Docker Image的腳本。

舉個例子,就把自己想像成是一位裝潢設計師,你想要房子有怎麼樣的格局、擺飾等,畫好設計藍圖(Dockerfile)後,最後請師傅(Docker)依你的構思完成即可。

Dockerfile實作

開始前可以先創一個放Dockerfile的資料夾,方便之後在本路徑下就可以直接docker build出映像檔。

mkdir first-dockerfilecd first-dockerfile

Dockerfile結構

大致上可以分成四個部分構成

1.基礎映像檔資訊

2.維護者資訊

3.映像檔操作指令

4.容器啟動時需執行指令

先前說過Dockerfile是一種文字格式個設定檔,即可利用vi進行編寫Dockerfile。

vi Dockerfile
FROM ubuntu:18.04

首行必須要為指定的基礎映像檔,這裏使用的是ubuntu作為基礎映像檔,版本18.04,若不給版本號則會是latest。

要裝潢房子,首先就是要有房子給你裝潢!

MAINTAINER tofu

維護者資訊想必也是不可少,此地方也可輸入E-mail資訊,注意此資訊會寫入產出映像檔的Author名稱屬性中。

RUN apt-get update -y\
&& apt-get install nginx -y

最重要的部分,想要在映像檔上設定或安裝都須將命令寫於此,格式須依RUN<command>,為RUN 指令後面放 Linux 指令,如果指令太長可以使用\來進行換行。

在此指令為先更新確認軟件包是最新的接者安裝nginx,而-y為同意指令進行中所有出現的問題。

EXPOSE 80

設定運行時容器提供服務的通道。

CMD ["nginx","-g","daemon off;"]

最後就是當啟用指定容器時(container)預設執行的指令,格式 CMD[’’executable’’,”param1”,’’param2’’]。

此為使用設定檔案時,為了在容器中正常執行,需要保持 daemon off;

以上終於完成了Dockerfile的編寫啦!

先前說到Dockerfile是純文字格式的設定檔,就有以下優點

1.可以進行git版控,讓你管理或分享起來更加便利。

2.佔用空間極小,畢竟就純文字檔而已。

Dockerfile建立映像檔

完成以上編寫之後,就是要執行看看自己設定好Dockerfile能不能成功建立映像檔,我們就要透過docker build來建立,指令格式為docker build [option]內容路徑。

docker build -t franktofu/first_image .

即為在使用此目錄下(注意最後的點 .)的dockerfile進行建立的動作,也可以使用-f選項來指定想要建立的dockerfile路徑位置,使用-t為建置映像檔的標籤資訊,此為franktofu/first_image。

建立映像檔後確認以及執行 Docker Container

建立完後可以下指令檢查是否建立成功

上面就是成功建立出的映像檔,接著執行容器

docker run -d -p 80:80 --name test franktofu/first_image

執行指令

-d代表在背景執行

-p <本機通道>:<容器通道>

- -name<自訂名稱>為容器命名

最後franktofu/first_image就是想執行的映像檔

容器跑起來之後的最後一步就是打開browser檢查local端!

結語

恭喜你已經可以簡單地寫出dockerfile囉,dockerfile篇章的講解就到此結束,當然還有很多的地方可以深入探究,可以試著看看官方文件喲!
傳送門在此 — >docker官方網站

而這只是架起網站的一小部分(web server),當然還需要mysql、php等等的工具需要安裝與設定,可以嘗試把這些以Docker container的方式執行,下個篇章將介紹Docker compose,讓你一鍵完成所有部署!

--

--