K8S|我写Dockerfile的一些心得


其实之前的时候,就写过一篇K8S|通过Dockerfile定制自己的镜像,简单演示了,怎样通过Dockerfile生成镜像.当时也想弄篇Dockerfile最佳实践来着.正好起个什么名字好呢搞稿了,也很干货.今天就聊一下Dockerfile的实操心得吧.

选择基础镜像

镜像自然是越小越好,毕竟如果太大的话,对存储和传输都是不小的挑战,所以选择基础镜像是基础中的基础.
首先我会中意alpine这个系统,原版才5M.实在是居家旅行的利器.
其次选择官方提供的alpine,比如,python的看相应的官方版本有没有提供alpine的镜像,java的别管openjdk还是oracle选择完版本都要看一下有没有alpine的提供.
最后,如果选择不了alpine除了自己做一个外,一定要选择和主机系统一样的容器系统.比如主机是ubuntu16.04,基础镜像也建议用ubuntu16.04;主机是centeos,自然也要选择相应的官方基础镜像
ok,这步就是上一节所说的FROM那行

修改依赖源

这一步调整相应的源,包括系统源,npm源,python源等,主要解决打包速度问题
像apk源

sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

npm源

npm config get registry
https://registry.npm.taobao.org

python的pip源

pip config set global.trusted-host mirrors.aliyun.com
pip config set global.index-url https://mirrors.aliyun.com/simple

调整系统时区

一般的基础镜像用的时区都是0时区,这样的带来的问题就是跑在里面的应用还有我们进入系统查看日志时发现时间都差8个小时.例如alpine调整镜像

ENV TZ=Asia/Shanghai
RUN apk add --no-cache --update tzdata; \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
    echo $TZ > /etc/timezone; \
    && rm -rf /tmp/* /var/cache/apk/*

看到没,上节的最佳实践,apk的更新和安装写在一行,最后还不忘删除一下缓存文件

做自己的基础应用镜像

上面说的都是基础镜像的调整,这时候没有跟实际要部署的应用有交集.上面这些调整建议打成一个自己内部使用的基础镜像.这样简单的封一层,后面在做应用镜像时都是FROM自己调整过的镜像,无论是从管理角度看,还是实际打包效率都是最佳实践

依赖包外挂

比如在打包nodejs应用时,依赖包会放在项目目录下的node_modules目录,我们在做镜像时,最后将这个目录通过docker -v 挂在主机上,这样只有第一次时完全是空目录,后面再次打包,除了有更新,速度飞快.

docker run --rm -it \
-w /opt/app_dir \
-v $PWD:/opt/app_dir \
npm install

当然这一步在Dockerfile之前,下一步是将当前目录添加到容器

ADD app_dir /opt/app_dir

相关博文

About rainbird

IOS攻城狮
This entry was posted in K8S and tagged , , , , , , , , , , , , . Bookmark the permalink.

发表评论