您的位置:首页 > 运维架构 > Docker

Docker-Dockerfile语法以及一些命令/关键字的区别浅析

2017-11-15 16:46 423 查看

一. 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 一些关键字的区别

-p 和 expose

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

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

RUN,CMD,ENTRYPOINT

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

ADD COPY

ADD 可以是 URL ,比 COPY 要强大点。COPY 能做的,ADD 都可以做。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker dockerfile