ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

5、Dockerfile

2022-06-21 10:04:34  阅读:143  来源: 互联网

标签:CMD 命令 ENTRYPOINT 镜像 docker Dockerfile


1、Dockerfile常用指令
  FROM
    指定构建新镜像时使用的基础镜像
  MAINTAINER
    作者的信息
  ADD
    将宿主机目录下的文件拷贝进镜像,且会自动处理URL和解压tar压缩包
  COPY
    功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。同样需求下,官方推荐使用 COPY
  LABEL
    用于为镜像添加元数据
  ENV
    设置环境变量
  EXPOSE
    指定于外界交互的端口
  VOLUME
    用于指定持久化目录(指定此目录可以被挂载出去)
  WORKDIR
    工作目录,类似于cd命令。设置了工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等都会在该目录下执行。
  USER
    指定运行容器时的用户名或 UID
  ARG
    定义构建镜像时的变量,相当于构建镜像时可以在外部为里面传参
  ONBUILD
    用于设置镜像触发器
  格式: 
    ONBUILD [INSTRUCTION]
  示例:
    ONBUILD ADD . /app/src
    ONBUILD RUN /usr/local/bin/python-build --dir /app/src
  注:
    NNBUID后面跟指令,当当前的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被钥触发
  RUN
    镜像构建【docker build】时执行的命令。如果有多个RUN,自上而下依次运行
  CMD
    容器启动【docker run】时执行的命令。如果有多个CMD,只有最后一个运行。
    当使用docker run命令的时候,可以在整个 docker 命令的【最后】加上其他额外的命令,那么额外的命令会覆盖Dockerfile中所有的CMD命令,
    例如我们执行如下命令:【docker run -it centos ls / -l】,【ls / -l】会覆盖Dockerfile中所有的CMD命令。
  ENTRYPOINT
    功能类似CMD,如果有多个Entrypoint,只有最后一个运行。如果CMD和ENTRYPOINT共存,则只有ENTRYPOINT运行,且最后的CMD会被当做ENTRYPOINT的参数。
  例一:
  Dockerfile:
    FROM centos
    MAINTAINER zhengjingmao@163.com
    RUN mkdir -p /datas/
    ENTRYPOINT ["echo", "hello"]
    CMD ["world"] #会将world作为echo hello的参数,最后的命令其实为echo hello world
  例二:
  Dockerfile:
    FROM centos
    MAINTAINER zhengjingmao@163.com
    RUN mkdir -p /datas/
    ENTRYPOINT ["echo", "hello"]
  执行启动命令:
    docker run -it my-centos word
    命令最后面的 word 会作为 Dockerfile ["echo", "hello"] 中的参数,最终形成的命令为 ["echo", "hello", "word"]

2、制作镜像
  如果有多个RUN,自上而下依次运行,每次运行都会形成新的层,建议&& 放入一行运行
  如果有多个CMD,只有最后一个运行
  如果有多个Entrypoint,只有最后一个运行
  如果CMD和entrypoint共存,只有entrypoint运行,且最后的CMD会当做entrypoint的参数

  构建镜像命令: docker build -f /path/Dockerfile
  docker build . # "."表示当前目录

  build并不是在本地构建,而是在docker引擎中构建的。
  实际上Dockerfile的文件名并不要求必须为 Dockerfile,而且并不要求必须位于上下文目录中,
  比如可以用 -f …/Dockerfile 参数指定某个文件作为 Dockerfile。当然,一般大家习惯性的会使用默认的文件名Dockerfile,以及会将其置于镜像构建上下文目录中。

  【docker build -t nginx:v3 .】
  上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
  解析:
  由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。
  这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
  注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

标签:CMD,命令,ENTRYPOINT,镜像,docker,Dockerfile
来源: https://www.cnblogs.com/sunhao1234/p/16395773.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有