1、DockerFile 介绍
dockerfile 是啥?dockerfile 用来构建 docker 镜像的文件。
具体步骤:
1、编写一个 dockerfile 文件
2、docker build 构造一个镜像
3、docker run 运行镜像
4、docker push 发布镜像
DockerFile 构建过程
1、每个保留关键字都必须是大写字母
2、从上往下顺序执行
3、# 表示注释
4、每一个指令都会新建一个新的镜像层,并提交

DockerFile 指令
FROM #基础镜像MAINTAINER #镜像是谁写的RUN #镜像构建时需要运行的命令ADD #添加基础镜像之外的其他内容WORKDIR #镜像工作目录VOLUME #设置容器卷挂载目录EXPOSE #暴露端口 -p一样CMD #指定容器启动时运行的命令,只有最后一个会生效,可被替代ENTRYPOINT #指定容器启动时运行的命令,可以追加命令ONBUILD #当构建一个呗继承dockerfile时触发 ONBUILDCOPY #类似ADD,将文件拷贝到镜像中ENV #构建时设置环境变量

实战测试
docker 镜像有 99% 都是从 scratch 这个基础镜像构建的。

[root@localhost dockerfile]# vi dockerfile-centosFROM centosMAINTAINER luojie<123@qq.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATHCMD echo "-----end-------"CMD /bin/bash[root@localhost dockerfile]# docker build -f dockerfile-centos -t lj_df_centos .[root@localhost dockerfile]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZElj_df_centos latest 179579582bbb 14 minutes ago 291MB#新生成的centos镜像工作目录在/usr/local 多了vim和ifconfig命令
docker history 镜像 id 查看镜像构建历史

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

CMD 和 ENTRYPOINT 区别
CMD #指定容器启动时运行的命令,只有最后一个会生效,可被替代ENTRYPOINT #指定容器启动时运行的命令,可以追加命令
[root@localhost dockerfile]# vi dockerfile-cmdFROM centosCMD ["ls","-a"][root@localhost dockerfile]# docker build -f dockerfile-cmd -t cmd-test .Sending build context to Docker daemon 3.072kBStep 1/2 : FROM centos---> 300e315adb2fStep 2/2 : CMD ["ls","-a"]...[root@localhost dockerfile]# docker run ea34d5842115....dockerenvbindevetchome[root@localhost dockerfile]# docker run ea34d5842115 -ldocker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.ERRO[0000] error waiting for container: context canceled#输入-l命令提示无法识别,原因是-l不是一个独立命令,会替换["ls","-a"],所以报错。[root@localhost dockerfile]# docker run ea34d5842115 pwd/#输入pwd可以正常运行。CMD是覆盖命令。
[root@localhost dockerfile]# vi dockerfile-entrypointFROM centosENTRYPOINT ["ls","-a"][root@localhost dockerfile]# docker build -f dockerfile-entrypoint -t entrypoint-test .Sending build context to Docker daemon 4.096kBStep 1/2 : FROM centos---> 300e315adb2fStep 2/2 : ENTRYPOINT ["ls","-a"][root@localhost dockerfile]# docker run 4404aae5e7a5....dockerenvbindevetc[root@localhost dockerfile]# docker run 4404aae5e7a5 -ltotal 0drwxr-xr-x. 1 root root 6 Jan 18 16:16 .drwxr-xr-x. 1 root root 6 Jan 18 16:16 ..-rwxr-xr-x. 1 root root 0 Jan 18 16:16 .dockerenvlrwxrwxrwx. 1 root root 7 Nov 3 15:22 bin -> usr/bin#输入-l可以识别,相当于ls -al,ENTRYPOINT是追加命令。
实战:DockerFile 制作 centos+jdk+tomcat 镜像
FROM centosMAINTAINER luojieCOPY readme.txt /usr/local/readme.txtADD apache-tomcat-9.0.43.tar.gz /usr/localADD jdk-8u131-linux-x64.tar.gz /usr/localRUN yum -y install vimENV MYPATH /usr/localWORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_131ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.43ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-9.0.43/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.43/logs/catalina.out
启动 centos+jdk+tomcat
#生成镜像 docker build -t lj_tomcat .#运行容器 docker run -d -p 8080:8080 -v /test/abc:/usr/local/apache-tomcat-9.0.43/webapps/abc 9463c7c88bea
在 abc 目录下新增 a.html,浏览器访问:http://ip:8080/abc/a.html即可看到效果。
小结
DockerFile 指令
FROM #基础镜像MAINTAINER #镜像是谁写的RUN #镜像构建时需要运行的命令ADD #添加基础镜像之外的其他内容WORKDIR #镜像工作目录VOLUME #设置容器卷挂载目录EXPOSE #暴露端口 -p一样CMD #指定容器启动时运行的命令,只有最后一个会生效,可被替代ENTRYPOINT #指定容器启动时运行的命令,可以追加命令ONBUILD #当构建一个呗继承dockerfile时触发 ONBUILDCOPY #类似ADD,将文件拷贝到镜像中ENV #构建时设置环境变量

