Dockerfile注意事项

By admin in IOS on 2019年8月2日

准则

  1. 尽也许将Dockerfile放在空目录中,假若目录中务必有别的文件,则使用.dockerignore文件。
  2. 制止安装不必须的包。
  3. 种种容器应该只关怀贰个效用点。
  4. 细微化镜像的层数。
  5. 多行参数时应当分类。那样更清晰直白,便于阅读和review,其它,在各样换行符\前都增添一个空格。
  6. 对创设缓存要有知情的认识。

命令注意事项

FROM

    Dockerfile reference for the FROM
instruction

  任什么时候候,尽量选择官方镜像源作为你镜像的基础镜像。大家提出使用Debian
Image
,因为其被很好地保管着,何况作为二个一体化的发表包,但体量却保持着最小化(当前不足150MB)。
  1. FROM无法不是除了注释以外的第一行;
  2. 能够有多少个FROM语句,来创建七个image;
  3.

LABEL

  Dockerfile reference for the LABEL
instruction

RUN

  Dockerfile reference for the RUN
instruction

  RUN语句有三种格式:

  1. RUN

apt-get

  尽量制止使用RUN apt-get
upgrade或许dist-upgrade,因为基础镜像的相当多为主包不会再未授权的器皿中进步。
  要整合RUN apt-get update和apt-get
install在同三个RUN语句下同步利用。如:

    RUN apt-get update && apt-get install -y \
        package-bar \
        package-baz \
        package-foo

  假若将update和install分开使用,实行五个Dockerfile时,会挑起缓存难题,导致后边实施的install语句会战败。
  另外,试行完apt-get语句后,最后最佳增加删除安装包的口舌,以减小镜像的体量。如:

