我们在使用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.wdf.sap.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.corp:8080
ENV https_proxy http://sap.corp:8080
ENV no_proxy .sap.corp# 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.wdf.sap.corp/raw/slvi/docker-k8s-training/master/docker/res/cheers.jpg && \
wget --no-check-certificate -O /usr/share/nginx/html/index.html https://github.wdf.sap.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的原创文章,请关注公众号"汪子熙":

转载于:https://www.cnblogs.com/sap-jerry/p/10029824.html

从头基于空镜像scratch创建一个新的Docker镜像相关推荐

  1. 最简单的Docker镜像教程:从头基于空镜像scratch创建一个新的Docker镜像

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

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

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

  3. 创建一个新的extender

    写在前面的话: 本人在前一段的ASP.NET AJAX的学习中,本想使用一个<ajaxToolkit:ValidatorCalloutExtender >,但是折腾了几天,发现不能够使用, ...

  4. 01_创建一个新的activityactivity配置清单文件

    今天开始学四大组件.今天是学Activity,然后是广播接收者,然后是服务,然后是内容提供者.四大组件,咱们一天一个.Activity就是跟用户交互的界面,大部分的应用都不会只有这么一个界面.创建多个 ...

  5. 如何在Java中创建一个新的List

    本文翻译自:How to make a new List in Java We create a Set as: 我们创建一个Set为: Set myset = new HashSet() How d ...

  6. 关卡设计快速入门_3. 创建一个新关卡

    接下来,创建一个新关卡,来构建您的游戏环境.当创建一个新关卡时,就和您创建一个新项目类似.虚幻引擎允许您选择 模板 .默认情况下,有一个 默认 模板(它具有非常简单的场景) 和一个 Empty Lev ...

  7. C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)

    文章目录 名称 使用格式 功能参数描述 参数 sockfd addr addrlen 返回值 示例 man 2 文档中的accept解释 错误处理 名称 accept() 接收一个套接字中已建立的连接 ...

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

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

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

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

最新文章

  1. idea缩写快捷键_IDEA快捷键大全 快速页面重构
  2. MIT重磅报告:一文看清AI商业化现状与未来
  3. Problem 60 关于解决X11的错误的问题?
  4. C语言第五讲,语句 顺序循环选择.
  5. itertools库
  6. .Net软件工程师必备面试题134道
  7. 关于Django综述
  8. Leansoft再发招贤令:面试官徐磊有话讲 | IDCF
  9. 工作流实战_09_flowable 流程实例挂起与激活
  10. nginx 代理到其他端口_「从单体架构到分布式架构」请求增多,单点变集群(2):Nginx...
  11. 免费仿站_扒站工具下载-IDM站点抓取
  12. List map 转 list对象
  13. 极坐标格式下的二维傅里叶变换与逆变换推导
  14. Mac连局域网打印机
  15. 计算机相关知识——阻塞和非阻塞,同步和异步等相关概念
  16. 张勇用最严厉的内部信,敲打阿里云,也在提振阿里士气
  17. 怎么python画好几朵玫瑰花_使用Python画玫瑰花
  18. 苹果手机上网很慢_别再重启iPhone了!信号不好,这样设置让手机网速如飞
  19. 计算机网络各层协议说明及常见协议
  20. photoshop CC制作gif动图

热门文章

  1. Linux 删除指定目录下的文件/删除文件
  2. centos6.5 rpm安装mysql_CentOS6.5系统下RPM包安装MySQL5.6(转)
  3. dcdc芯片效率不高的原因_研学丨燃料电池车的典型效率及能耗
  4. python默认字体大小_python – 如何设置PIL加载的默认字体的大小,使其适合我的8×8矩阵?...
  5. python字典编码_python中包含UTF-8编码中文的列表或字典的输出
  6. 华南理工网络教育计算机概论,2020年《计算机概论》平时作业华南理工网络教育学院.pdf...
  7. envi最大似然分类_闲谈最大后验概率估计(MAP estimate)amp;极大似然估计(MLE)和机器学习中的误差分类...
  8. mysql触发器中case语句_一个很好的触发器例子(case when)
  9. 天线3db波束宽度_浅谈 Wi-Fi 天线(2)
  10. ajax get请求_python测试开发django50.jquery发送Ajax请求(get)