实战测试
docker 镜像有 99% 都是从 scratch 这个基础镜像构建的。

[root@localhost dockerfile]# vi dockerfile-centosFROM centosMAINTAINER luojie<123@qq.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATHCMD echo "-----end-------"CMD /bin/bash[root@localhost dockerfile]# docker build -f dockerfile-centos -t lj_df_centos .[root@localhost dockerfile]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZElj_df_centos latest 179579582bbb 14 minutes ago 291MB#新生成的centos镜像工作目录在/usr/local 多了vim和ifconfig命令
docker history 镜像 id 查看镜像构建历史

CMD 和 ENTRYPOINT 区别
CMD #指定容器启动时运行的命令,只有最后一个会生效,可被替代ENTRYPOINT #指定容器启动时运行的命令,可以追加命令
[root@localhost dockerfile]# vi dockerfile-cmdFROM centosCMD ["ls","-a"][root@localhost dockerfile]# docker build -f dockerfile-cmd -t cmd-test .Sending build context to Docker daemon 3.072kBStep 1/2 : FROM centos---> 300e315adb2fStep 2/2 : CMD ["ls","-a"]...[root@localhost dockerfile]# docker run ea34d5842115....dockerenvbindevetchome[root@localhost dockerfile]# docker run ea34d5842115 -ldocker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.ERRO[0000] error waiting for container: context canceled#输入-l命令提示无法识别,原因是-l不是一个独立命令,会替换["ls","-a"],所以报错。[root@localhost dockerfile]# docker run ea34d5842115 pwd/#输入pwd可以正常运行。CMD是覆盖命令。
[root@localhost dockerfile]# vi dockerfile-entrypointFROM centosENTRYPOINT ["ls","-a"][root@localhost dockerfile]# docker build -f dockerfile-entrypoint -t entrypoint-test .Sending build context to Docker daemon 4.096kBStep 1/2 : FROM centos---> 300e315adb2fStep 2/2 : ENTRYPOINT ["ls","-a"][root@localhost dockerfile]# docker run 4404aae5e7a5....dockerenvbindevetc[root@localhost dockerfile]# docker run 4404aae5e7a5 -ltotal 0drwxr-xr-x. 1 root root 6 Jan 18 16:16 .drwxr-xr-x. 1 root root 6 Jan 18 16:16 ..-rwxr-xr-x. 1 root root 0 Jan 18 16:16 .dockerenvlrwxrwxrwx. 1 root root 7 Nov 3 15:22 bin -> usr/bin#输入-l可以识别,相当于ls -al,ENTRYPOINT是追加命令。
实战:DockerFile 制作 centos+jdk+tomcat 镜像
FROM centosMAINTAINER luojieCOPY readme.txt /usr/local/readme.txtADD apache-tomcat-9.0.43.tar.gz /usr/localADD jdk-8u131-linux-x64.tar.gz /usr/localRUN yum -y install vimENV MYPATH /usr/localWORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_131ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.43ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-9.0.43/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.43/logs/catalina.out
启动 centos+jdk+tomcat
#生成镜像 docker build -t lj_tomcat .#运行容器 docker run -d -p 8080:8080 -v /test/abc:/usr/local/apache-tomcat-9.0.43/webapps/abc 9463c7c88bea
在 abc 目录下新增 a.html,浏览器访问:http://ip:8080/abc/a.html即可看到效果。
小结
