iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 9
0
DevOps

讓我們來玩玩Docker吧~系列 第 9

Day 9 開始撰寫Dockerfile吧! (一)

  • 分享至 

  • xImage
  •  

最近忙忙忙,所以篇幅較少點。

Dockerfile 如同在學校抄小抄一樣,抄完答案得 100 分 從此走向人生巔峰

Dockerfile 不是小抄,是

大抄

你會寫份 Dockerfile 腳本,裡面將包含所有在啟動 Container 後所有配置與各項資訊,以此快速部署你的 Container。

在 Dockerfile 裡是由一行行指令所組成,並且支援以#為開頭的註解行,腳本裡大致會有這四項配置:

  • 基底映像檔
  • 維護者
  • 操作指令
  • 容器執行時指令

基底映像檔 ( FROM )

就如同字面上的意思,為整個 Dokerfile 的地基,以這個地基為基礎,一層層的疊加。在指令中為 FROM ,例如以 ubuntu 為基底 :

FROM ubuntu:16.04

除了基礎鏡像外,還有一個叫 scratch 的空白鏡像,以這個空白鏡像為基底會讓體積變得更小。

FROM scratch

維護者( MAINTAINER )

在 Dockerfile 完成後,有可能會 push 到 Docker Hub 或是 Github 上供人觀看或下載,但當這個 Dockfile 被發現有問題時腳本裡面卻沒有 MAINTAINER 的時候,根本找不到人去做修正。所以在腳本裡面添加維護者是為了當有問題時可以找到人去做維護的動作。在指令中為 MAINTAINER,例如 :

MAINTAINER jiahong

操作指令

在 Dockerfile 裡為重要的部份,因為你安裝、複製、引入..等指令,全部都在這個地方運行。

RUN

RUN 指令將對映像檔執行相對應的命令。每運行一條 RUN 指令,映像檔就會新增一層。例如:

RUN apt-get update -y
RUN apt-get install nginx -y
RUN apt-get install mysql -y

在上述裡,特別為 apt-get update 再去建立一個映像檔其實是很沒意義的,所以我們會有下列打法:

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

這樣代表只執行一次 RUN 的指令了。

EXPOSE 聲明端口

這指令為聲明當容器運行時所提供的服務端口,幫助使用者理解這個容器要對外開放的端口。指令為:

EXPOSE 80
  • 這只是聲明我將要使用這個端口,並不會真正的對外開放。

CMD

這指令為當容器執行後所要執行的動作,但一個 Dockerfile 裡只能有一個 CMD ,當有多個 CMD時,只會執行最後一個 CMD 指令。例如:

CMD echo 'Hello world!'

那我們今天就先到這 ~


上一篇
Day 8 MYSQL + phpmyadmin 建置
下一篇
Day 10 開始撰寫Dockerfile吧! (二)
系列文
讓我們來玩玩Docker吧~30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言