Docker-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 一些關鍵字的區別

  • -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 都可以做。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章