暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DockerFile

爱德华的奇妙生活 2020-07-25
406

DockerFile介绍

DockerFile就是用来构建docker镜像的构建文件!命令脚本!

通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层

    #创建每一个DockerFile文件,名字可以随机,建议使用dockerfile
    #文件中的内容 指令(大写) 参数
    FROM centos


    VOLUME ["volume01","volume02"] #匿名挂载


    CMD echo "----end----"


    CMD bin/bash


    #这里的每个命令就是一层

    启动自己的镜像

      [root@vultr docker-test-volume]# docker run -it 540c9590aa43 bin/bash

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

      这种方式使用非常多,因为通常都是会构建自己的镜像!

      假设构建镜像的时候没有挂在卷,就要手动挂载 -v 卷名:容器内路径

      DockerFile构建过程

      基础知识:

      1. 每个保留关键字(指令)都是必须是大写字母

      2. 执行从上到下顺序执行

      3. #表示注释

      4. 每个指令都会创建提交一个新的镜像层,并提交。

      DockerFile是面向开发的,我们以后要发布项目,做镜像,就需要编写DockerFile文件,这个文件十分简单!

      Docker镜像逐渐成为企业交付的标准。

      DockerFile:构建文件,定义了一切的步骤,源代码

      DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品!

      Docker容器:容器就是镜像运行起来提供服务器

      DockerFile的指令

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

        实战测试

        DockerHub中大多数的镜像都是从这里的基础镜像开始的,然后配置自己需要的软件和配置来进行构建。

        创建centos

        构建自己的centos

          #1. 编写DockerFile的文件
          FROM centos
          MAINTAINER zhangxi<antonyzhangdc@qq.com>


          ENV MYPATH usr/local
          WORKDIR $MYPATH


          RUN yum -y install vim
          RUN yum -y install net-tools


          EXPOSE 80
          CMD 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 centos


            CMD ["ls","-a"]


            #构建
            [root@vultr dockerfile]# docker build -f dockerfile-cmd-test -t cmdtest .


            #执行,ls -a命令生效
            [root@vultr dockerfile]# docker run 4f2dad10745d
            .
            ..
            .dockerenv
            bin
            dev
            etc
            home
            lib
            lib64
            lost+found
            media
            mnt
            opt
            proc
            root
            run
            sbin
            srv
            sys
            tmp
            usr
            var


            #想追加一个命令 -l ls -al
            [root@vultr dockerfile]# docker run 4f2dad10745d -l
            docker: 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 -al
            total 56
            drwxr-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 .dockerenv
            lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bin
            drwxr-xr-x 5 root root 340 Jul 23 15:13 dev
            drwxr-xr-x 1 root root 4096 Jul 23 15:13 etc
            drwxr-xr-x 2 root root 4096 May 11 2019 home
            lrwxrwxrwx 1 root root 7 May 11 2019 lib -> usr/lib
            lrwxrwxrwx 1 root root 9 May 11 2019 lib64 -> usr/lib64
            drwx------ 2 root root 4096 Jun 11 02:35 lost+found
            drwxr-xr-x 2 root root 4096 May 11 2019 media
            drwxr-xr-x 2 root root 4096 May 11 2019 mnt
            drwxr-xr-x 2 root root 4096 May 11 2019 opt
            dr-xr-xr-x 111 root root 0 Jul 23 15:13 proc
            dr-xr-x--- 2 root root 4096 Jun 11 02:35 root
            drwxr-xr-x 11 root root 4096 Jun 11 02:35 run
            lrwxrwxrwx 1 root root 8 May 11 2019 sbin -> usr/sbin
            drwxr-xr-x 2 root root 4096 May 11 2019 srv
            dr-xr-xr-x 13 root root 0 Jul 21 07:12 sys
            drwxrwxrwt 7 root root 4096 Jun 11 02:35 tmp
            drwxr-xr-x 12 root root 4096 Jun 11 02:35 usr
            drwxr-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.096kB
              Step 1/2 : FROM centos
              ---> 831691599b88
              Step 2/2 : ENTRYPOINT ["ls","-a"]
              ---> Running in 7909c89f31c0
              Removing intermediate container 7909c89f31c0
              ---> 3a81aa449fb5
              Successfully built 3a81aa449fb5
              Successfully tagged entorypoint-test:latest
              [root@vultr dockerfile]# docker run 3a81aa449fb5
              .
              ..
              .dockerenv
              bin
              dev
              etc
              home
              lib
              lib64
              lost+found
              media
              mnt
              opt
              proc
              root
              run
              sbin
              srv
              sys
              tmp
              usr
              var


              #命令行追加命令,可以直接拼接
              [root@vultr dockerfile]# docker run 3a81aa449fb5 -l
              total 56
              drwxr-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 .dockerenv
              lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bin
              drwxr-xr-x 5 root root 340 Jul 23 15:15 dev
              drwxr-xr-x 1 root root 4096 Jul 23 15:15 etc
              drwxr-xr-x 2 root root 4096 May 11 2019 home
              lrwxrwxrwx 1 root root 7 May 11 2019 lib -> usr/lib
              lrwxrwxrwx 1 root root 9 May 11 2019 lib64 -> usr/lib64
              drwx------ 2 root root 4096 Jun 11 02:35 lost+found
              drwxr-xr-x 2 root root 4096 May 11 2019 media
              drwxr-xr-x 2 root root 4096 May 11 2019 mnt
              drwxr-xr-x 2 root root 4096 May 11 2019 opt
              dr-xr-xr-x 115 root root 0 Jul 23 15:15 proc
              dr-xr-x--- 2 root root 4096 Jun 11 02:35 root
              drwxr-xr-x 11 root root 4096 Jun 11 02:35 run
              lrwxrwxrwx 1 root root 8 May 11 2019 sbin -> usr/sbin
              drwxr-xr-x 2 root root 4096 May 11 2019 srv
              dr-xr-xr-x 13 root root 0 Jul 21 07:12 sys
              drwxrwxrwt 7 root root 4096 Jun 11 02:35 tmp
              drwxr-xr-x 12 root root 4096 Jun 11 02:35 usr
              drwxr-xr-x 20 root root 4096 Jun 11 02:35 var

              实战:Tomcat镜像

              1. 准备镜像文件 Tomcat 压缩包,jdk的压缩包

              1. 编写DockerFile文件,官方命名dockerfile,build会自动寻找这个文件,就不需要-f指定了

                FROM centos
                MAINTAINER zhangxi<antonyzhangdc@qq.com>
                COPY readme.txt usr/lcoal/readme.txt


                ADD 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 vim


                ENV MYPATH usr/local


                WORKDIR $MYPATH


                ENV JAVA_HOME /usr/local/jdk-14.0.2
                ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar


                ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.37
                ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.37
                ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin


                EXPOSE 8080


                CMD /usr/local/apache-tomcat-9.0.37/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.37/bin/logs/catalina.out
                1. 构建镜像

                  [root@vultr tomcat]# docker build -t diytomcat .
                  1. 启动镜像

                    [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
                    1. 访问测试

                    1. 发布项目(由于做了卷挂载,可以在本地编写项目就可以发布了)

                    发布镜像

                    Docker Hub

                      # 1. 登录自己のDocker Hub
                      [root@vultr tomcat]# docker login -u jiangbeiyugong
                      Password:
                      WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
                      Configure a credential helper to remove this warning. See
                      https://docs.docker.com/engine/reference/commandline/login/#credentials-store


                      Login 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/diytomcat
                      The push refers to repository [docker.io/library/diytomcat]
                      2c801e38d468: Preparing
                      aea02f3fa3de: Preparing
                      aacb617884f1: Preparing
                      796d9b2e50fd: Preparing
                      eb29745b8228: Preparing
                      文章转载自爱德华的奇妙生活,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                      评论