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 容器,并将整个容器设置为只读,但以下文件夹除外:

/var/lib/mysql
/var/run/mysqld
/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程序员研修院

相关推荐
MyCollege19992 分钟前
以UEFI模式从U盘安装centos遇到空间不足
linux·运维·centos
草木红9 分钟前
Docker 和 portainer 安装
运维·docker·容器·portainer
weixin_4624462315 分钟前
Docker 容器因配置错误无法启动的恢复方法(实战教程)
docker·无法启动
伞啊伞17 分钟前
k8s(三)操作管理
云原生·容器·kubernetes
云飞云共享云桌面21 分钟前
昆山精密机械工厂研发部门10个SolidWorks如何共享一台服务器来进行设计办公
运维·服务器·网络·人工智能·电脑
羑悻的小杀马特1 小时前
【Linux篇章】穿越网络迷雾:揭开 HTTP 应用层协议的终极奥秘!从请求响应到实战编程,从静态网页到动态交互,一文带你全面吃透并征服 HTTP 协议,打造属于你的 Web 通信利刃!
linux·运维·网络·http·操作系统·网络通信
网安CILLE1 小时前
Linux 命令大全(网络安全常用)
linux·运维·服务器·网络安全
x10n91 小时前
理解K8s动态准入控制器-基于Admission Webhook实现Sidecar自动注入检验等
云原生·容器·kubernetes·k8s准入控制器
vivo互联网技术1 小时前
智取流量,效赢增长-拨测和融合流量管理业务赋能实践
运维
allway21 小时前
Understanding and Resolving StrictModes Issues in SSHD Configuration
运维·服务器