zoukankan      html  css  js  c++  java
  • Docker解析及轻量级PaaS平台演练(三)--Dockerfile编写

    在本篇中将介绍Dockerfile的编写

    除了通过修改Image,创建Container,在打包成Image来创建我们需要的Image之外
    我们还可以编写Dockerfile文件,通过build来创建我们需要的Image

    Dockerfile是一个文件名,Docker规定必须是这样子来命名的
    Dockerfile放在项目的根目录
    通过docker build -t {镜像的名字} {项目的路径}
    来读取Dockerfile中的代码自动构建一个Image

    Dockerfile中每一行指令执行完之后都会提交成为一个Image,这样保证了指令之间不会有影响
    而且Docker会尽可能的尝试复用之前的Image
    可以通过在build命令中添加–no-cache方式来取消这种cache复用方式

    Dockerfile中只支持自己定义的那套指令,在书写时建议全部使用大写

    FROM {base Image}
    必须放在Dockerfile的第一行,表示从哪个Image开始构建

    MAINTAINER
    可选的,用来标识Image作者

    RUN
    每个RUN指令都会是在新的Container中执行,并提交为Image,作为下一个RUN的base image
    RUN[“executable”,”arg1”,…]

    CMD
    在Dockerfile中定义的CMD命令,在提交成Image的时候不会起作用,只有当使用这个Image来创建一个Container的时候,会在Container内部默认执行这条CMD命令
    一个Dockerfile中只能有一个有效的CMD
    当运行Container时如果指定了command,那么将会覆盖默认设置的这个CMD

    下面来编写一个Demo Dockerfile

    在/test目录下新建Dockerfile

    FROM busybox:ubuntu-14.04
    RUN touch /test.sh
    CMD ["ls","-al","/"]
    //默认执行ls -al /
    //外部可以通过ls -al /usr甚至是ps -al来覆盖原有的command

    使用build来构建Image

    docker build -t jchubby/testimage /test 
    //-t [image名] [Dockerfile目录]

    运行结果如下:

    这里写图片描述

    ENTRYPOINT
    之前的CMD是定义默认的command命令,但是在运行container的时候可以执行另外的command来覆盖原先的command
    ENTRYPOINT的作用是在运行container的时候,设置默认要执行的command命令,是不可修改的,但是可以传不同的参数给这个command命令得到不同的结果
    一个Dockerfile中只能有一个有效的ENTRYPOINT

    使用ENTRYPOINT

    FROM busybox:ubuntu-14.04
    RUN touch /test.sh
    ENTRYPOINT ["ls","-al"]
    CMD["/"]
    //默认会执行ls -al /
    //外部只能通过传不同的路径,来得到对应目录的文件,只能使用ls命令

    ADD&COPY
    将host上的文件或目录复制到Image中,ADD如果是一个URL的情况下,会将其下载到指定的目录

    FROM busybox:ubuntu-14.04
    RUN touch /test.sh
    ADD http://.... /test/..
    //将指定网址的资源下载到/test/..文件中
    ENTRYPOINT ["ls","-al"]
    CMD["/"]

    其他的一些Dockerfile指令

    ENV
    ENV key value
    用来设置环境变量,后续的RUN可以使用其创建的环境变量
    创建基于该Image的Container时也会自动拥有这些环境变量

    WORKDIR
    指定当前的工作目录

    USER
    指定在RUN的时候使用哪个用户

    ONBUILD
    类似于一个触发器,比如Image a的Dockerfile中制定了ONBUILD,Image b的Dockerfile指定FROM Image a,那么在构建Image b的时候会先执行Image a中的ONBUILD指定的操作(ONBUILD后面跟的是Dockerfile的指令)

    VOLUME
    通过VOLUME[“path1”,”path2”,…]
    来指定某些目录为Container之间可以共享数据,访问的目录

  • 相关阅读:
    使用poi读取excel文件 Cannot get a text value from a numeric cell
    异步往数据库中插入每个用户的增删改操作日志
    mybatis where in语句中参数过多
    使用泛型实现对int数组或者String数组进行排序
    读取hdfs目录,并在web页面上展示文件里的内容
    java使用优先级队列实现哈夫曼编码
    使用JavaScript动态的绑定、解绑 a 标签的onclick事件,防止重复点击
    git概念和操作流程
    新的学习路径、学习想法和思路的头脑风暴:基于泰迪云课程,对数据分析和数据建模,机器学习算法进行统筹,接着是基于大数据的数据挖掘、进度、
    RSA加密算法流程,公钥加密,私钥解密
  • 原文地址:https://www.cnblogs.com/jchubby/p/5449386.html
Copyright © 2011-2022 走看看