博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dockerfile最佳实践(二)
阅读量:7126 次
发布时间:2019-06-28

本文共 2115 字,大约阅读时间需要 7 分钟。

本文讲的是Dockerfile最佳实践(二)
【编者的话】本文是 
 进阶篇的第二部分。作者主要介绍了 Docker 的变化、常用指令以及基础镜像的最佳用法。

自从我
后,Docker 发生了很大变化。上一篇会继续留着,这篇文章将介绍 Docker 有什么变化以及你现在应当做些什么。


1、不要开机初始化

容器模型是进程而不是机器。如果你认为你需要开机初始化,那么你就错了。


2、可信任构建

即使你不喜欢这个题目但它是很棒的一个功能。我把大部分 GitHub 仓库添加到可信任构建,因此当我提交一个新镜像之后不久,就在等待索引。另外,我不必再创建单独的 Dockerfile 仓库与他人分享,它们都在同一个地方。


请记住,这不是你尝试新东西的试验场。在你推送之前,请在本地先构建一下。Docker 可以确保你在本地的构建和运行,与你推送到任何地方的构建和运行是一样的。本地开发和测试、提交和推送、以及等待索引上的官方镜像都是建立在可信任构建的基础之上的。


3、不要在构建中升级版本

更新将发生在基础镜像里,你不需要在你的容器内来
apt-get upgrade
更新。因为在隔离情况下,如果更新时试图修改 init 或改变容器内的设备,更新可能会经常失败。它还可能会产生不一致的镜像,因为你不再有你的应用程序该如何运行以及包含在镜像中依赖的哪种版本的正确源文件。


如果基础镜像需要安全更新,那么让上游的知道,让他们给大家更新,并确保你再次构建的一致性。


4、使用小型基础镜像

有些镜像比其他的更臃肿。我建议使用
debian:jessie
作为你的基础镜像。如果你熟悉Ubuntu,你将发现一个更轻量和巧妙的自制 debian,它足够小并且没有包含任何不需要的包。


5、使用特定的标签

对于你的基础镜像这是非常重要的。Dockerfile 中
FROM
应始终包含依赖的基础镜像的完整仓库名和标签。比如说
FROM debian:jessie
而不仅仅是
FROM debian


6、常见指令组合

您的
apt-get update
应该与
apt-get install
组合。此外,你应该采取
\
的优势使用多行来进行安装。


#Dockerfile for https://index.docker.io/u/crosbymichael/python/ FROM debian:jessieRUN apt-get update && apt-get install -y \git \libxml2-dev \python \build-essential \make \gcc \python-dev \locales \python-pipRUN dpkg-reconfigure locales && \locale-gen C.UTF-8 && \/usr/sbin/update-locale LANG=C.UTF-8ENV LC_ALL C.UTF-8

谨记层和缓存都是不错的。不要害怕过多的层,因为缓存是大救星。当然,你应当尽量使用上游的包。


7、使用自己的基础镜像

我不是在谈论运行 debbootstrap 来制作自己的 debian。你不是 tianon(Tianon Gravi),没有人想要你认为别人需要你的 500mb 的狗屎垃圾基础镜像。我说的是,如果你要运行 python 应用程序需要有一个python基础镜像。前面示例中用于构建 
crosbymichael/python
 的 Dockerfile 也被用于其他很多构建 Python 应用程序的镜像。

FROM crosbymichael/pythonRUN pip install butterflyRUN echo "root\nroot\n" | passwd rootEXPOSE 9191ENTRYPOINT ["butterfly.server.py"]CMD ["--port=9191", "--host=0.0.0.0"]

另一个:

FROM crosbymichael/pythonRUN pip install --upgrade youtube_dl && mkdir /downloadWORKDIR /downloadENTRYPOINT ["youtube-dl"]CMD ["--help"]

正如你看到的,这使得使用你的基础镜像非常小,从而使你集中精力在应用程序上。


让我知道你在想什么,或者如果你有任何其它的问题,可以在评论中留言。


原文链接: (翻译: 审校:叶可强)


===========================

译者介绍

田浩浩
硕士研究生,目前在珠海从事Android应用开发工作。业余时间专注Docker的学习与研究,希望通过
把最新最优秀的译文贡献给大家,与读者一起畅游Docker的海洋。
原文发布时间为:2015-01-09 
本文作者:田浩浩
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:Dockerfile最佳实践(二)

转载地址:http://hjoel.baihongyu.com/

你可能感兴趣的文章
03、微信小程序之 永不过时的HelloWorld
查看>>
NFS配置不当那些事
查看>>
[译] 如何写出更好的 React 代码?
查看>>
一起撸个朋友圈吧(step3) - ListAdapter篇
查看>>
LeetCode 642 号问题:设计搜索自动补全系统
查看>>
探究Android View 绘制流程,Canvas 的由来
查看>>
JS原生交互
查看>>
[译] JavaScript 工作原理:Web Worker 的内部构造以及 5 种你应当使用它的场景
查看>>
Android使用Path仿支付宝支付成功失败动画
查看>>
聊聊rocketmq的DailyRollingFileAppender
查看>>
HTTP/2
查看>>
[单刷APUE系列]第十七章——高级进程间通信
查看>>
分布式之消息队列的特点、选型、及应用场景详解
查看>>
多迪学员问到最多的问题:为什么要学习Python编程语言?
查看>>
从vue中学习defineProperty
查看>>
漂亮的颜色
查看>>
Android Volley 源码解析(二),探究缓存机制
查看>>
Go源码剖析:内置类型
查看>>
102. Binary Tree Level Order Traversal
查看>>
SAP云平台对Kubernetes的支持
查看>>