1. 程式人生 > >Docker-Dockerfile語法以及一些命令/關鍵字的區別淺析

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