Dockerfile文件詳解
#指定操作系統 FROM scratch #制作base image 基礎鏡像,盡量使用官方的image作為base image FROM centos #使用base image FROM ubuntu:14.04 #帶有tag的base image #定義dockerfile一些參數信息的指令 LABEL version=“1.0” #容器元信息,幫助信息,Metadata,類似於代碼注釋 LABEL maintainer=“yc_uuu@163.com" #對於復雜的RUN命令,避免無用的分層,多條命令用反斜線換行,合成一條命令! RUN yum update && yum install -y vim \ Python-dev #反斜線換行 RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME” #指定進入容器后的默認路徑 WORKDIR /root #相當於linux的cd命令,改變目錄,盡量使用絕對路徑!!!不要用RUN cd WORKDIR /test #如果沒有就自動創建 WORKDIR demo #再進入demo文件夾 RUN pwd #打印結果應該是/test/demo ADD and COPY ADD 本地的資料 容器內的存放路徑 #ADD除了有添加的作用,還有解壓縮的作用 ADD hello.txt / #把本地文件添加到鏡像中,吧本地的hello可執行文件拷貝到鏡像的/目錄 ADD test.tar.gz / #添加到根目錄並解壓,自動的解壓test.tar.gz 解壓為test WORKDIR /root ADD hello test/ #進入/root/ 添加hello可執行命令到test目錄下,也就是/root/test/hello 一個絕對路徑 COPY hello test/ #等同於上述ADD效果 ADD與COPY - 優先使用COPY命令 -ADD除了COPY功能還有解壓功能 添加遠程文件/目錄使用curl或wget ENV #環境變量,盡可能使用ENV增加可維護性 ENV MYSQL_VERSION 5.6 #設置一個mysql常量 RUN yum install -y mysql-server=“${MYSQL_VERSION}” ------這里需要稍微理解一下了-------中級知識---先不講 VOLUME and EXPOSE 存儲和網絡 RUN and CMD and ENTRYPOINT RUN:執行命令並創建新的Image Layer CMD:設置容器啟動后默認執行的命令和參數 ENTRYPOINT:設置容器啟動時運行的命令 Shell格式和Exec格式 RUN yum install -y vim CMD echo ”hello docker” ENTRYPOINT echo “hello docker” Exec格式 RUN [“apt-get”,”install”,”-y”,”vim”] CMD [“/bin/echo”,”hello docker”] ENTRYPOINT [“/bin/echo”,”hello docker”] 通過shell格式去運行命令,會讀取$name指令,而exec格式是僅僅的執行一個命令,而不是shell指令 cat Dockerfile FROM centos ENV name Docker ENTRYPOINT [“/bin/echo”,”hello $name”]#這個僅僅是執行echo命令,讀取不了shell變量 ENTRYPOINT [“/bin/bash”,”-c”,”echo hello $name"] CMD 容器啟動時默認執行的命令 如果docker run指定了其他命令(docker run -it [image] /bin/bash ),CMD命令被忽略 如果定義多個CMD,只有最后一個執行 ENTRYPOINT 讓容器以應用程序或服務形式運行 不會被忽略,一定會執行 最佳實踐:寫一個shell腳本作為entrypoint COPY docker-entrypoint.sh /usr/local/bin ENTRYPOINT [“docker-entrypoint.sh] EXPOSE 27017 CMD [“mongod”] [root@master home]# more Dockerfile FROm centos ENV name Docker #CMD ["/bin/bash","-c","echo hello $name"] ENTRYPOINT ["/bin/bash","-c","echo hello $name”]
dockerfile定制python flask-web程序實例
(/opt/dockerfile/)

