zoukankan      html  css  js  c++  java
  • Dockerfile 简介

    【参考文章】: Dockerfile 菜鸟教程
    【参考文章】: 你必须知道的Dockerfile
    【参考文章】: Dockerfile: ENTRYPOINT和CMD的区别
    【参考文章】: Dockerfile 中的COPY 和 ADD 命令

    1. 简介

      Dockerfile 是一个用来构建镜像的文本文件,里面包含了构建镜像的所有的指令;
      在执行 docker build 命令时,就会按照 Dockerfile 中定义的指令顺序执行指令;

    2. 基本构成

    1. 基础镜像:制作镜像一般都是在某个镜像的基础上进行操作;
    2. 构建命令:这部分就是 Dockerfile 的主要内容,包含了构建镜像的命令过程;
    3. 启动命令:这部分是容器启动时需要执行的命令,一般容器启动成功后要执行自己服务的启动脚本,让服务运行起来;

    3. 基本命令

    3.1 FROM

      设置基础镜像信息,后面都是基于基础镜像进行操作
      FROM centos:7      设置centos7为基础镜像
    

    3.2 MAINTAINER

      设置维护者的信息,一般设置名字和邮箱地址
      MAINTAINER  virgosnail  virgosnail@qq.com  
    

    3.3 WORKDIR

      相当于Linux的 cd 命令
      WORKDIR  /home      进入 home 目录
    

    3.4 USER

      设置执行命令的用户
      USER root      以 root 用户执行命令
    

    3.5 RUN

      执行后面跟着的命令
      RUN  rm  -rf ./*      删除当前目录下的所有文件
    

    3.6 COPY

      将指定的文件、文件夹拷贝到镜像中;
      拷贝目录时只拷贝目录下的内容,不会拷贝该目录;
      文件名信息支持 go 风格的通配符;
    
      COPY  a.txt   /home 
    

    3.7 ADD

      将指定的文件、文件夹拷贝到镜像中;
      拷贝目录时只拷贝目录下的内容,不会拷贝该目录;
      如果是压缩文件,则自动解压;
      支持从 URL 地址拷贝文件到镜像文件,不推荐,此时会创建更多的镜像层;
    
      ADD a.txt  /home      将宿主机的 a.txt 文件拷贝到镜像文件的 /home 目录下
    

    3.8 VOLUME

      设置数据卷,挂载主机目录
    

    3.9 EXPOSE

      容器运行的服务端口信息,多个端口则用空格隔开;
      当用 docker run 启动时,
      如果用 p (小写)设置端口映射时,此时 EXPOSE 命令不生效;
      当使用 P (大写)时,则使用随机端口映射到 EXPOSE 的端口;
      
      EXPOSE 21010  21011
    

    3.10 CMD

      设置容器启动后要执行的命令,一般为服务的启动脚本;
      存在多个 CMD 命令时,只有最后一个会生效;
      如果使用 docker  run 命令启动容器时指定了容器启动后执行的命令,则会覆盖 dockerfile 中的 CMD 命令;
    
      CMD 有两种写法:
      shell:CMD  command  param1  param2
      exec:CMD  ["command","param1","param2"]  推荐使用
    

    3.11 ENTRYPOINT

      存在多个 ENTRYPOINT 命令时,只有最后一个会生效;
      使用 docker  run 命令启动容器时可以通过 --entrypoint  command  覆盖 dockerfile 中的 ENTRYPOINT 命令;
      ENTRYPOINT 有两种写法:
      shell:ENTRYPOINT  command  param1  param2
      exec:ENTRYPOINT  ["command","param1","param2"] 推荐使用
    

    3.11 ENTRYPOINT 和 CMD 组合使用

      当同时存在 ENTRYPOINT 和 CMD 时,docker 会将 CMD 的参数拼接到 ENTRYPOINT 后面再执行命令;
      ENTRYPOINT 为默认的运行命令,CMD 为默认的运行是参数;
    

    3.11 SHELL 和 EXEC

      当使用shell表示法时, 命令行程序作为sh程序的子程序运行, docker用/bin/sh -c的语法调用. 如果我们用docker ps命令查看运行的docker, 就可以看出实际运行的是/bin/sh -c命令;
      PID为1的进程并不是在Dockerfile里面定义的命令, 而是/bin/sh命令. 如果从外部发送任何POSIX信号到docker容器, 由于/bin/sh命令不会转发消息给实际运行的命令, 则不能安全得关闭docker容器;
      EXEC 则没有这种弊端;
    

    4. 示例

    FROM centos:7
    MAINTAINER  virgosnail  virgosnail@qq.com
    ADD start.sh /home/bin
    RUN chmod +x /home/bin/start.sh
    CMD /home/bin/start.sh
    
  • 相关阅读:
    【字符串】C语言_字符串常量详解
    2138=数据结构实验之图论三:判断可达性
    3363=数据结构实验之图论七:驴友计划
    1916=字符串扩展(JAVA)
    2140=数据结构实验之图论十:判断给定图是否存在合法拓扑序列
    3364=数据结构实验之图论八:欧拉回路
    2138=数据结构实验之图论三:判断可达性
    2271=Eddy的难题(JAVA)
    2246=时间日期格式转换(JAVA)
    2804=数据结构实验之二叉树八:(中序后序)求二叉树的深度
  • 原文地址:https://www.cnblogs.com/virgosnail/p/13168819.html
Copyright © 2011-2022 走看看