docker build
建立鏡像時須要Dockerfile
文件. Dockerfile
文件裏裝着一些命令集, build
的過程, 會從上到下依次執行裏面的命令.
整個建立過程是首先從基礎鏡像啓一個容器, 而後執行一條命令, 修改以後提交此容器爲新鏡像. 直到全部命令都執行完. 因此在獲得最終構建的鏡像時, 會生成不少"臨時鏡像". 若是由於某條命令出錯而中斷, 以前建立的"臨時鏡像"還在, 從新build
就會從中斷處繼續, 而不是從頭再來一遍, 很方便.node
FROM <image name>
: 指定構建使用的基礎鏡像redis
例: FROM ubuntu:14.04
docker
MAINTAINER <author name>
: 建立者信息shell
例: MAINTAINER Laowen "qq05629@126.com"
ubuntu
ENV
: 設置環境變量app
例: ENV REFRESHED _AT 2017-03-16
ui
RUN <command>
: 在shell或者exec的環境下執行一條命令.RUN
指令會在新建立的鏡像上添加新的層面,接下來提交的結果能夠用在Dockerfile的下一條指令中code
例: RUN apt-get -yqq update
server
ADD <source> <destination>
: 從當前目錄複製文件到容器, source能夠是URL或者是啓動配置上下文中的一個文件, destination是容器內的路徑. 會自動處理目錄, 壓縮包等狀況get
例: ``
COPY
: 從當前目錄複製文件到容器. 只是單純地複製文件.
VOLUME [ "/data" ]
: 聲明一個數據卷, 可用於掛載, []
裏面是路徑
例: VOLUME [ "/var/lib/redis", "/var/log/redis" ]
USER <uid>
: 鏡像正在運行時設置的一個UID,RUN
命令執行時的用戶
WORKDIR
: 指定RUN
、CMD
與ENTRYPOINT
命令的工做目錄
例: WORKDIR /opt/nodeapp
ONBUILD
: 前綴命令, 放在上面這些命令前面, 表示生成的鏡像再次做爲"基礎鏡像"被用於構建時要執行的命令
ENTRYPOINT
: 配置給容器一個可執行的命令,這意味着在每次使用鏡像建立容器時一個特定的應用程序能夠被設置爲默認程序.同時也意味着該鏡像每次被調用時僅能運行指定的應用.相似於CMD
,Docker
只容許一個ENTRYPOINT
,多個ENTRYPOINT
會只執行最後的ENTRYPOINT
指令
例: ENTRYPOINT [ "nodejs", "server.js" ]
CMD
: 提供了容器默認的執行命令,Dockerfile只容許使用一次CMD指令. 使用多個CMD只有最後一個指令生效
例: CMD [ "/bin/true" ]
EXPOSE <port>
: 指定容器在運行時監聽的端口
例: EXPOSE 3000