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文件中的内容。

  • 相关阅读:
    Qt高级编码约定
    QTextCodec::codecForLocale
    无边框窗口拖动代码
    QString QByteArray char 之间的转换
    Qt 程序发布指南
    qt demo pro
    snort vtun performance on vm
    xhEditor用法
    MVC控制器使用总结
    第七章 模态框
  • 原文地址:https://www.cnblogs.com/lwenwu/p/14029644.html
Copyright © 2011-2022 走看看