DockerFile介绍
DockerFile就是用来构建docker镜像的构建文件!命令脚本!
通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层
#创建每一个DockerFile文件,名字可以随机,建议使用dockerfile#文件中的内容 指令(大写) 参数FROM centosVOLUME ["volume01","volume02"] #匿名挂载CMD echo "----end----"CMD bin/bash#这里的每个命令就是一层

启动自己的镜像
[root@vultr docker-test-volume]# docker run -it 540c9590aa43 bin/bash

这个卷一定在外面有一个同步的目录,匿名挂载

这种方式使用非常多,因为通常都是会构建自己的镜像!
假设构建镜像的时候没有挂在卷,就要手动挂载 -v 卷名:容器内路径
DockerFile构建过程
基础知识:
每个保留关键字(指令)都是必须是大写字母
执行从上到下顺序执行
#表示注释
每个指令都会创建提交一个新的镜像层,并提交。

DockerFile是面向开发的,我们以后要发布项目,做镜像,就需要编写DockerFile文件,这个文件十分简单!
Docker镜像逐渐成为企业交付的标准。
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品!
Docker容器:容器就是镜像运行起来提供服务器
DockerFile的指令

FROM #基础镜像,一切从这里开始构建 centosMAINTAINER #镜像是谁写的,姓名+邮箱RUN #镜像构建的时候需要运行的命令ADD #步骤:Tomcat镜像,这个Tomcat的压缩包就是要添加的内容WORKDIR #镜像的工作目录VOLUME #挂载的目录EXPOSE #暴露端口配置CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可以被替代ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以直接追加命令ONBUILD #当构建一个被继承的DockerFile,这个时候就会运行ONBUILD的指令,触发指令。COPY #类似ADD,将我们的文件拷贝到镜像中ENV #构建的时候设置环境变量
实战测试
DockerHub中大多数的镜像都是从这里的基础镜像开始的,然后配置自己需要的软件和配置来进行构建。

创建centos
构建自己的centos
#1. 编写DockerFile的文件FROM centosMAINTAINER zhangxi<antonyzhangdc@qq.com>ENV MYPATH usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80CMD echo "--------end--------"CMD /bin/bash#2. 通过这个文件构建镜像#命令# -f 文件路径 -t 目标文件名(生成的镜像名) :[tag][root@vultr dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 .#3. 测试运行
对比之前的centos

增加之后的镜像

可以列出本地镜像的变更历史
docker history 镜像id

