1. 程式人生 > >Docker 通過Dockerfile建立自定義映象

Docker 通過Dockerfile建立自定義映象

Dockerfile是一個文字格式的配置檔案,可以使用其來快速建立自定義映象。包含了建立映象需要的所有資訊和需要執行的命令列。

一、指令說明

下面是一個建立支援SSH服務的映象的Dockerfile檔案

#設定基礎映象
FROM ubuntu:latest

#作者資訊
MAINTAINER mistra ([email protected])

#要執行的命令
RUN apt-get update
#安裝SSH服務
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh
#取消pam限制
RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd #複製配置檔案導對應位置,為指令碼新增可執行許可權 ADD authorized_keys /root/.ssh/authorized_keys ADD run.sh /run.sh RUN chmod 755 /run.sh #開放埠 EXPOSE 22 #設定自啟動命令 CMD ["/run.sh"]

以此來說明Dockerfile的指令

  • FROM:指定所建立映象的基礎映象,本地沒有就會去官方庫下載
  • MAINTAINER:作者資訊
  • RUN:執行指定命令。建立映象的重點,每一個條RUN 的行為,就和手工建立映象的過程一樣:新建立一層,在其上執行這些命令,執行結束後,提交這一層的修改,構成新的映象。上面的寫法有6個RUN語句,那就會建立6層映象,結果就是產生非常臃腫、非常多層的映象。所以當命令比較多時要用 \ 換行 和 && 連線符連線命令。用盡量少的RUN語句。上面就可以這樣寫
    RUN apt-get update \
    && apt-get install -y openssh-server…..
  • CMD:指定容器啟動時預設執行的命令,每個Dockerfile檔案只能有一條CMD命令,Docker 不是虛擬機器,容器就是程序。既然是程序,那麼在啟動容器的時候,需要指定所執行的程式及引數。 CMD 指令就是用於指定預設的容器主程序的啟動命令的。
  • EXPOSE:宣告映象內服務所監聽的埠
  • ADD/COPY:複製檔案
  • ENTRYPOINT:指定映象的預設入口命令。該命令會在容器啟動時作為根命令執行,所有傳入值作為該命令的引數。
  • ENV:設定環境變數,無論是後面的其它指令,如 RUN ,還是執行時的應用,都可以直接使用這裡定義的環境變數。
  • ARG:指定一些映象內使用的引數(例如版本號),在執行docker build命令時以–build-arg< varname>=< value>的格式傳入。
  • WORKDIR:指定工作目錄

二、建立一個簡單的自定義映象

建立一個臨時資料夾ubuntu_demo,並在裡面建立一個Dockerfile檔案
這裡寫圖片描述
編輯Dockerfile

FROM ubuntu:latest
MAINTAINER mistra@docker.com

RUN mkdir /opt/leh \
  && touch /opt/leh/test

CMD echo "Hello Mistra"

建立映象

  • docker build -t mistra:v1 . 最後的 . 表示執行當前目錄的Dockerfile檔案,如果需要全路徑則為/root/ubuntu_demo(就是找到Dockerfile檔案)

這裡寫圖片描述
可以清楚看到建立命令執行過程。
可以通過Dockerfile建立,訂製自己需要的映象,比如包含了java執行環境的映象,包含了nginx的映象等等。

這裡寫圖片描述