1. 程式人生 > >docker建立本地映象(二)及Dockerfile的語法

docker建立本地映象(二)及Dockerfile的語法

  1. docker export 容器名 > my_container.tar,我們將容器本地化為映象,用cat my_container.tar | sudo docker import - imported:container命令匯入映象。這也是一種建立本地映象的方式。
  2. 使用commit命令建立本地映象。
    我們先執行一個容器
    docker run -ti --name=test_commit ubuntu /bin/bash//進入終端後update一下
    apt-get update
    apt-get install sqlite3
    exit//退出容器
    docker ps -a//檢視方才建立的容器
    docker commit -m="Message" --author="TONY" 容器ID tonyxinminghui/sqlite3:v1

    docker images//檢視一下
    docker run -ti --name="new_commit" tonyxinminghui/sqlite3:v1 /bin/bash//測試本地映象。
  3. 使用Dockerfile建立映象:Dockerfile語法
    PS:在當前目錄下touch個Dockerfile檔案將具體內容寫入
    1. FROM:指定父映象,可以通過新增多個FROM,在同一個Dockerfile中建立多個映象
    2. MAINTAINER:維護者資訊,可選
    3. RUN:用來修改映象的命令,可以用來安裝程式,當一條RUN完成後,會在當前的映象上建立一個新的映象層,接下來的指令會在新的映象層上執行。有2種形式。
      1. RUN [“apt-get”, “update”],呼叫exec
      2. RUN apt-get update,呼叫的/bin/sh
    4. EXPOSE:用來指明容器內程序對外開放的埠。在docker run的時候可以加-p(可以將EXPOSE中沒列出的埠設定為對外開放)和-P(EXPOSE裡所指定的埠對映到主機上另外的隨機埠???)來設定埠。
    5. ADD:向新容器中新增檔案,檔案可以是
      1. 主機檔案:必須是相對Dockerfile所在目錄的相對路徑(如果是壓縮檔案,docker會解壓縮)
      2. 網路檔案:URL檔案,在建立容器時會下載下來新增到映象中。(如果是壓縮檔案,docker不會解壓縮)
      3. 目錄:必須是相對Dockerfile所在目錄的相對路徑(如果是壓縮檔案,docker會解壓縮)
    6. VOLUME:會在映象裡建立一個指定路徑的掛載點。這個路徑可以來自主機,也可以來自其他容器,多個容器通過同一個掛載點來共享資料,即便有個容器已經停止,其餘容器還是可以訪問掛載點,只有當掛載點所有的容器引用消失,掛載點才會自動刪除。
    7. WORKDIR:為接下來的指令指定一個新的工作目錄。當啟動一個容器後,最後一條WORKDIR指令所指向的目錄為容器當前執行的工作目錄。
    8. ENV:設定環境變數,在docker run 時可以用-e來設定環境變數docker run -e WEBAPP_PORT=8000 -e WEBAPP_HOST=www.example.com
    9. CMD:設定容器執行時預設執行的命令,CMD引數格式與RUN類似。CMD ls -l -aCMD ["ls", "-l", "-a"]
    10. ENTRYPOIN:與CMD類似,指定容器執行時預設命令。ENTRYPOINT和CMD的區別,在於執行容器時,映象後的命令引數,ENTRYPOINT是拼接,CMD是覆蓋
    11. USER:為容器的執行和RUN CMD ENTRYPOINT等指令的執行 指定使用者或者UID
    12. ONBUILD:觸發器指令,父映象中不會執行,只有在子映象中才會執行。
      給一個例子

#Verson 1.0.1
#父映象
FROM ubuntu:latest

#維護者資訊
MAINTAINER Tony "[email protected]"

#設定root使用者為後續命令的執行者
USER root

#執行操作
RUN apt-get update
RUN apt-get install -y nginx

#使用&&拼接命令
RUN touch test.txt && echo "abc" >> abc.txt

#對外暴露埠
EXPOSE 80 8080 1038

#新增檔案
ADD abc.txt /opt/

#新增資料夾
ADD /webapp /opt/webapp

#新增網路檔案
ADD https://www.baidu.com/img/bd_logo1.png /opt/

#設定環境變數
ENV WEBAPP_PORT=9090

#設定工作目錄
WORKDIR /opt/

#設定啟動命令
ENTRYPOINT ["ls"]

#設定啟動引數
CMD ["-a", "-l"]

#設定卷
VOLUME ["/data", "/var/www"]

#設定子映象的觸發操作
ONBUILD ADD ./app/src
ONBUILD RUN echo "on build excuted" >> onbuild.txt