docker建立本地映象(二)及Dockerfile的語法
阿新 • • 發佈:2019-02-19
docker export 容器名 > my_container.tar
,我們將容器本地化為映象,用cat my_container.tar | sudo docker import - imported:container
命令匯入映象。這也是一種建立本地映象的方式。- 使用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
//測試本地映象。 - 使用Dockerfile建立映象:Dockerfile語法
PS:在當前目錄下touch個Dockerfile檔案將具體內容寫入
- FROM:指定父映象,可以通過新增多個FROM,在同一個Dockerfile中建立多個映象
- MAINTAINER:維護者資訊,可選
- RUN:用來修改映象的命令,可以用來安裝程式,當一條RUN完成後,會在當前的映象上建立一個新的映象層,接下來的指令會在新的映象層上執行。有2種形式。
- RUN [“apt-get”, “update”],呼叫exec
- RUN apt-get update,呼叫的/bin/sh
- EXPOSE:用來指明容器內程序對外開放的埠。在docker run的時候可以加-p(可以將EXPOSE中沒列出的埠設定為對外開放)和-P(EXPOSE裡所指定的埠對映到主機上另外的隨機埠???)來設定埠。
- ADD:向新容器中新增檔案,檔案可以是
- 主機檔案:必須是相對Dockerfile所在目錄的相對路徑(如果是壓縮檔案,docker會解壓縮)
- 網路檔案:URL檔案,在建立容器時會下載下來新增到映象中。(如果是壓縮檔案,docker不會解壓縮)
- 目錄:必須是相對Dockerfile所在目錄的相對路徑(如果是壓縮檔案,docker會解壓縮)
- VOLUME:會在映象裡建立一個指定路徑的掛載點。這個路徑可以來自主機,也可以來自其他容器,多個容器通過同一個掛載點來共享資料,即便有個容器已經停止,其餘容器還是可以訪問掛載點,只有當掛載點所有的容器引用消失,掛載點才會自動刪除。
- WORKDIR:為接下來的指令指定一個新的工作目錄。當啟動一個容器後,最後一條WORKDIR指令所指向的目錄為容器當前執行的工作目錄。
- ENV:設定環境變數,在docker run 時可以用-e來設定環境變數
docker run -e WEBAPP_PORT=8000 -e WEBAPP_HOST=www.example.com
- CMD:設定容器執行時預設執行的命令,CMD引數格式與RUN類似。
CMD ls -l -a
或CMD ["ls", "-l", "-a"]
- ENTRYPOIN:與CMD類似,指定容器執行時預設命令。ENTRYPOINT和CMD的區別,在於執行容器時,映象後的命令引數,ENTRYPOINT是拼接,CMD是覆蓋
- USER:為容器的執行和RUN CMD ENTRYPOINT等指令的執行 指定使用者或者UID
- 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