RUN apt-get update && apt-get install -y \
    aufs-tools \
    automake \
    build-essential \
 && rm -rf /var/lib/apt/lists/*

  注意:官方的Debian和Ubuntu镜像会自动实施“RUN
apt-get clean”,所以无需肯定地删除指令。

管道使用

  比很多RUN命令都亟待接纳到管道,如:

RUN wget -O - https://some.site | wc -l > /number

  Docker使用/bin/sh
-c解释器来试行这个命令,该解释器只评估管道最终三个操作的重返值来推断一切命令是不是成功。在上头的例子中,只要wc
-l命令成功了,即便wget命令退步了,也会创设二个新镜像。为了防止上述情形,能够在言辞首部加上set
-o pipefail &&。例如:

RUN set -o pipefail && wget -O - https://some.site | wc -l > /number

  注意:并非全体的shell都补助-o
pipefail选项,比如说基于Debian的镜像下的形式shell:dash
shell。这种意况下,大家得以使用exec格式的RUN命令来展现地挑选shell来协助pipefail选项。如:

RUN ["/bin/bash", "-c", "set -o pipefail && wget -O - https://some.site | wc -l > /number"]

CMD

  Dockerfile reference for the CMD
instruction

  CMD语句与RUN分裂,RUN是在build镜像的时候运转,而CMD语句是在build甘休后运转。叁个Dockerfile钟能够有几个RUN语句,固然也得以有五个CMD语句,可是却只有最终一条CMD语句会推行。CMD语句格式为:

CMD [“executable”, “param1”, “param2”…]

EXPOSE

  Dockerfile reference for the EXPOSE
instruction

  EXPOSE指令指明容器会监听链接的端口。因而,最棒使用常用的、古板的应用端口。比如,Apache
web服务器使用EXPOSE 80等。
  为了给外界链接使用,你要求利用docker
run命令来拟定容器端口和host端口的映射。

ENV

  Dockerfile reference for the ENV
instruction

  用于安装情形变量,设置后,前面包车型地铁RUM指令就可以利用在此以前的遭遇变量了。同一时候,还足以因此docker
run –env key=value,在容器运维时设置情状变量。如:

ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

ADD和COPY

Dockerfile reference for the ADD
instruction

Dockerfile reference for the COPY
instruction

  就算ADD和COPY作用相似,但一般来说,更提出选拔COPY。因为COPY比ADD更透明,COPY只帮忙从当和姑件到容器的正片,不过ADD还大概有局地其余不鲜明的特征(比如当地tar包解压缩和远程UEnclaveL帮助)。由此,ADD的最优先使用处是地点tar包自动解压缩到镜像中。如:ADD
rootfs.tar.xz /。
  假如有七个Dockerfile步骤用于拍卖不一样的文本,建议分开COPY它们,并非二回性拷贝。那足以确定保证每一种步骤的build缓存只在相应的文件改动时才不算。比方:

COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY . /tmp/

  镜像的大大小小很关键,因而不鼓励选择ADD从远端U智跑L获取包;能够使用curl大概wget来代表。这种办法你能够去除不再要求的文本,如解压缩后的tar包,进而不要求再加多额外的layer到镜像中。例如,你应当防止那样使用:

ADD http://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all

  而应当如此:

RUN mkdir -p /usr/src/things \
    && curl -SL http://example.com/big.tar.xz \
    | tar -xJC /usr/src/things \
    && make -C /usr/src/things all

  对于不必要动用ADD命令tar包自动解压缩功效的公文和目录,你应有总是利用COPY。

ENTRYPOINT

Dockerfile reference for the ENTRYPOINT
instruction

  使用ENTHighlanderYPOINT来设置镜像的主命令,就好像那个镜像运营时正是那条命令同样(然后再选取CMD作为私下认可的flag)。
  我们利用s3cmd命令作为镜像的主命令。

ENTRYPOINT ["s3cmd"]
CMD ["--help"]

VOLUME

Dockerfile reference for the VOLUME
instruction

  VOLUME指令一般用来数据库的积存区域,配置存款和储蓄,也许docker容器创设的文书和目录。

USER

Dockerfile reference for the USER
instruction

  要是服务可以在没有要求特权的景况下运作,那么就应该运用USE昂科威来切换用户至非root用户。能够用RUN命令创立用户组和用户如:

RUN groupadd -r postgres && useradd -r -g postgres postgres

  应该避免安装和平运动用sudo,因为它有不可预言的TTY和非确定性信号转换脾性,会发出过多难题。假如的确必定要接纳类似sudo的功力(如root下开首化daemon,非root下运转),能够使用“gosu”。

WORKDIR

Dockerfile reference for the WORKDIR
instruction

  为了Dockerfile内容更是清楚和可相信,最棒总是利用相对路径。同样地,应该采纳WOXC60KDIENCORE,并不是利用类似“cd
… && do-something”那样的通令,因为那样会招致难以阅读、查找错误和掩护。

ONBUILD

Dockerfile reference for the ONBUILD
instruction

别的资源

Dockerfile Best
Practices

Dockerfile
Reference

https://github.com/docker-library/buildpack-deps/blob/master/jessie/Dockerfile
.dockerignore
file

http://dockone.io/article/2034
https://docs.resin.io/deployment/build-optimisation/

越来越多Docker相关教程见以下内容

Docker安装应用(CentOS
6.5_x64)
http://www.linuxidc.com/Linux/2014-07/104595.htm

Ubuntu 14.04安装Docker 
http://www.linuxidc.com/linux/2014-08/105656.htm

Ubuntu使用VNC运维基于Docker的桌面系统 
http://www.linuxidc.com/Linux/2015-08/121170.htm

Ali云CentOS 6.5 模板上安装 Docker
http://www.linuxidc.com/Linux/2014-11/109107.htm

Ubuntu 15.04下安装Docker 
http://www.linuxidc.com/Linux/2015-07/120444.htm

在Ubuntu Trusty 14.04 (LTS) (64-bit)安装Docker
http://www.linuxidc.com/Linux/2014-10/108184.htm

在 Ubuntu 15.04 上怎样设置Docker及骨干用法
http://www.linuxidc.com/Linux/2015-09/122885.htm

Ubuntu 16.04上Docker使用手记
http://www.linuxidc.com/Linux/2016-12/138490.htm

Docker
的事无巨细介绍
请点这里
Docker
的下载地址
请点这里

本文恒久更新链接地址http://www.linuxidc.com/Linux/2017-03/141582.htm

图片 1

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 韦德国际手机网站 版权所有