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

来源:互联网 发布:中建八局四公司知乎 编辑:程序博客网 时间:2024/06/08 00:27

一. Dockerfile 语法

如下为 安装 Kong 的Dockerfile

FROM ubuntuADD 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_51ENV PATH=$JAVA_HOME/bin:$PATHRUN apt-get update && apt-get install -y \    dnsmasq-base \    dnsmasq \    openssl \    curlRUN dpkg -i /opt/kong-0.5.4.trusty_all.debEXPOSE 8000ADD entrypoint.sh /bin/entrypoint.shCMD ["/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 都可以做。