DockerFile解析(CentOS 7)
1. DorkerFile
DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
2. 构建步骤
构建三步骤:
l 编写DockerFile文件
l docker build
l docker run
3. 指令
3.1. 常用指令
- FROM 功能为指定基础镜像,并且必须是第一条指令。如果不以任何镜像为基础,那么写法为:FROM scratch。
- MAINTAINER 说明作者
- RUN 运行指定的命令
- ENV 设置环境变量
- WORKDIR 设置工作目录
- ADD 一个复制命令,把文件复制到镜像中
- COPY 复制指令
- CMD 容器启动时要运行的命令,可以多条,但是只有最后一条起效
- ENTRYPOINT 容器启动时的默认命令,只能写一条
- LABEL 为镜像指定标签
- EXPOSE 记录服务可用的端口,但是并不创建和宿主机之间的映射
- VOLUME 实现挂载功能,将本地文件夹或者其他容器中的文件夹挂在到当前容器中
- ONBUILD 为镜像添加触发器。其参数是任意一个Dockerfile指令。只在被子镜像继承时触发。
3.2. 优化建议
- ADD和VOLUME尽量放在dockerfile底部
- 多个RUN的时候可以通过&& 和\ 集合成一条指令,减少容器层数
- 能用COPY的地方就不要用RUN cp
- dockerfile当前目录最好不要放无关文件
4. 案例
4.1. 自定义镜像
4.1.1. 新建脚本
vi myCentOS.df
FROM centos MAINTAINER gongxr
ENV MYPATH /usr/local WORKDIR $MYPATH
RUN yum -y install vim RUN yum -y install net-tools
EXPOSE 22 80
CMD echo "----success----" CMD ["/bin/bash"] |
4.1.2. 构建
docker build -f ./myCentOS.df -t mycentos:1.1 . |
4.1.3. 运行
docker run -it --name mycentos -P mycentos:1.1 |
4.1.4. 查看历史
docker history 24cfa63644dc #镜像ID |
docker history mycentos:1.1 --no-trunc #完整显示 |
[root@localhost dockerFile]# docker history mycentos:1.1 IMAGE CREATED CREATED BY SIZE COMMENT 1a829f894153 About a minute ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B d270ce700b5e 24 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "ec... 0 B 556fea5422a4 24 minutes ago /bin/sh -c #(nop) EXPOSE 22/tcp 80/tcp 0 B 35cb1da810fe 24 minutes ago /bin/sh -c yum -y install net-tools 22.9 MB 897c2d62f01f 25 minutes ago /bin/sh -c yum -y install vim 57.3 MB b5932f89e3d0 26 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0 B d5437421e4ec 26 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0 B 812bb1aa5cab 26 minutes ago /bin/sh -c #(nop) MAINTAINER gongxr 0 B 0d120b6ccaa8 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B <missing> 2 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.... 0 B <missing> 2 weeks ago /bin/sh -c #(nop) ADD file:538afc0c5c964ce... 215 MB |
4.2. ENTRYPOINT举例
vi dockerFile.ds
FROM centos RUN yum install -y curl ENTRYPOINT [ "curl", "-s", "http://ip.cn" ] |
运行容器
docker run myImages -i |
使用ENTRYPOINT 命令在运行容器时可以追加参数。
ENTRYPOINT为容器启动时的默认命令,只能写一条。
4.3. 自定义tomcat
4.3.1. Dockfile
根据centos镜像生成自定义的tomcat镜像:
FROM centos MAINTAINER gongxr<xxx@163.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下 #COPY test.txt /usr/local/test.txt
#把java与tomcat添加到容器中 ADD jdk-8u212-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-8.5.13.tar.gz /usr/local/
#安装vim编辑器 RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点 ENV MYPATH /usr/local WORKDIR $MYPATH
#配置java与tomcat环境变量 ENV JAVA_HOME /usr/local/jdk1.8.0_212 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.13 ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.13 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口 EXPOSE 8080
#添加执行权限 RUN chmod u+x /usr/local/apache-tomcat-8.5.13/bin/*
#启动时运行tomcat # ENTRYPOINT ["/usr/local/apache-tomcat-8.5.13/bin/startup.sh" ] # CMD ["/usr/local/apache-tomcat-8.5.13/bin/catalina.sh","run"] CMD /usr/local/apache-tomcat-8.5.13/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.13/bin/logs/catalina.out |
4.3.2. 生成镜像
docker build -f myTomcat2.ds -t mytomcat2 . |
4.3.3. 运行
docker run -d -p 9080:8080 --name myTomcatCon \ -v /root/dockerFile/tomcatDir/test:/usr/local/apache-tomcat-8.5.13/webapps/test \ -v /root/dockerFile/tomcatDir/tomcatlogs:/usr/local/apache-tomcat-8.5.13/logs \ --privileged=true mytomcat2 |