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/)