您现在的位置是:首页 > 文章详情

Dockerfile编写规范

日期:2022-02-26点击:408
  1. 什么是Dockerfile
    1. Dockerfile简介

简而言之,dockerfile是镜像生产说明书,其作用是用来构建镜像的。

使用者通过Dockerfile就能知晓镜像每一层是如何构建的;

    1. Dockerfile的组成结构

Dockerfile编排包含基础镜像信息、维护者信息、镜像操作指令和容器启动指令四个结构,简单举例:

FROMopenjdk:8u151-jdk-alpine3.7

ENV JAVA_OPTS="-server -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=20 -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Duser.timezone=Asia/ShangHai -Djava.security.egd=file:/dev/urandom"

WORKDIR /mnt/morpheus/ms

COPY morpheus-common-gateway*.jar ./morpheus-common-gateway.jar

COPY config/ ./config

EXPOSE 8200

ENTRYPOINT java ${JAVA_OPTS} -jar morpheus-common-gateway.jar

 

  1.  编写规范Dockerfile
    1. 编写规范的目的

Dockerfile编写规范的目的:旨在构建最小、最快,最少层的镜像

    1. 基础镜像挑选

微服务推荐选用openjdk:8u151-jre-alpine3.7基础镜像,具有基础的java环境,大小仅57M。

更小的镜像意味着更少依赖,更少变化,更少问题,更快拉取,更快加载,更省资源。

Dockerfile编排第一行使用:FROM openjdk:8u151-jre-alpine3.7

    1. 谨记容器都是暂态的

无论容器中产生了什么数据,都会在关停和重启时删除,容器一定是无状态的。因此一定不要在容器中存储持久化数据,容器的状态需要外置

    1. 不能出现软件包安装和更新操作

不要在Dockerfile出现软件的安装,比如RUN yum install mysql 或 RUN yum update mysql。如果需要依赖其他软件,可以选择直接使用dockerhub相关镜像或者重新构建一个合适的基础镜像。

    1. 不发生变化的layer放在前面

为了保证layer缓存可以复用从而增加构建速度,尽量把稳定的、不变的layer放在前面。

    1. 把联系紧密并且相对独立的几个RUN指令合并成一条

如果有几个镜像RUN指令联系紧密,需要把几个RUN指令通过 && 符号连接到一块,减少layer层数。

例如: RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime&& echo $TZ > /etc/timezone

这条指令即是把联系紧密的两条命令用&& 连成一条,只会构建一个layer;

    1. 避免安装不必要的包

一定要在Dockerfile 里编写与自己容器启动相关的环境,所有编写指令信息都是围绕容器指令启动和稳定运行而执行的。比如启动jar包的Dockerfile编写不要添加C++的依赖环境。这样做是为了减少容器的复杂度、依赖关系、尺寸以及构建时间;

    1. 一个容器只有一个微服务

尽量保证一个容器只有一个运行程序,保证容器镜像的清洁,独立和可规模化(多实例部署、横向扩展)。

    1. 容器中启动的Java程序需要使用命令行参数

增加JVM启动参数:

-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap

Java8 以前,JVM无法识别出自己在容器中,也不能识别cgroups所设置的内存限制。在申请的内存超过cgroups限制时,程序就会崩溃。Java8 通过开启这两个参数,使JVM识别出cgroups限制。

 

原文链接:https://my.oschina.net/morpheusWB/blog/5465057
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章