docker學習筆記(2)---Dockerfile
在docker學習筆記(1)中,我們提到了通過commit 的命令來提交新的image,下面我們來通過Dockerfile檔案來生成image,而且使用Dockerfile,很方便移植。
一、Dockerfile中幾個常用的指令:
(1)FROM
格式:
FROM <image>
或者
FROM <image>:<tag>
(2)MAINTAINER
格式:
MAINTAINER <name>
說明:設定生成image的作者
(3)RUN
格式:
使用shell 的形式
RUN <command>
或 使用exec的形式RUN ["executable", "param1", "param2"]
說明:RUN指令會在當前的Image上的新一層layer執行指令,並提交結果。這些結果會在Dockerfile的下一步中使用到。
(4)CMD
格式:
CMD ["executable","param1","param2"]
或 CMD ["param1","param2"]
或CMD command param1 param2
說明:CMD指令會在啟動container時執行服務,例如一個命令,啟動一個服務,或啟動一個指令碼之類的。
注意:一個Dockerfile檔案只能有一個CMD指令,如果有多條,則只有最後一條有效。
(5)ADD
格式:
ADD <src> .... <dest>
說明:
如果要ADD本地檔案,則本地檔案必須在 docker build <PATH>,指定的<PATH>目錄下,如:ADD files /root/hadoop_files/(注意,這裡hadoop_files後面要有/,否則在build Dockerfile時會失敗,提示說:
lchown /var/lib/docker/aufs/mnt..........................not a directory之類的報錯資訊)
如果要ADD遠端檔案,則遠端檔案必須在 docker build <PATH>,指定的<PATH>目錄下,如:ADD ADD https://archive.apache.org/dist/hadoop/common/hadoop-1.0.4/hadoop-1.0.4-bin.tar.gz /root/
(6)VOLUME
格式:
VOLUME ["/data"]
說明:可以將本地資料夾或者其他container的資料夾掛載到container中。二、例子
下面的Dockerfile建立一個基於ubuntu:precise的映象。
通過docker build -t ubuntu:base . 命令執行。
#Authro:wgc
#Data:2014-10-24
#Introduction:Build basic development
From ubuntu:precise
# Set correct source list
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN echo "deb http://archive.ubuntu.com/ubuntu precise-updates main universe" >> /etc/apt/sources.list
# Install a few other useful packages plus Open Jdk 7
RUN apt-get update && apt-get upgrade -y && apt-get install -y openjdk-7-jdk wget vim sudo openssh-server
# Add hadoop_files
ADD files /root/hadoop_files/
# Set JAVA_HOME
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
RUN echo export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 >> /root/.bashrc
# Download hadoop
ADD https://archive.apache.org/dist/hadoop/common/hadoop-1.0.4/hadoop-1.0.4-bin.tar.gz /root/
參考:
(1)docs.docker.com/reference/builder/
(2)http://blog.csdn.net/wsscy2004/article/details/25878223
(3)tonybai.com/tag/部落格/