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

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

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

1240

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

思路是使用空镜像scratch。

1240

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

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

1240

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

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

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 .

1240

产生的日志:
1240

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

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

localhost:1083, 看到首页,说明这个新构建的镜像工作正常。
1240
要获取更多Jerry的原创文章,请关注公众号"汪子熙":

1240

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python bool转string_Python:可以返回boolean和string吗?

原始问题我已经创建了一个等待特定字符串出现在串行端口上的函数,并返回所有字符读取,直到找到该字符串,否则返回false.这很方便,但我想知道它是否被认为是不好的做法?澄清:主要目标是等待特定字符串在给定的时间内出现.除IO错误外,可能的结果为True(字符…

在CockroachDB上运行Flowable

什么是CockroachDB? CockroachDB是一个我一直关注很长一段时间的项目。 这是一个开放源代码的Apache 2许可数据库( Github链接 ), 极大地从Google Spanner白皮书中汲取了灵感 。 它的核心是可水平扩展的键值存储。 但是&#xff0…

C error :Run-Time Check Failure #2 - Stack around the variable 'b' was corrupted.

运行程序遇到这样的错误:Run-Time Check Failure #2 - Stack around the variable b was corrupted. 检查后发现原因在于:数组b越界了,int b[4]里面有4个元素,包含b[0],b[1],b[2],b[3],没有b[4],赋值的时候把某个数据赋…

如何配置Apache虚拟主机?(基于IP、基于端口、基于域名)

一、Apache虚拟机配置前的准备工作 1、下载yum源2、安装yum包3、安装httpd包4、查看并关闭selinux5、取消中心主机cd /etc/httpd/confvim httpd.conf修改文件中的内容如下:当以上这些工作准备好之后,我们就可以来配置虚拟机了二、我们首先来做一个基于IP…

[bat]删除文件

删除文件 del /f /s /q D:\HRG\NEW_Vn\CSV\*.meta 删除空文件夹 只能先删完文件夹中的文件,再删除空文件夹 rd /s /q D:\HRG\NEW_Vn\CSV\ 脚本 修改 echo off echo --------------------WARNING-------------------- echo [%1] folder will be deleted echo -------…

vvv在线文档导出工具_一款真正实时的在线文档协作编辑工具,多人可同时对一份文件修改...

etherpad-lite一个非常实时的网络协作文字处理器Etherpad是一款真正实时的协作编辑器,可扩展到数千个同步实时用户。与所有其他协作工具不同,Etherpad提供完全保真的数据导出和可移植性,使其完全符合GDPR标准。语言Etherpad是在服务器和客户端…

Mat的初始化以及Mat与数组的相互转化

Mat类型数据的初始化方法可以有以下两种&#xff1a; 1、直接初始化 Mat_<float> T_L (Mat_<float>(3, 1) << -518.97666, 01.20629, 9.14632); 2、利用数组初始化 float A[4][3] { 0 }; Mat A_mat Mat(4, 3, CV_32F, A);//如果是double类型用64 注意&…

smp架构与numa架构_NUMA架构和Java

smp架构与numa架构是时候部署您的应用程序了&#xff0c;期待着采购最适合负载要求的硬件。 如今&#xff0c;具有40核或80核的包装盒非常普遍。 总体概念是更多的内核&#xff0c;更多的处理能力&#xff0c;更多的吞吐量。 但是我看到了一些相反的结果&#xff0c;表明在80核…

CGI跟我学

CGI 意思为 Common Gateway Interface, 一种基于浏览器的输入、在Web服务器上运行的程序方法. CGI脚本 使你的浏览器与用户能交互&#xff0c;为了在数据库中寻找一个名词, 提供你写入的评论&#xff0c;或者从一个表单中选择几个条目并且能得到一个明确的回答. 如果你曾经遇到…

opencv中的矩阵拼接

hconcat、vconcat Mat_<float> T_L (Mat_<float>(3, 1) << -518.97666, 01.20629, 9.14632);//平移向量 Mat_<float> T_R (Mat_<float>(3, 2) << 518.97666, -01.20629,-9.14632,518.97666, -01.20629, -9.14632);//旋转向量 Mat_<f…

Java注释是一个大错误

注释是在Java 5中引入的&#xff0c;我们都为之兴奋。 如此出色的工具可以缩短代码&#xff01; 不再有Hibernate / Spring XML配置文件&#xff01; 只是注释&#xff0c;就在我们需要它们的代码中。 没有更多的标记接口 &#xff0c;只有运行时保留的 反射可发现注释&#xf…

tcpdump 抓二层包_可能是我见过的最简单易懂且实用的 TCPDump 和 Wireshark 抓包及分析教程!( 强烈建议收藏 )...

公众号关注 「奇妙的 Linux 世界」设为「星标」&#xff0c;每天带你玩转 Linux &#xff01;本文将展示如何使用 tcpdump 抓包&#xff0c;以及如何用 tcpdump 和 wireshark 分析网络流量。文中的例子比较简单&#xff0c;适合作为入门参考。1. 基础环境准备为方便大家跟着上手…

JDBC分页查询及实现

当数据过多时&#xff0c;一页之内是无法显示的&#xff0c;因此需要进行分页显示。 &#xff08;一&#xff09;分页技术实现&#xff1a; 物理分页&#xff1a; - 在数据库执行查询时&#xff08;实现分页查询&#xff09;&#xff0c;查询需要的数据—-依赖数据库的SQL语句 …

SELinux深入理解

1. 简介 SELinux带给Linux的主要价值是&#xff1a;提供了一个灵活的&#xff0c;可配置的MAC机制。 Security-Enhanced Linux (SELinux)由以下两部分组成&#xff1a; 1) Kernel SELinux模块(/kernel/security/selinux) 2) 用户态工具 SELinux是一个安全体系结构&#xff0c;它…

头文件的写法

#ifndef SURF_FUNC_H_//大写&#xff0c;防止头文件被多次包含&#xff0c;防止与自带的头文件重复 #define SURF_FUNC_H_float** SURFCompare(Mat srcImage1, Mat srcImage2, float paraHessian);#endif 1.只需要将函数声明、宏定义、结构声明等内容写入。 2.头文件可以定义很…

windows调用python_如何在Windows操作系统中从R调用Python?

我正在寻找一种在Windows操作系统上调用R中的python的方法。因为似乎没有可用的R包(至少没有最近更新的包)&#xff0c;我正在寻找如何在R脚本中编写一组命令的线索&#xff0c;然后可以以批处理模式发送蟒蛇。简而言之&#xff0c;如何在Windows操作系统中从R调用python&#…

range

# i 1 # while i <100: # print(i) # i 1# range(参数) [0,参数) # for i in range(20): # range()可以被迭代 0-9 # print(i)# range(参数1, 参数2) [参数1, 参数2) 切片 # for i in range(10, 20): # print(i)# range(参数1, 参数2, 参数3) [参数1…

OSI七层网络模型与TCP/IP四层网络模型

2.1 OSI网络分层参考模型网络协议设计者不应当设计一个单一、巨大的协议来为所有形式的通信规定完整的细节&#xff0c;而应把通信问题划分成多个小问题&#xff0c;然后为每一个小问题设计一个单独的协议。这样做使得每个协议的设计、分析、时限和测试比较容易。协议划分的一个…

python小学生课本剧_二年级上学期课本剧

我们把这美丽的景色看个够。 (二人分别立在舞台两边&#xff0c;向远处眺望&#xff0c;作观赏状。) 小洁&#xff1a;(开心地)啊&#xff0c;岸上的景色真美&#xff01; 小刚&#xff1a;瞧&#xff0c;那些奇形怪状的石头真好看&#xff01; (石蛙、石鹰、石兔、石龟边舞边上…

用数组存储循环序号的数据

一个i&#xff08;i<10&#xff09;对应四个坐标值&#xff0c;需要用4*i大小的一维数组循环存储&#xff0c;或者用二维数组b[i][4]存储&#xff0c;i行4列。 一维存储方法&#xff08;类似于opencv存储彩图的顺序&#xff09;for (int i 0; i < viewMatches.size(); i…