Docker 通過Dockerfile建立自定義映象
阿新 • • 發佈:2018-12-26
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的映象等等。