Docker的Dockerfile指令

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指令用來在從鏡像創(chuàng)建一個新容器時,在容器內部設置一個工作目錄,ENTRYPOINT或者CMD指定的程序會在這個目錄下執(zhí)行.
    如 使用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指令用來在鏡像構建過程中設置環(huán)境變量.
  • 在Dockerfile文件中設置環(huán)境變量
ENV RVM_PATH /home/rvm/
  • 為RUN指令設置前綴
 RUN gem install unicorn 
  • 添加ENV 前綴后執(zhí)行
RVM_PATH=/home/rvm/ gem install unicorn
  • 在其他Dockerfile指令中使用環(huán)境變量
ENV TARGET_DIR /opt/app
WORKDIR $TARGET_DIR

在這里我們設定了一個新的環(huán)境變量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指令用來向基于鏡像創(chuàng)建的容器添加卷.
  • 使用VOLUME指令
VOLUME ["/opt/project"]

這個指令會為基于此鏡像創(chuàng)建的任何容器創(chuàng)建一個名為 /opt/project 的掛載點.

  • 使用VOLUME指令指定多個卷
VOLUME ["/opt/project", "/data" ]
  • (7)ADD
    ADD指令用來將構建環(huán)境下的文件和目錄復制到鏡像中.
    如:
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 指令能為鏡像添加觸發(fā)器.當一個鏡像被用做其他鏡像的基礎鏡像時,該鏡像中的觸發(fā)器將會被執(zhí)行.
  • 添加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 "hikay5230@gmail.com"
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指令, 該指令將構建環(huán)境所在的目錄下的內容全部添加到鏡像中的/var/www/目錄小.我們將這個Dockerfile 作為一個通用的Web應用程序的模板,可以基于這個模板來構建Web應用程序.

  • 構建webapp的Dockerfile
FROM hiekay/apache2
MAINTAINER hiekay "hikay5230@gmail.com"
ENV APPLICATION_NAME webapp
ENV ENVIRONMENT development
  • 構建webapp鏡像
sudo docker build -t="hiekay/webapp" .

這個構建過程就會基于hiekay/apache2鏡像,就會執(zhí)行ADD指令. 因為ADD 指令就是在ONBUILD 觸發(fā)器中指定的.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、Docker創(chuàng)建鏡像的方式有兩種: 一種通過commit的方式:把做了一系列操作的容器關閉,然后利用docke...
    jie0112閱讀 3,853評論 0 3
  • 轉載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,531評論 0 120
  • 雄稚雄雉于飛,泄泄其羽。我之懷矣,自詒伊阻。雄雉于飛,下上其音。展矣君子,實勞我心。瞻彼日月,悠悠我思。道之云遠,...
    微憧閱讀 191評論 0 1
  • 01 阿青離開了木木,她就像仙鶴一般輕輕地飛去,直到消失在遙遠的天際。 也許木木當初就不該認識阿青,縱使相逢應不識...
    長風18閱讀 359評論 0 3
  • 小皇帝登基第三天,就想體察民情,便帶隨叢張三微服私訪。來到熙熙攘攘的大街上,小皇帝東觀西望,看什么都覺得有意思,十...
    沐玉聲聲閱讀 822評論 0 3