使用 Dockerfile 自定義 Docker 鏡像

需要提前聲明一下的是,該文章會涉及一些 nodejs 的知識,不過不影響閱讀。
Dockerfile 是文本格式的配置文件,我們可以使用 Dockerfile 來快速創建自定義的鏡像。一般 Dockerfile 分爲四部分:(如下)

  1. 基礎鏡像信息
  2. 維護者信息
  3. 鏡像操作指令
  4. 容器啓動時執行指令

指令

指令:FROM
格式:FROM <image>  或  FROM <image>:<tag>
栗子:FROM node

Dockerfile 的第一條指令必須爲 FROM 指令,有點相當於我們代碼中的依賴的意思。

指令:MAINTAINER
格式:MAINTAINER docker_user docker_user@email.com
栗子:MAINTAINER zone zone@qq.com

指定維護者信息。

指令:RUN
格式:RUN <command>
栗子:RUN npm install

栗子中將會在 shell 終端執行 npm install

指令:CMD
格式:CMD <command>
栗子:CMD node ./bin/www

啓動容器時執行,每個 Dockerfile 只能有一條 CMD 命令,如果有多條 CMD 命令,則只會執行最後一條命令

EXPOSE
格式:EXPOSE port
栗子:EXPOSE 22 80 3000

指明容器暴露的端口,在啓動容器時可以通過 -p 來指明本地端口與容器端口之間的映射關係。

指令:ENV
格式:ENV <key> <value>
栗子:ENV PATH /usr/local

指定環境變量。

指令:ADD
格式:ADD <src> <dest>
栗子:ADD D://Test /usr/local

將本地目錄(左邊)中的文件複製到容器目錄(右邊)中。

指令:COPY
格式:COPY <src> <dest>
栗子:COPY D://Test /usr/local

將本地目錄(左邊)中的文件複製到容器目錄(右邊)中。目錄不存在時,將會自動創建。

指令:ENTRYPOINT
格式:ENTRYPOINT <command>
栗子:
指令:VOLUME
格式:VOLUME ["/data"]
栗子:

創建一個可以從本地主機或其他容器掛載的掛載點,一般用來存放數據庫和需要保持的數據等。

指令:WORKDIR
格式:WORKDIR path
栗子:WORKDIR /usr/local/node_project

指定後續命令的執行目錄。

指令:ONBUILD
格式:ONBUILD [instruction]
栗子:

最終通過 Dockerfile 生成新鏡像

docker build -t image_tag /usr/local/docker/file/path

-t 指明新鏡像的 tag ,後面爲 Dockerfile 的路徑

舉個完整的栗子

理論的東西都很乾澀,我個人認爲,只有實操了纔有更多的動力去學某一件東西,完成之後也會有些許的成就感,這也是對我們的激勵吧。那麼接下來我們進行實操。
下面的功能是將一個 nodejs 的 express 應用運行在服務器的 4000 端口上。

第一步:

在一個空目錄下新建 dockerfie :

vim Dockerfile

第二步:

編寫 Dockerfile 文件,如下:

#基於 node 鏡像
FROM node
#指定維護者信息
MAINTAINER zone 842221695@qq.com

#WORKDIR /usr/local
#新建路徑
#RUN mkdir testgit
#WORKDIR testgit
#將 github 中的項目 clone 到本地
#RUN git clone https://github.com/zonezoen/test.git
#上面這一段代碼已經註釋掉,就不會被調用


#指定下一條命令的運行目錄
WORKDIR /usr/local
#新建路徑
RUN mkdir work
#在 /usr/local 的基礎上指定運行目錄,所以當前目錄爲:/usr/local/work
WORKDIR work
#安裝必要的組件
RUN npm install express
RUN npm install express-generator -g
RUN npm install supervisor -g
RUN express myapp -e
#將當前目錄下的文件,複製到 /usr/local/work/ 下
#COPY . /usr/local/work/
WORKDIR /usr/local/work/myapp
RUN npm install
WORKDIR /usr/local/work/myapp
#啓動 express 應用
CMD supervisor ./bin/www
#暴露容器 3000 端口
EXPOSE 3000

第三步:

docker build -f dockerfile/Dockerfile -t myimage .

值得注意的是,這句代碼最後還有一個小點,是指定 dockerfile 在當前目錄中。而且鏡像名稱不可以有大寫字符。

第四步:

docker run -p 4000:3000 myimage

如果沒有錯的話我們的鏡像就跑起來了,來看下運行結果:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章