加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

编写Dockerfiles的优秀实践

发布时间:2019-09-17 13:58:00 所属栏目:建站 来源:架构师之路
导读:本文档先容了构建高效镜像的优越实践和要领。 Docker通过从Dockerfile(按次序包括构建给定镜像所需的全部呼吁的文本文件)读取呼吁来自动构建镜像。Dockerfile遵循特定的名目和一组呼吁,您可以在Dockerfile reference中找到这些呼吁。 Docker镜像由只读层

譬喻,Postgres官方镜像行使以下剧本作为其进口点:

  1. #!/bin/bash 
  2. set -e 
  3. if [ "$1" = 'postgres' ]; then 
  4. chown -R postgres "$PGDATA" 
  5. if [ -z "$(ls -A "$PGDATA")" ]; then 
  6. gosu postgres initdb 
  7. fi 
  8. exec gosu postgres "$@" 
  9. fi 
  10. exec "$@" 

注:

配置应用的PID为1,这样,PG会布局linux的任何信号。

helper剧本被复制到容器中,并在容器开始时通过ENTRYPOINT运行:

  1. COPY ./docker-entrypoint.sh / 
  2. ENTRYPOINT ["/docker-entrypoint.sh"] 
  3. CMD ["postgres"] 

这个剧本应承用户以多种方法与Postgres交互。

它可以简朴地启动Postgres:

  1. $ docker run postgres 

可能,它可以用来运行Postgres并将参数转达给处事器:

  1. $ docker run postgres postgres –help 

最后,它也可以用来启动一个完全差异的器材,如Bash:

  1. $ docker run --rm -it postgres bash 

VOLUME

卷指令应该用于果真由docker容器建设的任何数据库存储地区、设置存储或文件/文件夹。凶猛提议对镜像的任何可变和或用户可处事的部门行使VOLUME。

USER

假如处事可以在没有特权的环境下运行,请行使USER将其变动为非root用户。起首在Dockerfile中建设用户和组,行使相同于RUN groupadd -r postgres && useradd——no-log-init -r -g postgres postgres的对象。

镜像中的用户和组被分派一个不确定的UID/GID,由于"下一个"UID/GID被分派,而不思量镜像的重建。因此,假如它是必必要行使的,您应该分派一个显式的UID/GID。

因为Go archive/tar包在处理赏罚稀少文件时存在一个未办理的bug,试图在Docker容器中建设一个UID很是大的用户也许会导致磁盘耗尽,由于容器层中的/var/log/faillog中添补了NULL()字符。一个办理方案是将——no-log-init符号转达给useradd。Debian/Ubuntu adduser包装器不支持这个符号。

停止安装或行使sudo,由于它具有不行预知的TTY和信号转刊举动,也许会导致题目。假如您绝对必要相同于sudo的成果,好比将保卫历程初始化为根历程,但以非根历程的情势运行它,那么可以思量行使"gosu"。

最后,为了镌汰条理和伟大性,停止频仍地往返切换用户。

WORKER

为了清楚和靠得住,您应该始终为您的WORKDIR行使绝对路径。另外,您应该行使WORKDIR,而不是像RUN cd…&& do-something这样的指令,这些指令很难阅读、解除妨碍和维护。

ONBUILD

ONBUILD呼吁在当前Dockerfile构建完成后执行。ONBUILD在从当前镜像派生的任何子镜像中执行。将ONBUILD呼吁看作是父Dockerfile给子Dockerfile的一条指令。

Docker构建在子Dockerfile中的任何呼吁之前执行ONBUILD呼吁。

ONBUILD对付将从给定镜像构建的镜像很是有效。譬喻,您可以对一个说话仓库镜像行使ONBUILD,该镜像可以在Dockerfile中构建用该说话编写的恣意用户软件,正如您可以在Ruby的ONBUILD变体中看到的那样。

行使ONBUILD构建的镜像应该有一个单独的标志,譬喻:ruby:1.9-onbuild或ruby:2.0-onbuild。

在ONBUILD中添加或复制时要警惕。假如新构建的上下文穷乏正在添加的资源,则"onbuild"镜像将劫难性地失败。如上面提议的那样,添加一个单独的标志,通过应承Dockerfile作者做出选择,可以辅佐缓解这种环境。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读