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游戏,街头霸王
在线演示 本地下载 街头霸王,有没有记起点什么?我想起了那个有颗大槐树的老院子,还有一台小霸王和一个儿时的伙伴.
- ZH奶酪:在博客中添加Latex公式
1. 点击编辑器中的插入图片: 2.在URL输入下边的地址: http://latex.codecogs.com/gif.latex?你的latex代码 就可以了-
- ubuntu server vsftpd 虚拟用户及目录
ubuntu server vsftpd 虚拟用户及目录 一:需求场景: 在ubuntu server上开设一个虚拟网站,在网站目录建立一个ftp目录,允许用户通过ftp上传网站文件到网站目录: 同时 ...
- iOS类方法实例方法 与 self
Objective-C里面既有实例方法也类方法.类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenience method).工厂方法的称 ...
- 微信小程序 - 实现购物车结算
示例源码下载:小程序-实现购物车结算
- STS项目html文件中文乱码解决
解决方案: windows -- perferences -- encoding,设置成utf-8 步骤一:Content Types 步骤二:Workspace 步骤三:JSP Files
- js立即执行函数应用--事件绑定
js中立即执行函数的应用:应用到事件绑定上. 少说多做,直接运行代码(代码中有注释): <!DOCTYPE html> <html lang="zh"> & ...
- DOS批处理高级教程
转载-->http://blog.csdn.net/lanbing510/article/details/7461073 前言 本教程主要引用伤脑筋版主的系列文章,同时参考引用[英雄]教程等其他 ...
- bzr登陆加密
bzr提示:You have not informed bzr of your Launchpad ID, and you must do this towrite to Launchpad or a ...
- demo02
class PhoneNumber(): def __init__(self,number): self.a=number[1:4] self.b=number[6:9] self.c=number[ ...