Dockerfile指令
- (1) CMD
用於指定一個容器啓動時要運行的命令.
類似RUN
- 指定要運行的特定命令
sudo docker run -i -t hiekay/static_web /bin/true
- 使用CMD
CMD ["/bin/true"]
- 給CMD指令傳遞參數
CMD ["/bin/bash", "-l"]
將-l 標誌傳遞給/bin/bash命令.
docker run 命令可以覆蓋CMD命令
- (2) ENTRYPOINT
ENTRYPOINT 和CMD命令類似,但是不容易在啓動的時候被覆蓋.
ENTRYPOINT ["/usr/sbin/nginx"]
指定參數
ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;" ]
- (3) WORKDIR
WORKDIR指令用來在從鏡像創建一個新容器時,在容器內部設置一個工作目錄,ENTRYPOINT或者CMD指定的程序會在這個目錄下執行.
如 使用WORKDIR命令
WORKDIR /opt/webapp/db
RUN bundle install
WORKDIR /opt/webapp
ENTRYPOINT ["rackup"]
我們將目錄切換爲/opt/webapp/db 後運行bundle install , 之後將目錄切換爲/opt/webapp,最後設置ENTRYPOINT指令來啓動rackup命令.
可以通過-w標誌在運行時候覆蓋工作目錄
- 覆蓋工作目錄
sudo docker run -ti -w /var/log ubuntu pwd
該命令會將容器內的工作目錄設置爲/var/log .
- (4) ENV
ENV指令用來在鏡像構建過程中設置環境變量. - 在Dockerfile文件中設置環境變量
ENV RVM_PATH /home/rvm/
- 爲RUN指令設置前綴
RUN gem install unicorn
- 添加ENV 前綴後執行
RVM_PATH=/home/rvm/ gem install unicorn
- 在其他Dockerfile指令中使用環境變量
ENV TARGET_DIR /opt/app
WORKDIR $TARGET_DIR
在這裏我們設定了一個新的環境變量TARGET_DIR, 並在WORKDIR中使用了它的值,因此實際上WORKDIR指令的值會被設置爲/opt/app
- (5) USER
USER 指令用來指定該鏡像會以什麼用戶去運行.
USER nginx
- 指定USER和GROUP的各種組合
USER user
USER user:group
USER uid
USER uid:gid
USER user:gid
USER uid:group
也可以在docker run 命令通過-u選項覆蓋該指令的值.
-
(6) VOLUME
VOLUME指令用來向基於鏡像創建的容器添加捲.- 使用VOLUME指令
VOLUME ["/opt/project"]
這個指令會爲基於此鏡像創建的任何容器創建一個名爲 /opt/project 的掛載點.
- 使用VOLUME指令指定多個卷
VOLUME ["/opt/project", "/data" ]
- (7)ADD
ADD指令用來將構建環境下的文件和目錄複製到鏡像中.
如:
ADD software.lic /opt/application/software.lic
解析:ADD指令將會將構建目錄下的software.lic文件複製到鏡像中的/opt/application/software.lic
- 在ADD指令中使用URL作爲文件源
ADD http://wordpress.org/latest.zip /root/wordpress.zip
- 將歸檔文件作爲ADD指令中的源文件
ADD latest.tar.gz /var/www/wordpress
會自動解壓到目錄下.
- (8)COPY
COPY指令非常類似ADD 不同是COPY只關心在構建上下文中複製本地文件,而不會去做文件提取和解壓. - 使用COPY指令
COPY conf.d /etc/apache2
將 本地 conf.d目錄中的文件複製到/etc/apache2目錄中.
- (9) ONBUILD
ONBUILD 指令能爲鏡像添加觸發器.當一個鏡像被用做其他鏡像的基礎鏡像時,該鏡像中的觸發器將會被執行. - 添加ONBUILD指令
ONBUILD ADD . /app/src
ONBUILD RUN cd /app/src && make
- 通過docker inspect 命令查看鏡像中的ONBUILD命令
sudo docker inspect ID
- 新的ONBUILD鏡像Dockerfile
#Version: 0.0.1
FROM ubuntu:18.04
MAINTAINER hiekay "[email protected]"
RUN apt-get update
RUN apt-get install -y apache2
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apche2
ONBUILD ADD . /var/www/
EXPOSE 80
ENTRYPOINT ["/usr/sbin/apache2"]
CMD ["-D", "FOREGROUND"]
- 構建apche2鏡像
sudo docker build -t="hiekay/apache2" .
解析:在新構建的鏡像中包含一條ONBUILD指令, 該指令將構建環境所在的目錄下的內容全部添加到鏡像中的/var/www/目錄小.我們將這個Dockerfile 作爲一個通用的Web應用程序的模板,可以基於這個模板來構建Web應用程序.
- 構建webapp的Dockerfile
FROM hiekay/apache2
MAINTAINER hiekay "[email protected]"
ENV APPLICATION_NAME webapp
ENV ENVIRONMENT development
- 構建webapp鏡像
sudo docker build -t="hiekay/webapp" .
這個構建過程就會基於hiekay/apache2鏡像,就會執行ADD指令. 因爲ADD 指令就是在ONBUILD 觸發器中指定的.