CMD和ENTRYPOINT的区别
测试cmd
#编写DockerFile文件FROM centosCMD ["ls","-a"]#构建[root@vultr dockerfile]# docker build -f dockerfile-cmd-test -t cmdtest .#执行,ls -a命令生效[root@vultr dockerfile]# docker run 4f2dad10745d....dockerenvbindevetchomeliblib64lost+foundmediamntoptprocrootrunsbinsrvsystmpusrvar#想追加一个命令 -l ls -al[root@vultr dockerfile]# docker run 4f2dad10745d -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.#用cmd的情况下,-l替换了cmd ["ls","-a"]命令,-l 不是命令,所以报错#正确的表达方式[root@vultr dockerfile]# docker run 4f2dad10745d ls -altotal 56drwxr-xr-x 1 root root 4096 Jul 23 15:13 .drwxr-xr-x 1 root root 4096 Jul 23 15:13 ..-rwxr-xr-x 1 root root 0 Jul 23 15:13 .dockerenvlrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bindrwxr-xr-x 5 root root 340 Jul 23 15:13 devdrwxr-xr-x 1 root root 4096 Jul 23 15:13 etcdrwxr-xr-x 2 root root 4096 May 11 2019 homelrwxrwxrwx 1 root root 7 May 11 2019 lib -> usr/liblrwxrwxrwx 1 root root 9 May 11 2019 lib64 -> usr/lib64drwx------ 2 root root 4096 Jun 11 02:35 lost+founddrwxr-xr-x 2 root root 4096 May 11 2019 mediadrwxr-xr-x 2 root root 4096 May 11 2019 mntdrwxr-xr-x 2 root root 4096 May 11 2019 optdr-xr-xr-x 111 root root 0 Jul 23 15:13 procdr-xr-x--- 2 root root 4096 Jun 11 02:35 rootdrwxr-xr-x 11 root root 4096 Jun 11 02:35 runlrwxrwxrwx 1 root root 8 May 11 2019 sbin -> usr/sbindrwxr-xr-x 2 root root 4096 May 11 2019 srvdr-xr-xr-x 13 root root 0 Jul 21 07:12 sysdrwxrwxrwt 7 root root 4096 Jun 11 02:35 tmpdrwxr-xr-x 12 root root 4096 Jun 11 02:35 usrdrwxr-xr-x 20 root root 4096 Jun 11 02:35 var
测试ENTRYPOINT
[root@vultr dockerfile]# vim dockerfile-entrypoint-test[root@vultr dockerfile]# docker build -f dockerfile-entrypoint-test -t entorypoint-test .Sending build context to Docker daemon 4.096kBStep 1/2 : FROM centos---> 831691599b88Step 2/2 : ENTRYPOINT ["ls","-a"]---> Running in 7909c89f31c0Removing intermediate container 7909c89f31c0---> 3a81aa449fb5Successfully built 3a81aa449fb5Successfully tagged entorypoint-test:latest[root@vultr dockerfile]# docker run 3a81aa449fb5....dockerenvbindevetchomeliblib64lost+foundmediamntoptprocrootrunsbinsrvsystmpusrvar#命令行追加命令,可以直接拼接[root@vultr dockerfile]# docker run 3a81aa449fb5 -ltotal 56drwxr-xr-x 1 root root 4096 Jul 23 15:15 .drwxr-xr-x 1 root root 4096 Jul 23 15:15 ..-rwxr-xr-x 1 root root 0 Jul 23 15:15 .dockerenvlrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bindrwxr-xr-x 5 root root 340 Jul 23 15:15 devdrwxr-xr-x 1 root root 4096 Jul 23 15:15 etcdrwxr-xr-x 2 root root 4096 May 11 2019 homelrwxrwxrwx 1 root root 7 May 11 2019 lib -> usr/liblrwxrwxrwx 1 root root 9 May 11 2019 lib64 -> usr/lib64drwx------ 2 root root 4096 Jun 11 02:35 lost+founddrwxr-xr-x 2 root root 4096 May 11 2019 mediadrwxr-xr-x 2 root root 4096 May 11 2019 mntdrwxr-xr-x 2 root root 4096 May 11 2019 optdr-xr-xr-x 115 root root 0 Jul 23 15:15 procdr-xr-x--- 2 root root 4096 Jun 11 02:35 rootdrwxr-xr-x 11 root root 4096 Jun 11 02:35 runlrwxrwxrwx 1 root root 8 May 11 2019 sbin -> usr/sbindrwxr-xr-x 2 root root 4096 May 11 2019 srvdr-xr-xr-x 13 root root 0 Jul 21 07:12 sysdrwxrwxrwt 7 root root 4096 Jun 11 02:35 tmpdrwxr-xr-x 12 root root 4096 Jun 11 02:35 usrdrwxr-xr-x 20 root root 4096 Jun 11 02:35 var
实战:Tomcat镜像
准备镜像文件 Tomcat 压缩包,jdk的压缩包

编写DockerFile文件,官方命名dockerfile,build会自动寻找这个文件,就不需要-f指定了
FROM centosMAINTAINER zhangxi<antonyzhangdc@qq.com>COPY readme.txt usr/lcoal/readme.txtADD jdk-14.0.2_linux-x64_bin.tar.gz usr/local/ADD apache-tomcat-9.0.37.tar.gz usr/local/RUN yum -y install vimENV MYPATH usr/localWORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk-14.0.2ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.37ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.37ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-9.0.37/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.37/bin/logs/catalina.out
构建镜像
[root@vultr tomcat]# docker build -t diytomcat .
启动镜像
[root@vultr tomcat]# docker run -d -p 9090:8080 --name zhangxitomcat -v /home/zhangxi/build/tomcat/test:/usr/local/apache-tomcat-9.0.37/webapps/test -v /home/zhangxi/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.37/logs diytomcat
访问测试
发布项目(由于做了卷挂载,可以在本地编写项目就可以发布了)
发布镜像
Docker Hub
# 1. 登录自己のDocker Hub[root@vultr tomcat]# docker login -u jiangbeiyugongPassword:WARNING! Your password will be stored unencrypted in /root/.docker/config.json.Configure a credential helper to remove this warning. Seehttps://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded[root@vultr tomcat]## 2.docker push jiangbeiyugong/jiangbeiyugong:tagname#需要在自己的docker hub上有一个对应的repository jiangbeiyugong[root@vultr tomcat]# docker tag diytomcat jiangbeiyugong/diytomcat[root@vultr tomcat]# docker push jiangbeiyugong/diytomcatThe push refers to repository [docker.io/library/diytomcat]2c801e38d468: Preparingaea02f3fa3de: Preparingaacb617884f1: Preparing796d9b2e50fd: Preparingeb29745b8228: Preparing

文章转载自爱德华的奇妙生活,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




