Docker 之Dockerfile 快速學習(二)

Dockerfile文件的說明:docker

格式:shell

INSTRUCTION argumentsvim

雖然指令忽略大小寫,但建議用大寫centos

# 是註釋tomcat

MAINTAINER命令:session

MAINTAINER命令用來指定維護者的姓名和聯繫方式ssh


FROM命令:memcached

FROM <image>/<image>:<tag>ui

這個是設置基本的鏡像,爲後續的命令使用,因此應該做爲Dockerfile的第一條指令url

好比:

FROM centos6-base


RUN 命令:

會上面FROM 指定的鏡像裏執行任何命令,而後提交(commit)結果,提交的鏡像會在後面繼續用到

格式:

RUN <command> (這個命令運行一個shell中 - '/bin/sh -c')

或:

RUN ["executable", "param1", "param2"]

RUN 命令等價於:

docker run image_name command


CMD  and  ENTRYPOINT


命令設置在容器啓動時執行命令


ENTRYPOINT,表示鏡像在初始化時須要執行的命令,不可被重寫覆蓋,需謹記

CMD,表示鏡像運行默認參數,可被重寫覆蓋

ENTRYPOINT/CMD都只能在文件中存在一次,而且最後一個生效 多個存在,只有最後一個生效,其它無效!

須要初始化運行多個命令,彼此之間可使用 && 隔開,但最後一個需要爲無限運行的命令,需切記!


ENTRYPOINT/CMD,通常二者能夠配合使用,好比:

ENTRYPOINT ["/usr/sbin/sshd"]

CMD ["-D"]


** 在Docker daemon模式下,不管你是使用ENTRYPOINT,仍是CMD,最後的命令,必定要是當前進程須要一直運行的,纔可以防容器退出。***


如下無效方式:

ENTRYPOINT service tomcat7 start #運行幾秒鐘以後,容器就會退出

CMD service tomcat7 start #運行幾秒鐘以後,容器就會退出


這樣有效:

ENTRYPOINT service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out

# 或者

CMD service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out

這樣也有效:

ENTRYPOINT ["/usr/sbin/sshd"]

CMD ["-D"]



USER 命令

好比指定 memcached 的運行用戶,可使用上面的 ENTRYPOINT or CMD來實現:

ENTRYPOINT ["memcached", "-u", "daemon"]

更好的方式:

ENTRYPOINT ["memcached"]

USER daemon


EXPOSE 命令


EXPOSE 命令能夠設置一個端口在運行的鏡像中暴露在外

在docker使用--link來連接兩容器時會用到相關端口

EXPOSEd <port>


ENV命令:

用於設置環境變動

使用此dockerfile生成的image新建container,能夠經過 docker inspect CONTAINER ID  看到這個環境變量

也能夠經過在docker run時設置或修改環境變量


ADD 命令:

從src複製文件到container的dest路徑:

ADD <src> <dest>


<src> 是相對被構建的源目錄的相對路徑,能夠是文件或目錄的路徑,也能夠是一個遠程的文件url

<dest> 是container中的絕對路徑


VOLUME 命令

VOLUME ["<mountpoint>"]

如:

VOLUME ["/data"]

建立一個掛載點用於共享目錄


WORKDIR 命令

WORKDIR /path/to/workdir

配置RUN, CMD, ENTRYPOINT 命令設置當前工做路徑

能夠設置屢次,若是是相對路徑,則相對前一個 WORKDIR 命令

好比:

WORKDIR /a WORKDIR b WORKDIR c RUN pwd

實際上是在 /a/b/c 下執行 pwd


Dockerfile文件到此介紹完畢。

下面是一個完整的Dockerfile文件

#Dockerfile
FROM centos6-base
MAINTAINER zhou_mfk <zhou_mfk@163.com>
RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g' /etc/pam.d/sshd
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
EXPOSE 22
RUN echo 'root:redhat' | chpasswd
RUN yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
RUN yum install tar gzip gcc vim wget -y
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
CMD /usr/sbin/sshd -D
#End
相關文章
相關標籤/搜索