如何创建一个安全的Docker基镜像
发布网友
发布时间:2022-04-21 12:34
我来回答
共1个回答
热心网友
时间:2022-04-10 10:46
## 背景 ##
我最初使用Docker的时候,每个人都在说它用起来有多简单方便,它内部的机制是有多么好,它为我们节省了多少时间。但是当我一使用它就发现,几乎所有镜像都是臃肿而且不安全的(没有使用包签名,盲目相信上游的镜像库以<code>curl | sh</code>的方式安装),而且也没有一个镜像能实现Docker的初衷:隔离,单进程,容易分发,简洁。
Docker镜像本来不是为了取代复杂的虚拟机而设计的,后者有完整的日志、监控、警报和资源管理模块。而Docker则倾向于利用内核的<code>cgroups</code>和<code>namespaces</code>特性进行封装组合,这就好像:
在物理机器环境下,一旦内核完成了初始化,<code>init</code>进程就起来了。这也是为什么当你在Dockerfile的<code>CMD</code>指令启动的进程PID是1,这是与Unix中的进程机制类似的。
现在请查看一下你的进程列表,使用<code>top</code>或者<code>ps</code>,你会看到<code>init</code>进程占用的也是这个PID,这是每个类Unix系统的核心进程,所有进程的父进程,一旦你理解这个概念:在类Unix系统上每个进程都是init进程的子进程,你会理解Docker容器里不应该有无关的修饰文件,它应该是刚好满足进程运行需要。
如何开始
现在的应用多数是大型复杂的系统,通常都需要很多依赖库,例如有调度,编译和很多其他相关工具类应用,它们的架构通常封装性良好,通过一层层的抽象和接口把底层细节隐藏了,从某种程度上说,这也算是一种容器,但是从系统架构视角看,我们需要一种比以往虚拟环境更简单的方案了。
以Java为例
从零开始,思考你要构建一个最通用的基础容器,想想你的应用本身,它运行需要什么?
可能性有很多,如果你要运行Java应用,它需要Java运行时;如果运行Rails应用,它需要Ruby解释器,对Python应用也一样。Go和其他一些编译型语言有些许不同,我以下会提到。
在Java例子中,下一步要想的是:JRE需要什么依赖才能运行?因为它是让应用能运行的最重要的组件,所以很自然的下一步就是要想清楚JRE运行依赖于什么。
而实际上JRE并没太多依赖,它本来就是作为操作系统的抽象层,使代码不依赖于宿主系统运行,因此安装好JRE就基本准备就绪了。
(实际上,对操作系统的独立性并不是理所当然的事,有非常多的系统特有API和专有的系统扩展,但是便于举例,我们把注意力放在简单的情况下)
在Linux上,JVM主要是调用系统的C语言库,Oracle的官方JRE,使用的是libc,也就是glibc,这意味着你要运行任何Java程序,都需要先装好glibc。另外你可能需要某种shell来管理环境,还有一个与外部通讯的接口,例如网络和资源的接口。
我们总结一下Java应用示例需要的最低配置是:
JRE,在例子中我们使用Oracle JRE
glibc,JRE的依赖
一个基础环境(包含网络、内存、文件系统等资源管理工具)
怎么创建docker镜像
1. 使用Dockerfile构建镜像。Dockerfile是一个文本文件,其中包含了一系列创建镜像所需要的指令和配置。通过编写Dockerfile,可以定义镜像的基础镜像、环境变量、暴露的端口、安装的软件包等。然后,使用Docker命令构建镜像。详细解释:编写Dockerfile Dockerfile是创建Docker镜像的核心文件。它包含了一系列指令,...
科瑞斯达新建工厂
科瑞斯达公司宣布新建现代化工厂,标志着其在智能制造领域的又一重要布局。该工厂将融合最前沿的生产技术与智能化管理系统,大幅提升生产效率与产品质量。项目落成后,不仅将强化科瑞斯达的产能基础,更将助力其在行业内持续引领创新潮流,为客户提供更加卓越的产品与服务。此举体现了科瑞斯达对未来发展的坚定信心与长远规划。科瑞斯达新建工厂自创建以来,坚持以技术研发为驱动,专注于提供工业领域人工智能和数字化解决方案,基于丰富实践,利用大数据、边缘计算、物联网、工业AI赋能工业软件的研发与应用,协助各行业企业建立持续性竞争优势。团队多来自于世界500强企...
Docker之构建镜像
Docker构建镜像有多种方法,本文将介绍其中两种主要方式:docker commit命令和Dockerfile。首先,通过docker commit创建镜像。以Ubuntu 18.04为例,我们首先在容器ubuntu-1中安装tree命令,安装成功后,使用docker commit命令以ubuntu-1为基础,添加描述信息和作者,形成自定义镜像,例如aaron1995/custom-ubuntu。
如何使用Dockerfile创建镜像
首先,创建一个基础的Dockerfile,它包含多个关键指令。FROM指令指定了镜像的基础,如FROM alpine:3.14,后续指令在此基础上进行。VOLUME用于设置数据卷,EXPOSE则声明了容器中公开的端口。一个基本的Dockerfile结构如:FROM > VOLUME > EXPOSE。Dockerfile中的指令,如FROM、RUN、CMD、LABEL、ENV和ARG,每...
使用dockerfile构建docker镜像,如何创建和构建 Dockerfile|构建属于...
首先,确保你已经准备好了VPS,并通过SSH工具与其连接。登录后,首要步骤是更新系统以获取最新的软件包,这可以通过执行相应的命令来完成。接着,为了安装Docker,你可以选择一键安装脚本,这通常能在官方文档或相关教程中找到指导。在安装完成后,创建一个新的文件夹,以便组织你的Docker相关文件。进入这个文...
docker构建的镜像的三种方式
构建Docker镜像有三种常见方式,每种都有其独特的优势和适用场景。首先,容器提交允许快速创建镜像,适合临时或实验性任务,但不推荐频繁使用,因为它缺乏变更追踪的透明度。其次,Dockerfile构建提供了更精确和可重复的镜像构建过程,通过编写Dockerfile,可以定义镜像构建的详细步骤,比如基于FastAPI的Hello World...
一篇文章帮你搞定 Docker 本地镜像仓库构建-harbor,建议收藏!
重启docker服务:systemctl daemon-reload, systemctl restart docker添加harbor到hosts文件:编辑hosts文件并配置DNS解析使用docker登录harbor:docker login admin操作私有仓库:拉取和上传镜像,如:docker pull 10.0.0.201/test/tomcat:v1, docker push 10.0.0.201/test/tomcat:v1清理镜像:docker rmi...
创建Python Docker 镜像的完整指南
准备工作首先,确保安装Docker。若未安装,依操作系统指引安装。然后,在工作目录创建用于构建镜像的目录,并在其中开发Python应用文件。编写Python应用,如创建app.py文件,添加简单代码。接着,编写Dockerfile,指引Docker构建镜像。在工作目录创建编辑Dockerfile,指示构建过程。Dockerfile步骤包括:选择基础镜像...
docker 怎么创建基础镜像
创建一个安全的Docker基镜像的方法 构建一个Java环境基镜像 正如我刚解释的,Alpine Linux是一个构建自有镜像时不错的选择,因此,我们在此将使用它来构建简洁高效的Docker镜像,我们开始吧!组合:Alpine + bash 每个Dockerfile第一个指令都是指定它的父级容器,通常是用于继承,在我们的例子中是alpine:...
如何创建一个安全的Docker基础镜像
当想让一个容器做两件事情,或者使一个Docker镜像包含来自两个不同镜像的依赖库时,就需要知道每个镜像的Dockerfile。本文介绍了如何通过docker history命令来对Docker镜像进行反向工程,得到它们的Dockerfile,并组织到一个Dockerfile里然后bui...
Docker(2)——构建镜像命令解析
1、镜像构建流程为首先将指定的上下文(contextpath)路径下的文件打包,发送到服务端。服务端再将收到的文件解压,然后以解压后的路径作为上下文,进行镜像构建。2、镜像(image)Docker镜像(Image)就是一个只读的模板。例如:一个镜像可以包含一个完整的操作系统环境,里面仅安装了Apache或用户需要的其它...