Docker 命令——安全

我们将学习两个命令。第一个命令是 docker container run 命令,这样你就能看到使用该命令的一些好处。其次,我们将看看 docker container diff 命令,你可以用它来查看在已有的镜像基础上做了什么。让我们看看如何使用这两个命令来确保容器的安全。

Docker Run 命令

关于 docker run 命令,我们将主要关注允许将容器内的所有内容设置为只读的选项,而不是指定的目录或卷。这有助于限制恶意 "应用程序 "可能造成的破坏,因为恶意 "应用程序 "也可能通过更新二进制文件来劫持易受攻击的应用程序。让我们来看看如何启动只读容器,然后再分析它的作用,具体如下:

docker container run -d --name mysql --read-only -v /
var/lib/mysql -v /tmp -v /var/run/mysqld -e MYSQL_ROOT_
PASSWORD=password mysql

在这里,我们运行一个 MySQL 容器,并将整个容器设置为只读,但以下文件夹除外:

  1. /var/lib/mysql
  2. /var/run/mysqld
  3. /tmp

这些卷将创建为三个单独的卷,然后以读/写方式挂载。如果不添加这些卷,MySQL 将无法启动,因为它需要读/写访问权限才能在 /var/run/mysqld 中创建套接字文件,在 /tmp 中创建一些临时文件,最后在 /var/lib/mysql 中创建数据库本身。

容器内的任何其他位置都不允许写入任何内容。如果您尝试运行以下程序,就会失败:

docker container exec mysql touch /trying_to_write_a_file

前面的命令会给出如下信息:

如果可以控制容器可写入(或不可以写入)的位置,这将非常有用。请务必明智使用。彻底测试,因为当 "应用程序 "无法写入某些位置时可能会产生严重后果。

与上一条命令类似,在 docker 容器运行时,我们将所有内容都设置为只读(指定卷除外),而现在我们可以反其道而行之,只将一个卷(或更多,如果使用更多 -v 开关)设置为只读。

关于卷,需要记住的一点是,当你使用一个卷并将其挂载到容器中时,它将作为一个空卷挂载到容器内目录的顶部,除非你使用 --volumes-from 开关或在容器启动后以其他方式将数据添加到容器中;例如,你可以使用类似下面的命令:

docker container run -d -v /local/path/to/html/:/var/www/
html/:ro nginx

 这将把 /local/path/to/html/ 从 Docker 主机挂载到 /var/www/html/,并将其设置为只读。如果不想让运行中的容器写入卷,以保持数据或配置文件的完整性,这将非常有用。

Docker diff 命令

让我们再来看看 docker diff 命令;由于它与容器的安全方面有关,你可能想使用托管在 Docker Hub 或其他相关存储库中的镜像。请记住,无论谁能访问你的 Docker 主机和 Docker 守护进程,他都能访问你所有正在运行的 Docker 容器。也就是说,如果你没有进行监控,就可能有人对你的容器执行命令并进行恶意操作。让我们看看在上一节中启动的 MySQL 容器:

docker container diff mysql

您会发现没有文件返回。这是为什么呢?

那么,docker diff 命令就会告诉你,自从容器启动以来,映像发生了哪些变化。在上一节中,我们启动了只读映像的MySQL容器,然后将卷挂载到我们知道MySQL需要能够读写的地方--这意味着我们下载的镜像和正在运行的容器之间没有文件差异。

停止并移除 MySQL 容器,然后运行以下操作修剪卷:

docker container stop mysql
docker container rm mysql
docker volume prune

然后,再次启动相同的容器,去掉只读标记和卷,就会得到不同的结果,如下所示:

docker container run -d --name mysql -e MYSQL_ROOT_
PASSWORD=password mysql
docker container exec mysql touch /trying_to_write_a_file
docker container diff mysql

如你所见,创建了两个文件夹,并添加了几个文件:

这是发现容器内任何不正常或意外情况的好方法

以上步骤,并没有解释每个docker命令的含义,是比较基础的操作,如果您对以上的命令不太熟悉,可以参考我的docekr课程,有对各类命令的详细讲解:Docker 实战_在线视频教程-CSDN程序员研修院

 

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

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

相关文章

深度学习在蛋白质结构预测的新突破:AlphaFold、RoseTTAFold与ESMFold

在蛋白质结构预测和功能预测领域,基于机器学习的方法最近取得了显著的进展。特别是深度学习技术在这个领域中展现出了强大的能力,代表性的技术有 DeepMind 的 AlphaFold 和 RoseTTAFold。这些技术利用了大量的生物数据和先进的神经网络架构,极…

调试代码Pair-wise-Similarity-module-master

第一步:运行.py文件生成json文件 问题一:json.decoder.JSONDecodeError: Invalid \escape: line 1 column 31616 (char 31615) 解决: for dataset in dataset_list:with open(datasetmap[dataset] ".csv", "r") as li…

什么是Arkose Labs挑战及其解决方法

Arkose Labs挑战是一种复杂的机制,旨在验证用户是真正的人类,而不是自动化的机器人或脚本。这一挑战在维护在线服务的安全性和完整性方面发挥着关键作用,通过防止欺诈活动并确保只有真实用户才能访问某些功能。 目录 什么是Arkose Labs挑战&a…

Python 基础 (标准库):堆 heap

1. 官方文档 heapq --- 堆队列算法 — Python 3.12.4 文档 2. 相关概念 堆 heap 是一种具体的数据结构(concrete data structures);优先级队列 priority queue 是一种抽象的数据结构(abstract data structures)&…

