Docker-Dockerfile語法以及一些命令/關鍵字的區別淺析
阿新 • • 發佈:2019-02-14
一. 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 都可以做。