问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何创建一个安全的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 &gt; VOLUME &gt; 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或用户需要的其它...

kubernetes 镜像 创建镜像 镜像安全 如何镜像 建立镜像网站 建立镜像什么意思 打开镜像 什么是镜像 镜像怎么做
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
尤卓尔软膏的作用 杨晓丹相关评论 尤卓尔软膏能用在脸上吗 戴尔笔记本电脑的摄像头怎么打开使用? 尤卓尔软膏可以涂脸吗 做凉粉的技巧有什么? 尤卓尔丁酸氢化可的松乳膏的功效 荔枝放冰箱冷藏还是冷冻 荔枝放冰箱冷藏吗 北京鲸奇林动画公司公司简介 海信饮料展示柜610升多少钱单开门? 如何在Linux中备份,恢复和迁移Docker容器 关于docker容器是怎样建立新的namespace的 如何实时查看Docker容器占用的CPU,内存状态 如何使用 Docker 来限制 CPU,内存和 IO等资源 网上订火车票手机上应该下载什么软件? 专人抢票是什么意思 12306网上订火车票官网下载客户端抢票王 12306抢票软件,急求呀? 抢火车票下载什么软件最好 12306官方抢票助手怎么用的 请问,12306抢票软件是怎么下载的? 如何在电脑中安装12306分流器 快速网上订火车票的软件有哪些? 好用的抢票软件有哪些? 招商局和招商银行什么关系 招商银行是什么性质的银行 招商银行和工商银行一样吗 请问一下招商银行包括中国建设银行或者中国银行吗? 中国银行和中国招商银行什么区别? 中国银行和招商银行 docker 上运行ubuntu容器里可以安装图形界面吗 docker从容器中怎么访问宿主机 linux服务器docker安装后能不能部署windows镜像 linux namespace 和cgroup 的区别 公积金贷款结清后,何时可以办理撤销抵押业务 公积金贷款解抵押流程是什么 解押公积金贷款都需要什么手续大概多长时间? 提取公积金怎么解除担保关系 公积金贷款还完后如何办理贷款解押手续 用房产作抵押贷公积金现解除抵押需什么资料 公积金贷款提前还完,能解抵押吗? 公积金贷款解抵押流程 公积金贷款去年已还清,今年去撤抵押,需要什么手续? 公积金抵押贷款提前还款多久可以拿解压资料 公积金贷款怎么解压 公积金贷款还清后,如何办理抵押登记注销手续?? 公积金贷款若已还清,在房产证解除抵押流程里 我用公积金贷款买的房子可以抵押贷款吗? 公积金贷款还清后怎么解抵押拿房产证 公积金贷款抵押完成后可不可以撤销抵押