我们在使用Dockerfile构建docker镜像时,一种方式是使用官方预先配置好的容器镜像。优点是我们不用从头开始构建,节省了很多工作量,但付出的代价是需要下载很大的镜像包。

比如我机器上docker images返回的这些基于nginx的镜像,每个都超过了100MB,而一个简单的Ubuntu的容器超过了200MB,如果安装了相关的软件,尺寸会更大。

如果我们的需求是在构建一个符合我们实际业务需求的Docker镜像的前提下,确保镜像尺寸尽可能的小,应该怎么做呢?

思路是使用空镜像scratch。

新建一个文件夹,用wget下载rootfs.tar.xz压缩包。

wget -O rootfs.tar.xz https://github.com/debuerreotype/docker-debian-artifacts/raw/b024a792c752a5c6ccc422152ab0fd7197ae8860/jessie/rootfs.tar.xz

这个将近30MB的压缩包是个什么东东?

解压之后看内容就知道了,包含了操作系统大部分常用命令。

wget -O nginx.conf https://github.diablo.corp/raw/slvi/docker-k8s-training/master/docker/res/nginx.conf

新建一个dockerfile文件,将下列内容粘贴进去:

FROM scratch# set the environment to honour SAP's proxy servers
ENV http_proxy http://sap:8080
ENV https_proxy http://sap:8080
ENV no_proxy .sap# give yourself some credit
LABEL maintainer="Jerry Wang"# add and unpack an archive that contains a Debian root filesystem
ADD rootfs.tar.xz /# use the apt-get package manager to install nginx and wget
RUN apt-get update && \
apt-get -y install nginx wget# use wget to download a custom website into the image
RUN wget --no-check-certificate -O /usr/share/nginx/html/cheers.jpg https://github.diablo.corp/raw/slvi/docker-k8s-training/master/docker/res/cheers.jpg && \
wget --no-check-certificate -O /usr/share/nginx/html/index.html https://github.diablo.corp/raw/slvi/docker-k8s-training/master/docker/res/cheers.html# copy the custom nginx configuration into the image
COPY nginx.conf /etc/nginx/nginx.conf# link nginx log files to Docker log collection facility
RUN ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log# expose port 80 - the standard port for webservers
EXPOSE 80# and make sure that nginx runs when a container is created
CMD ["nginx", "-g", "daemon off;"]

执行命令进行镜像的构建:

docker build -t nginx-from-scratch1.0 .

产生的日志:

最后看到镜像成功构建的消息。

基于这个名为nginx-from-scratch的镜像启动一个新的nginx容器:

localhost:1083, 看到首页,说明这个新构建的镜像工作正常。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

最简单的Docker镜像教程:从头基于空镜像scratch创建一个新的Docker镜像相关推荐

  1. 从头基于空镜像scratch创建一个新的Docker镜像

    我们在使用Dockerfile构建docker镜像时,一种方式是使用官方预先配置好的容器镜像.优点是我们不用从头开始构建,节省了很多工作量,但付出的代价是需要下载很大的镜像包. 比如我机器上docke ...

  2. Illustrator教程之 在 Ai 2022中创建一个新文档

    欢迎观看Illustrator教程,小编带大家学习 Illustrator 的基本工具和使用技巧,了解如何在 Ai 2022中制作新文档. 在Illustrator中有很多方法可以开始一个新项目.可以 ...

  3. Spring MVC:使用基于Java的配置创建一个简单的Controller

    这是我博客上与Spring MVC相关的第一篇文章. 开端总是令人兴奋的,因此我将尽量简洁明了. Spring MVC允许以最方便,直接和快速的方式创建Web应用程序. 开始使用这项技术意味着需要Sp ...

  4. docker commit (从容器创建一个新的镜像)

    从容器创建一个新的镜像 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] -a :提交的镜像作者:-c :使用Dockerfile指令来创建镜像 ...

  5. PS网页设计教程XV——如何在Photoshop中创建一个充满活力的作品集的网页设计

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作诗也会吟". 本系列的教程来源于网上的PS教程,都是国外的 ...

  6. PS网页设计教程XXVI——如何在PS中创建一个专业的网页布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作诗也会吟". 本系列的教程来源于网上的PS教程,都是国外的 ...

  7. PS网页设计教程V——如何在Photoshop中创建一个商业网站布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作诗也会吟". 本系列的教程来源于网上的PS教程,都是国外的 ...

  8. PS网页设计教程IV——如何在Photoshop中创建一个专业博客网站布局

    向Talk-Mania网站致敬.一年前,在该网站上看过许多不错的网页设计教程.一年后,再回头想看看有没有什么新的教程的时候,蓦然发现该网站已经打不开了.也许是关闭了,也许是改了网站名了.幸好,去年本人 ...

  9. 如何创建一个安全的Docker基础镜像

    背景 我最初使用Docker的时候,每个人都在说它用起来有多简单方便,它内部的机制是有多么好,它为我们节省了多少时间.但是当我一使用它就发现,几乎所有镜像都是臃肿而且不安全的(没有使用包签名,盲目相信 ...

最新文章

  1. Toward perfect reads: self-correction of short reads via mapping on de Bruijn graphs
  2. 在 Java 中利用 redis 实现 LBS 服务
  3. 安装网关报mysql服务ini_linux 操作系统下ORACLE数据库使用透明网关连接MYSQL
  4. delete,drop,truncate 区别
  5. 虚拟化是云计算的第一步
  6. java 链接重排序_JAVA中JVM的重排序详细介绍
  7. 关联省份与学校的级联HTML,JS实现的省份级联实例代码
  8. Android的电话拨号器
  9. WMITesting
  10. 我的教师生涯4:被忘却的第一节课
  11. 三、optimizer_trace分析
  12. abap-商业发票管理系统
  13. html 长度vm,css vm是什么单位?
  14. 免费的顶级域名要在哪申请?
  15. python新版个人所得税代码_个人所得税计算代码
  16. Linux 邻居子系统介绍
  17. 【论文笔记】Predictive control of aerial swarms in cluttered environments
  18. 简单的博弈问题:牛羊吃草问题(递归解法-暴力解法)
  19. 利用C#脚本来处理Excel
  20. 波束形成 基于对角加载的稳健自适应波束形成

热门文章

  1. 文献学习(part25)--Regularization Paths for Generalized Linear Models via Coordinate Descent
  2. sklearn自学指南(part18)--多项式回归-用基函数扩展线性模型
  3. Django(part28)--F对象
  4. 小白的算法初识课堂(part5)--散列表
  5. R语言之MYSQL数据库获取及输出
  6. SAP Spartacus Page Layout - 页面布局设计
  7. Angular单元测试框架里API toHaveBeenCalledTimes的工作原理
  8. scss里父选择器的标识符
  9. SAP Spartacus Set Active BaseSite action执行的时间点 - Route路由触发方式
  10. rxjs operator学习笔记