zoukankan      html  css  js  c++  java
  • Docker File介绍

    docker file是用来构建dok cer镜像的文件!命令参数脚本!

    构建步骤:

    1、编写一个docker file文件

    2、docker build构建成为一个镜像

    3、docker run运行镜像

    4、docker push发布镜像(Docker Hub、阿里云镜像仓库!)

    Docker Hub搜索镜像centos

    选择1个版本点击后进入Github

    跳转后的路径就是Dockerfile

    FROM scratch
    ADD centos-7-x86_64-docker.tar.xz /
    
    LABEL 
        org.label-schema.schema-version="1.0" 
        org.label-schema.name="CentOS Base Image" 
        org.label-schema.vendor="CentOS" 
        org.label-schema.license="GPLv2" 
        org.label-schema.build-date="20200809" 
        org.opencontainers.image.title="CentOS Base Image" 
        org.opencontainers.image.vendor="CentOS" 
        org.opencontainers.image.licenses="GPL-2.0-only" 
        org.opencontainers.image.created="2020-08-09 00:00:00+01:00"
    
    CMD ["/bin/bash"]
    

    很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!

    官方既然可以制作镜像,那我们也可以!

    Docker File构建过程

    基础知识:

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

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

    3、#表示注释

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

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

    Docker镜像逐渐成为企业交付的标准,必须要掌握!

    步骤:

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

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

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

    开发,部署,运维。。。缺一不可!

    Docker File指令

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

    实战测试

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

    构建自己的镜像

    默认的centos镜像只包含了最基础的东西

    编写dockerfile配置文件

    创建/data目录,再创建dockerfile目录,用来专门存放dockerfile文件。

    编写一个dockerfile文件,命名为dockerfile-centos

    FROM centos
    MAINTAINER lwenwu<lwenwu1999@qq.com>
    
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
     
    RUN yum -y install vim
    RUN yum -y install net-tools
     
    EXPOSE 80
     
    CMD echo $MYPATH
    CMD echo "-------end--------"
    CMD /bin/bash
    

    通过dockerfile文件构建镜像

    docker build -f /data/dockerfile/dockerfile-centos -t mycentos:0.1 .
    
    [root@localhost dockerfile]# docker build -f /data/dockerfile/dockerfile-centos -t mycentos:0.1 .
    Sending build context to Docker daemon  2.048kB		#发送build信息
    Step 1/10 : FROM centos
     ---> 0d120b6ccaa8             #拿到基础镜像,跟docker images下的ID相同,复用基础镜像
    Step 2/10 : MAINTAINER lwenwu<lwenwu1999@qq.com>		#维护者信息
     ---> Running in 26a8e7585dcd
    Removing intermediate container 26a8e7585dcd
     ---> df741b928f75
    Step 3/10 : ENV MYPATH /usr/local
     ---> Running in 7b723400348d
    Removing intermediate container 7b723400348d
     ---> fc0f488845c1
    Step 4/10 : WORKDIR $MYPATH
     ---> Running in 94198e6a23cb
    Removing intermediate container 94198e6a23cb
     ---> df3275a301cf
    Step 5/10 : RUN yum -y install vim		#下载vim
     ---> Running in 48e8afc0df08
    CentOS-8 - AppStream                            605 kB/s | 5.8 MB     00:09    
    CentOS-8 - Base                                 2.2 MB/s | 2.2 MB     00:00    
    CentOS-8 - Extras                                10 kB/s | 8.1 kB     00:00    
    Dependencies resolved.
    ================================================================================
     Package             Arch        Version                   Repository      Size
    ================================================================================
    Installing:
     vim-enhanced        x86_64      2:8.0.1763-13.el8         AppStream      1.4 M
    Installing dependencies:
     gpm-libs            x86_64      1.20.7-15.el8             AppStream       39 k
     vim-common          x86_64      2:8.0.1763-13.el8         AppStream      6.3 M
     vim-filesystem      noarch      2:8.0.1763-13.el8         AppStream       48 k
     which               x86_64      2.21-12.el8               BaseOS          49 k
    
    Transaction Summary
    ================================================================================
    Install  5 Packages
    
    Total download size: 7.8 M
    Installed size: 31 M
    Downloading Packages:
    (1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm         51 kB/s |  39 kB     00:00    
    (2/5): vim-filesystem-8.0.1763-13.el8.noarch.rp 314 kB/s |  48 kB     00:00    
    (3/5): vim-enhanced-8.0.1763-13.el8.x86_64.rpm  1.3 MB/s | 1.4 MB     00:01    
    (4/5): which-2.21-12.el8.x86_64.rpm             314 kB/s |  49 kB     00:00    
    (5/5): vim-common-8.0.1763-13.el8.x86_64.rpm    1.8 MB/s | 6.3 MB     00:03    
    --------------------------------------------------------------------------------
    Total                                           1.7 MB/s | 7.8 MB     00:04  
    #下载警告,没什么问题
    warning: /var/cache/dnf/AppStream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
    CentOS-8 - AppStream                            158 kB/s | 1.6 kB     00:00    
    Importing GPG key 0x8483C65D:
     Userid     : "CentOS (CentOS Official Signing Key) <security@centos.org>"
     Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
     From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
    Key imported successfully
    Running transaction check
    Transaction check succeeded.
    Running transaction test
    Transaction test succeeded.
    Running transaction
      Preparing        :                                                        1/1 
      Installing       : which-2.21-12.el8.x86_64                               1/5 
      Installing       : vim-filesystem-2:8.0.1763-13.el8.noarch                2/5 
      Installing       : vim-common-2:8.0.1763-13.el8.x86_64                    3/5 
      Installing       : gpm-libs-1.20.7-15.el8.x86_64                          4/5 
      Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64                          4/5 
      Installing       : vim-enhanced-2:8.0.1763-13.el8.x86_64                  5/5 
      Running scriptlet: vim-enhanced-2:8.0.1763-13.el8.x86_64                  5/5 
      Running scriptlet: vim-common-2:8.0.1763-13.el8.x86_64                    5/5 
      Verifying        : gpm-libs-1.20.7-15.el8.x86_64                          1/5 
      Verifying        : vim-common-2:8.0.1763-13.el8.x86_64                    2/5 
      Verifying        : vim-enhanced-2:8.0.1763-13.el8.x86_64                  3/5 
      Verifying        : vim-filesystem-2:8.0.1763-13.el8.noarch                4/5 
      Verifying        : which-2.21-12.el8.x86_64                               5/5 
    
    Installed:
      gpm-libs-1.20.7-15.el8.x86_64         vim-common-2:8.0.1763-13.el8.x86_64    
      vim-enhanced-2:8.0.1763-13.el8.x86_64 vim-filesystem-2:8.0.1763-13.el8.noarch
      which-2.21-12.el8.x86_64             
    
    Complete!		#编译成功
    Removing intermediate container 48e8afc0df08
     ---> 3e3387c3a894
    Step 6/10 : RUN yum -y install net-tools		#下载net-tools
     ---> Running in 90f391b8fe89
    Last metadata expiration check: 0:00:12 ago on Thu Nov  5 13:18:48 2020.
    Dependencies resolved.
    ================================================================================
     Package         Architecture Version                        Repository    Size
    ================================================================================
    Installing:
     net-tools       x86_64       2.0-0.51.20160912git.el8       BaseOS       323 k
    
    Transaction Summary
    ================================================================================
    Install  1 Package
    
    Total download size: 323 k
    Installed size: 1.0 M
    Downloading Packages:
    net-tools-2.0-0.51.20160912git.el8.x86_64.rpm   1.4 MB/s | 323 kB     00:00    
    --------------------------------------------------------------------------------
    Total                                           184 kB/s | 323 kB     00:01     
    Running transaction check
    Transaction check succeeded.
    Running transaction test
    Transaction test succeeded.
    Running transaction
      Preparing        :                                                        1/1 
      Installing       : net-tools-2.0-0.51.20160912git.el8.x86_64              1/1 
      Running scriptlet: net-tools-2.0-0.51.20160912git.el8.x86_64              1/1 
      Verifying        : net-tools-2.0-0.51.20160912git.el8.x86_64              1/1 
    
    Installed:
      net-tools-2.0-0.51.20160912git.el8.x86_64                                     
    
    Complete!		#又编译成功
    Removing intermediate container 90f391b8fe89
     ---> da4ad4cd2938
    Step 7/10 : EXPOSE 80
     ---> Running in 96f829f08850
    Removing intermediate container 96f829f08850
     ---> 3d2d0365e5c7
    Step 8/10 : CMD echo $MYPATH
     ---> Running in 00344184eafe
    Removing intermediate container 00344184eafe
     ---> 005ee0708a17
    Step 9/10 : CMD echo "-------end--------"
     ---> Running in c7019a9bcfd9
    Removing intermediate container c7019a9bcfd9
     ---> c964b172bf9e
    Step 10/10 : CMD /bin/bash
     ---> Running in 9900c5470588
    Removing intermediate container 9900c5470588
     ---> f804e311e9aa
    Successfully built f804e311e9aa
    Successfully tagged mycentos:0.1		#构建完成
    [root@localhost dockerfile]#
    

    测试运行

    查看构建的镜像

    运行构建的容器

    docker run -it mycentos:0.1		#使用镜像名称要加版本号,否则会下载最新的镜像
    

    构建的镜像vim ifconfig命令可以使用,工作目录为配置的/usr/local

    查看镜像构建历史

    docker history ID
    

    查看官方镜像是如何构建的


    通过查看官方镜像的构建历史可以学习镜像是如何构建的。

    CMD和ENTRYPOINT区别

    CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代

    ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令

    测试CMD

    只有最后一个会执行

    进入dockerfile目录,编写dockerfile-cmd-test文件

    构建镜像

    docker build -f dockerfile-cmd-test -t cmdtest .
    
    


    执行镜像,ls -a命令生效

    docker run ID
    


    追加-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.
    
    


    追加的-l命令替换了CMD["ls""-a"]命令,-l不是命令,所以报错。

    命令被替换

    测试ENTRYPOINT

    进入dockerfile目录,编写dockerfile-entrypoint-test文件

    构建镜像

    docker build -f dockerfile-entrypoint-test -t entrytest .
    


    执行镜像,ls -a命令生效

    docker run ID
    


    追加-l命令参数测试

    docker run 4c60442a1328 -l
    

    追加-l生效

    不会替换掉dockerfile文件中的内容。

  • 相关阅读:
    【crontab】误删crontab及其恢复
    New Concept English there (7)
    New Concept English there (6)
    New Concept English there (5)
    New Concept English there (4)
    New Concept English there (3)
    New Concept English there (2)Typing speed exercise
    New Concept English there (1)Typing speed exercise
    New Concept English Two 34 game over
    New Concept English Two 33 94
  • 原文地址:https://www.cnblogs.com/lwenwu/p/14029644.html
Copyright © 2011-2022 走看看