dockerfile 讲解 附Demo

DockerFile

dockerfile 时用来构建docker 镜像的文件,命令参数脚本

构建步骤:

  • 编写dockerfile文件
  • docker build构建成镜像
  • docker run
  • docker push 发布镜像
    • docker hub
    • 阿里云仓库

官方发布镜像也是以dockerfile的形式发布

点入 dockerhub官方发布的任意一个版本链接,会到github上

dockerfile 讲解 附Demo_第1张图片

可以看到发布是以dockerfile的形式在github发布的

dockerfile构建过程

  • 每个保留关键字(指令)都必须是大写字母
  • 指令从上到下顺序执行
  • “#”表示注释
  • 每个指定都会创建提交一个新的镜像层,并提交

以后要发布项目,就需要编写dockerfile文件爱你,已经逐渐成为企业交付的一个标准

dockerfile好比一个构建步骤

dockerimage 通过dockerfile构建生成的镜像,最终发布和运行的产品

dockerfile指令

dockerfile 讲解 附Demo_第2张图片

from				#基础镜像
maintainer	#作者
run					#构建时运行的命令
add					#需要的文件,添加到镜像,想层级关系一样,在基础上叠加层
workdir			#如/bin/bash,进入到工作目录
volume 			#挂载卷
export			#暴露端口
cmd					#指定这个容器启动时要运行的命令,只有最后一个会生效,可被替代
entrypoint	#指定这个容器启动时要运行的命令,可以追加命令
onbuild			#构建一个被继承的dockerfile,这个指令就会运行,作为一个触发指令
copy				#类似add,将文件拷贝到镜像中
env					#构建时设置环境变量

实践centos build

分析

dockerfile 讲解 附Demo_第3张图片

dockerhub中99%镜像是从这个基础镜像过来的 FROM scratch,然后配置需要的软件和配置进行的构建

比如ADD添加一个压缩包

官方的centos连vim和ifconfig都没有,自行添加这些功能

  • 编写dockerfile

  • #编写dockerfile 文件,在创建镜像时去下载vim和net-tools
    [root@localhost dockerfile]# cat mydockerfile 
    FROM centos
    
    MAINTAINER haoyun<[email protected]>
    
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    #设置工作目录
    
    RUN yum -y install vim
    RUN yum -y install net-tools
    #安装vim和net-tools
    
    EXPOSE 80
    #开放端口
    
    CMD echo $MYPATH
    #输出工作目录
    CMD echo "---end---"
    CMD /bin/bash 
    #进入/bin/bash目录
    
  • #构建镜像
    [root@localhost dockerfile]# docker build -f mydockerfile -t mycentos:1.0 .
    #构建image ,不要漏掉结尾有个点
    Successfully built b814a074fd27
    Successfully tagged mycentos:1.0
    #提示成功
    
  • [root@localhost dockerfile]# docker run -it mycentos:1.0 /bin/bash
    [root@72e699904ab5 local]# pwd 
    /usr/local
    [root@72e699904ab5 local]# 
    #启动执行时直接到了/usr/local目录
    #这是通过dockerfile设置的,ENV MYPATH
    #vim和ifconfig也可以使用了
    
    

docker history

  • [root@localhost dockerfile]# docker history b814a074fd27
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    b814a074fd27        11 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B                  
    cfa4dab22678        11 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B                  
    410420935d75        11 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B                  
    ac2238a9737e        11 minutes ago      /bin/sh -c #(nop)  EXPOSE 80                    0B                  
    fbb407fde458        11 minutes ago      /bin/sh -c yum -y install net-tools             23.1MB              
    f9e7124626fb        11 minutes ago      /bin/sh -c yum -y install vim                   57.7MB              
    05ed0d25e30e        11 minutes ago      /bin/sh -c #(nop) WORKDIR /usr/local            0B                  
    57ac936ac849        11 minutes ago      /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B                  
    d017ef3d8d9e        11 minutes ago      /bin/sh -c #(nop)  MAINTAINER haoyun<7409331…   0B                  
    0d120b6ccaa8        4 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
    <missing>           4 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
    <missing>           4 months ago        /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d…   215MB               
    [root@localhost dockerfile]# 
    
  • history(历史)

  • 可以得知镜像是如何制作出来的,从低向上

  • 使用这个命令就可以揣摩其他镜像是如何制作的

  • 可以做一个dockerfile来模仿官方的镜像

实践Tomcat image

  • 准备tomcat压缩包

  • 编写dockerfile文件,官方命名Dockerfile,build会自动寻找这个文件,不需要-f指定

  • ADD命令会自动解压

  • FROM centos
    MAINTAINER haoyun<[email protected]>
    
    
    ADD jdk-8u271-linux-x64.tar /usr/local
    ADD apache-tomcat-7.0.107.tar /usr/local
    
    RUN yum -y install vim
    
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    
    ENV JAVA_HOME /usr/local/jdk1.8.0.0_11
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.107
    ENV CATALINA_BASH /usr/local/apache-tomcat-7.0.107
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    
    EXPOSE 8080
    
    CMD /usr/local/apache-tomcat-7.0.107/bin/startup.sh && tail -F /usr/local/apache-tomcat-7.0.107/logs/catalina.out
    
  • docker build -t haoyuncentos:1.0 .
    
    Successfully built 449e85c62b91
    Successfully tagged haoyuncentos:1.0
    
  • docker run -d -p 9090:8080 --name haoyuncentos01 -v /home/dockerfile/tomcat/test:/usl/local/apache-tomcat-7.0.107/webapps/test -v /home/dockerfile/tomcat/tomcatlogs:/usr/local/apache-tomcat-7.0.107/logs haoyuncentos:1.0
    
  • [root@localhost tomcat]# docker exec -it d7c23048c6c7 /bin/bash
    [root@d7c23048c6c7 local]# ls
    apache-tomcat-7.0.107  bin  etc  games	include  jdk1.8.0_271  lib  lib64  libexec  sbin  share  src
    [root@d7c23048c6c7 local]#   
    
    

小结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PcepN89Z-1607599054953)(…/…/…/Library/Application Support/typora-user-images/image-20201210191453773.png)]

Push 镜像

docker hub

  • 发布到docker hub

  • 先去docker hub创建账号,然后使用docker push发布

  • [root@localhost tomcat]# docker login --help
    
    Usage:	docker login [OPTIONS] [SERVER]
    
    Log in to a Docker registry.
    If no server is specified, the default is defined by the daemon.
    
    Options:
      -p, --password string   Password
          --password-stdin    Take the password from stdin
      -u, --username string   Username
    [root@localhost tomcat]# 
    
  • [root@localhost dockerfile]# docker push haoyun-centos:1.0
    The push refers to repository [docker.io/library/haoyun-centos]
    291f6e44771a: Preparing 
    ^C
    [root@localhost dockerfile]# 自己制作的镜像才能发布,加上版本
    

你可能感兴趣的:(docker,docker,linux)