dockerfile命令详解

dockerfile命令使用习惯

范例:
  FROM nginx:1.13          #继承nginx镜像
  RUN mkdir -p /var/static      #执行shell命令
  WORKDIR /var/static       #切换工作目录
  COPY dist/ ./dist         #拷贝dist目录到./下
  COPY nginx.conf /etc/nginx/conf.d/default.conf
  WORKDIR /var/static/dist
  COPY entrypoint.sh ./
  RUN mkdir -p /var/mount
  VOLUME [“/data/dir1”, “/data/dir2”]    #挂载目录
  ENV TIME_ZONE Asia/Shanghai   #设置时区
  USER root             #pod以root用户登录
  RUN echo “root:123456”|chpasswd
  ENTRYPOINT ["./entrypoint.sh"]  #执行脚本
  CMD [“nginx”, “-g”, “daemon off;”]  #-g(前台运行)  daemon off(关闭守护进程)

dockerfile语法

1) FROM: FROM命令可能是最重要的Dockerfile命令。改命令定义了使用哪个基础镜像启动构建流程。基础镜像可以 为任意镜 像。如果基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。FROM命令必须是 Dockerfile的首个命令 (如: FROM ubuntu)。 
2) MAINTAINER: 这个命令放在Dockerfile的起始部分,虽然理论上它可以放置于Dockerfile的任意位置。这个命令用 于声明作者,并应该放在FROM的后面 (如: MAINTAINER patrick)。 
3) RUN: RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建镜像。不像CMD命令,RUN命 令用于创建镜像。 (如: RUN apt-get install -y vim) 
4) USER: USER命令用于设置运行容器的UID. (如: USER root) 
5) VOLUME: VOLUME命令用于让你的容器访问宿主机上的目录(主要用于不同容器之间共享目录用的).(如: VOLUME [“/data/dir1”, “/data/dir2”])
6) WORKDIR: 设置容器的工作目录(如: WORKDIR [“/workdir”]). 
7) ADD: ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。 如果源是一个URL,那该URL的内容将被下载并复制到容器中(如: ADD http://foo.com/package.tar.bz2 /tmp/)。 
8) COPY: 看这个名字就知道,又是一个复制命令与ADD的区别COPY的<src>只能是本地文件,其他用法一致(如: ADD package.tar.bz2 /tmp/). 
9) ENV:设置环境变量(如: ENV PATH=$PATH:/opt/bin). 
10) ENTRYPOINT: 功能是启动时的默认命令, 有如下2种写法:1. ENTRYPOINT ["executable", "param1", "param2"];2. ENTRYPOINT command param1 param2。(推荐使用第1种格式).(如: ENTRYPOINT ["/bin/echo"]). 
11) CMD: 功能为容器启动时要运行的命令有如下3种写法:1. CMD ["executable","param1","param2"]; 2. CMD ["param1","param2"]; 3. CMD command param1 param2;(如: CMD [ "sh", "-c", "echo $HOME"])

CMD和ENTRYPOINT区别和配合

相同点:只能写一条,如果写了多条,那么只有最后一条生效,容器启动时才运行,运行时机相同.
不同点:ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖,如果我们在Dockerfile种同时写 了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为 ENTRYPOINT的参数.
在这里插入图片描述

ADD与COPY的区别

ADD是更高级的复制文件,ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能。
  比如 <源路径> 可以是一个 URL,这种情况下,Docker 引擎会试图去下载这个链接的文件放到 <目标路径> 去。下载后的文件权限自动设置为 600,如果这并不是想要的权限,那么还需要增加额外的一层 RUN进行权限调整,另外,如果下载的是个压缩包,需要解压缩,也一样还需要额外的一层 RUN 指令进行解压缩。所以不如直接使用 RUN 指令,然后使用 wget 或者 curl 工具下载,处理权限、解压缩、然后清理无用文件更合理。因此,这个功能其实并不实用,而且不推荐使用。
  如果 <源路径> 为一个 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,ADD 指令将会自动解压缩这个压缩文件到 <目标路径> 去。

Dockerfile优化

在范例中有很多RUN和COPY命令,这些都是可以优化的,尽量减少dockerfile的层数以及大小,范例中的文件目录创建和拷贝我们可以通过挂载目录的方式去实现,也可以通过脚本简化层数。
   1) 选择比较小的基础镜像,比如:alpine.
   2) 因为每一条命令多对于一层,所以RUN 命令要尽量写在一条里,每次 RUN 命令都是在之前的镜像 上封装,只会增大不会减小.
   3) 自我清理如:RUN apt-get update && apt-get install -yq --no-install-recommends && apt-get clean && rm -rf /var/lib/apt/lists/*.
   4) 因为Docker尝试缓存您的Dockerfile中尚未更改的所有步骤,所以写dockerfile时一些不会变的尽量写 前面. 5) 尽量不要直接使用CMD命令运行,而是建议时用一个开始脚本,每次调用运行,如:CMD [“bash”, “start.sh”],然后在start.sh脚本文件中你可以使用python app.py之类的命令启动、运行你的应用程序。 这样的优势是可以很方便扩展运行脚本文件,增加调试功能,而不用在CMD中一步一步执行。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值