微信小程序-自定义组件checkbox

一.自定义Coponent组件 公共组件:将页面内公共的模块抽取为自定义组件,在不同页面复用。 页面组件:将复杂页面进行拆分,降低耦合度,有利于代码维护。 可以新建文件夹component放组件: 组件名为custom-che…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验3 总线型以太网的特性(广播,竞争总线,冲突)

一、实验目的 1.验证总线型以太网的特性; 2.验证广播特性; 3.验证各主机对总线的竞争使用以及可能产生的碰撞。 二、实验要求 1.使用Cisco Packet Tracer仿真平台; 2.观看B站湖科大教书匠仿真实验视频,完成对应实验。 三、实验内容…

PatchMixer:一种用于长时间序列预测的Patch混合架构

前言 《PatchMixer: A Patch-Mixing Architecture for Long-Term Time Series Forecasting》原文地址,Github开源代码地址GitHub项目地址Some-Paper-CN。本项目是译者在学习长时间序列预测、CV、NLP和机器学习过程中精读的一些论文,并对其进行了中文翻译…

软件测试学习笔记丨JUnit5执行顺序

本文转自测试人社区,原文链接: https://ceshiren.com/t/topic/28025 指定顺序使用场景 测试用例有业务逻辑相关集成测试(主流程测试) 排序方式 方法排序类排序Suite官方网站没有明确说明默认排序的具体规则 方法排序的类型 方法排序-Order 注解指定排序 …

python中的nan是什么意思

NaN(not a number),在数学表示上表示一个无法表示的数,这里一般还会有另一个表述inf,inf和nan的不同在于,inf是一个超过浮点表示范围的浮点数(其本质仍然是一个数,只是他无穷大&…

利用ChatGPT优化程序员工作流程:实用案例分享

近年来,人工智能技术的迅猛发展给各行各业带来了翻天覆地的变化。作为其中的一员,程序员在工作中也受益匪浅。其中,ChatGPT的出现,更是成为优化程序员工作流程的得力助手。本文将通过多个实用案例,分享如何利用ChatGPT…

使用ChatGPT提升编程效率:程序员的最佳实践分享

在这个信息技术飞速发展的时代,编程已经成为了越来越多人的必备技能。无论你是初学者,还是经验丰富的开发者,都可能会遇到编程中的各种问题和挑战。幸运的是,AI 技术的进步让我们有了新的解决工具——ChatGPT。作为一名科技博客博…

Java+ffmpeg 合并两个mp4文件

使用ffmpeg测试命令 测试命令时系统要安装ffmpeg并配置环境变量:初识ffmpeg、安装配置-CSDN博客 ffmpeg -i "E:\Monitor\video_20240617_10.mp4" -i "E:\Monitor\video1_20240617_10.mp4" -filter_complex "[0:v][0:a][1:v][1:a]conc…

从零入门激光SLAM(十三)——LeGo-LOAM源码超详细解析3

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激…

【Linux】进程信号_2

文章目录 八、进程信号1. 信号 未完待续 八、进程信号 1. 信号 除了可以使用 kill 命令和键盘来生成信号,我们也可以使用系统调用来生成信号。 kill函数可以对指定进程发送指定信号。 使用方法: int main(int argc, char *argv[]) {if (argc ! 3) {c…

Python数据分析之-Oracle数据库连接

文章目录 cx_Oracle 介绍cx_Oracle运行原理cx_Oracle 安装linux环境安装windows环境安装 cx_Oracle 使用单独使用结合Pandas使用 参考资料 cx_Oracle 介绍 cx_Oracle 8是一个Python扩展模块,它提供了对Oracle数据库的访问能力。以下是cx_Oracle 8的一些关键特性和功…

【华为OD机试|01】最远足迹(Java/C/Py/JS)

目录 一、题目介绍 1.1 题目描述 1.2 备注: 1.3 输入描述 1.4 输出描述 1.5 用例 二、Java代码实现 2.1 实现思路 2.2 详细代码 2.3 代码讲解: 三、C语言实现 3.1实现步骤 3.2 实现代码 3.3 代码详解 四、Python实现 4.1 实现步骤 4.2 …

项目实战系列三: 家居购项目 第六部分

文章目录 🌈Ajax检验注册名🌈Ajax添加购物车🌈上传与更新家居图片🌈作业布置🍍会员登陆后不能访问后台管理🍍解决图片冗余问题🍍分页导航完善 🌈Ajax检验注册名 需求分析 注册会员时…

推动多模态智能模型发展:大型视觉语言模型综合多模态评测基准

随着人工智能技术的飞速发展,大型视觉语言模型(LVLMs)在多模态应用领域取得了显著进展。然而,现有的多模态评估基准测试在跟踪LVLMs发展方面存在不足。为了填补这一空白,本文介绍了MMT-Bench,这是一个全面的…

js获取字符串中超链接,并加样式跳转页面

效果图 主要代码:js this.$nextTick(() > {// 给循环出来的div标签加个id为let container document.getElementById("linkTo");container.innerHTML container.textContent.replace(/(https?:\/\/[^\s])/g, function (match) {var link documen…

【微前端-Single-SPA、qiankun的基本原理和使用】

背景 在实际项目中,随着日常跌倒导致的必然墒增,项目会越来越冗余不好维护,而且有时候一个项目会使用的其他团队的功能,这种跨团队不好维护和管理等等问题,所以基于解决这些问题,出现了微前端的解决方案。…