Dockerfile最佳实践(一)
1.使用缓存
Dockerfile的每条指令都会将结果提交为新的镜像,下一跳指令将会基于上一步指令的镜像的基础上构建,如果一个镜像存在相同的父镜像和指令(除了ADD),Docker将会使用镜像而不是执行该指令,即缓存.
为了有效的利用缓存,你需要保持你的Dockerfile一致,并且尽量在末尾修改.Dockerfile的前五行其实可以固定写成如下这样:
FROM ubuntu
MAINTAINER hhh
RUN echo ”deb http://archive.ubuntu.com/ubuntu precise main ubiverse” > etc/apt/sources.list
RUN apt-get update
RUN apt-get upgrade -y
更改MAINTAINER指令会使Docker强制执行RUN指令来更新apt,而不是还是用缓存.
所以,我们应该使用常用且不变的Dockerfile开始指令来利用缓存.
2.使用标签
除非你正在用Docker做实验,否则你应当通过-t选项来docker build新的镜像以便用于标记构建的镜像.一个简单的可读标签将帮助你管理每个创建的镜像.
docker build -t=”syx/df_test” .
注意,始终通过-t标记来构建镜像.
3.公开端口
两个Docker的核心概念是可重复和可移植.镜像应该可以运行在任何主机上并且运行尽可能多的次数.在Dockerfile中你有能力映射私有和共有端口,但是你永远不要通过Dockerfile映射公有端口.通过映射公有端口到主机上,你将只能运行一个容器化应用程序实例.
#private and public mapping
EXPOSE 80:8080
#private only
EXPOSE 80
如果镜像的使用者关心容器公有映射了哪个公有端口,他们可以在运行镜像时通过-p参数设置,否则,docker会自动为容器分配端口.
切勿在Dockerfile映射公有端口.
4.CMD与ENTRYPOINT的语法.
CMD和ENTRYPOINT指令都非常简单,但他们都有一个隐藏的容易出错的功能,如果你不知道的话可能会在这里入坑,这些指令支持两种不同的语法:
CMD /bin/echo
#or
CMD [“/bin/echo”]
看起来没问题,但仔细一看其实两种方式的差距很大.如果你使用第二个语法:CMD(或ENTRYPOINT)是一个数组,它执行的命令完全像你期望的那样.如果使用第一种语法,Docker会在你的命令之前加上/bin/sh -c.
如果你不知道Docker修改了CMD命令,在命令前加上/bin/sh -c可能会导致一些意想不到的问题以及难以理解的功能.因此,在使用这两个指令时你应当使用数组语法,因为数组语法会确切的执行你打算执行的命令.
使用CMD和ENTRYPOINT时,请务必使用数组语法.
5.CMD和ENTRYPOINT结合使用更好
docker run命令中的参数都会传递给ENTRYPOINT指令,而不用担心它被覆盖(和CMD不同).当与CMD一起使用时ENTRYPOINT的表现会更好.
Dockerfile最佳实践(一)的更多相关文章
- 【原创】Docker实战 Dockerfile最佳实践&&容器之间通信
		
官方最佳实践文档 https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#from Docker实战(三十) ...
 - dockerfile 最佳实践及示例
		
Dockerfile 最佳实践已经出现在官方文档中,地址在 Best practices for writing Dockerfiles.如果再写一份最佳实践,倒有点关公门前耍大刀之意.因此本篇文章是 ...
 - 《容器高手实战: Dockerfile最佳实践》
		
Dockerfile最佳实践一个容器对应一个进程一个Docker容器应该只对应一个进程,也就是一个Docker 镜像一般只包含一个应用的制品包(比如.jar). 在需要组合多个进程的场景,使用容器组( ...
 - Dockerfile 最佳实践
		
之前 一篇文章介绍 docker 的镜像基本原理和概念 ,主要介绍在编写 docker 镜像的时候一些需要注意的事项和推荐的做法. 虽然 Dockerfile 简化了镜像构建的过程,并且把这个过程可以 ...
 - go项目dockerfile最佳实践
		
1. 前言 2. 不需要cgo情况下的最佳实践 3. 依赖cgo情况下的最佳实践 1. 前言 这几天在构建golang编写的web项目中,关于dockerfile编写的一些总结 可能是单纯我比较菜(大 ...
 - 编写 Dockerfile 最佳实践
		
官方仓库虽然有数十万计的免费镜像,但大多数无法直接满足公司业务需求,这就需要我们自己去定制镜像了. Docker通过Dockerfile自动构建镜像,Dockerfile是一个包含用于组建镜像的文本文 ...
 - 8、Dockerfile介绍和最佳实践
		
一.Dockerfile 概念 1.Dockerfile是什么 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如 ...
 - Dockerfile 命令详解及最佳实践
		
Dockerfile 命令详解 FROM 指定基础镜像(必选) 所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜像是必须指 ...
 - 8.云原生之Docker容器镜像构建最佳实践浅析
		
转载自:https://www.bilibili.com/read/cv15220861/?from=readlist 本章目录 0x02 Docker 镜像构建最佳实践浅析 1.Dockerfile ...
 
随机推荐
- javascript深度克隆对象
			
/** * * @param obj * @returns {*} */ //深度克隆 function cloneObject(obj) { if (obj === null || typeof(o ...
 - 利用js_API 执行对html文档元素的属性的CRUD操作
			
转自:http://my.oschina.net/felay/blog/303470 <!DOCTYPE html> <html> <head> <meta ...
 - rapidxml修改节点的值
			
1.rapidxml修改节点的value,修改之后,序列化还是原来的值,具体原因是什么,要看rapidxml是怎么实现的.如下: void TestRapidXml() { ]; sprintf(xm ...
 - 整数划分问题--DFS
			
单点时限:1000ms 内存限制:256MB 描写叙述 Given two positive integers N and M, please divide N into several intege ...
 - Discuz常见大问题-如何允许用户插入视频-如何自己在页面中插入视频
			
从视频的下面分享中获取html代码 然后粘贴到你创建页面的指定位置(注意从优酷复制的视频宽度和高度可能比较小,你可以自己调整,或者占据100%) 最终的实现效果
 - 【设计模式】学习笔记15:代理模式(Proxy Pattern)
			
本文出自 http://blog.csdn.net/shuangde800 本笔记内容: 1. JAVA远程代理调用(RMI) 2. 代理模式 走进代理模式 在上一篇的状态模式中,我们实现了一个糖 ...
 - Sql_Handle and Plan_Handle Explained
			
For batches, the SQL handles are hash values based on the SQL text. For database objects such as sto ...
 - 解决win10 获取不到ip
			
1.检查Dhcp服务是否启动 2.关闭防火墙
 - 【Oracle】锁
			
Oracle所有锁的分配和管理都是数据库管理系统自动完成的,不需要用户进行干预. v$lock表说明 字段 描述 ADDR Address of lock state object KADDR Add ...
 - Sqlite 复制表结构和数据
			
复制表结构 ; 复制表结构和数据 create table newTb as select * from oldTb: