Docker:Dockerfile语法 以及 一些关键字的区别

一. Dockerfile 语法

二. Dockerfile 一些关键字的区别

 

一. Dockerfile 语法

如下为 安装 Kong 的Dockerfile:

FROM ubuntu

ADD jdk-8u51-linux-x64.tar.gz /opt/

ADD dsc-cassandra-2.1.11-bin.tar.gz /opt/

ADD kong-0.5.4.trusty_all.deb /opt/

ENV JAVA_HOME=/opt/jdk1.8.0_51

ENV PATH=$JAVA_HOME/bin:$PATH

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

    dnsmasq-base \

    dnsmasq \

    openssl \

    curl

RUN dpkg -i /opt/kong-0.5.4.trusty_all.deb

EXPOSE 8000

ADD entrypoint.sh /bin/entrypoint.sh

CMD ["/bin/entrypoint.sh"]

FROM ubuntu:FROM 必须在第一行,声明是基于什么镜像构建的。

ADD    : 可以复制文件,也可以复制文件夹。注意: src 目录必须要和 Dockerfile 文件同级或者在下级,不能是 ../xx/xx  这种。

ENV =,或者 ENV :用于设置环境变量。

RUN :可以用于执行命令。

EXPOSE:暴露该容器的指定的端口给别的容器访问(不是暴露给宿主机访问)

CMD:一个Dockerfile 只能有一个 CMD。用于指定容器启动时执行的命令。

====

还有一些等 真正使用的时候再更新....


二. Dockerfile 一些关键字的区别

2.1  -p 和 expose

-p 80:8080 外部80 端口转向 向外暴露是 8080 端口的 Docker 容器。如果只写 -p 80 ,那么当作是 -p 80:80。也就是说,容器之间可以访问该 暴露8080端口的容器,其他用户也可以访问

exposes 80:表示 容器之间可以访问该 暴露80端口的容器,但是其他用户不可以可以访问。这样其实就是做到了 封闭。


2.2 RUN,CMD,ENTRYPOINT

3个都可以执行命令。执行的时机不同,RUN 先于 CMD 和 ENTRYPOINT。CMD 和 ENTRYPOINT 区别在于 docker run 时 参数的传递方式不同。CMD 指定的命令可以被docker run 传递的命令覆盖。而ENTRYPOINT 会把 容器后面的所有内容都当成参数传递给指定的命令,但是不会覆盖。


2.3 ADD COPY

ADD 可以是 URL ,比 COPY 要强大点。COPY 能做的,ADD 都可以做。



 
 

你可能感兴趣的:(Docker)