如何在Docker ADD命令中添加凭证
简介
安全问题一直是人类的一个巨大威胁。在IT领域,凭证的安全是一项繁琐的工作。在这里,我们将讨论在docker容器中添加证书的各种方法。此外,还提到了最有用和最安全的方法。
方法
添加凭证可以通过很多不同的方式进行。下面提到了其中的一些类型。每种方法在行业中都有其地位。有些只是由于安全问题而被开发者拒绝,有些则在凭证安全方面效果很好。
- 在Dockerfile中使用构建参数。
-
在Dockerfile中使用环境变量。
-
使用Docker的秘密。
使用构建参数
使用构建参数来传递凭证是不可取的。这可能是一个安全问题。下文提到了构建参数的一个使用情况,并附有一个例子。
第1步:创建一个Docker文件和一个python程序文件
这个Docker文件将在ubuntu基础镜像上创建一个Python运行时。
示例
现在创建一个名为 “program.py “的python文件。
输出
第2步:建立图像
示例
输出
第3步:运行图像
现在,我们将运行这个图像,看看Python是否说你好。
示例
输出
因此,构建参数起了作用。
建立论点的缺点
这有安全方面的问题。参数的值可以被任何能够访问docker历史的人看到。
因此,这不是一个安全的凭证方法。
使用环境变量
构建参数只有在构建镜像时才可用。而环境变量在构建后也可用于镜像和容器。这就是构建参数和环境变量的主要区别。
在这里,我们将使用环境变量来传递给MySQL数据库的证书。
第1步:创建一个Docker文件
第2步:建立图像
示例
输出
第3步:运行镜像,无需传递证书,因为在Docker文件中已经设置了证书
第4步:进入MySQL容器,使用证书来启动数据库
示例
现在开始访问数据库。
输出
缺点
在这里,MYSQL也给了我们一个关于在命令行上使用密码的警告。直接在命令行上使用密码是不安全的。另外,我们不应该在Docker文件中使用密码,因为在Docker中使用expect命令可以看到。
示例
输出
因此,密码是可见的。
使用Docker的秘密
如果在你的本地系统上创建了一个镜像,并与其他人共享,甚至在Docker Hub上发布。Docker Secrets的主要目的是,创建镜像时使用的凭证不应该被镜像的用户访问。
在这个例子中,我们将创建一个服务容器并提供一个秘密文件。然后,提交该容器以形成一个镜像,供以后使用。现在,使用这个镜像运行一个容器,检查秘密信息是否存在。
第1步:创建一个Docker秘密
首先,我们需要初始化Docker Swarm管理器。
如果你的Docker Swarm由于IP解析而无法启动,请使用 –advertiseaddr=ip_of_the_machine和-listen-addr=0.0.0.0
输出
现在,使用以下命令创建Docker Secret。
示例
输出
要获得有关Docker秘密文件的完整细节,请使用以下命令。
示例
输出
这意味着我们的Docker Secret已经可以使用了。
第2步:创建一个服务
我们将创建一个mysql服务,它将把上面创建的Docker Secret作为根密码。
示例
输出
检查该服务是否正在运行。
示例
输出
第3步:在容器内执行
现在,我们将进入容器内部,获得存储在其中的秘密文件的内容,即根密码。
示例
输出
因此,秘密文件是存在的。
第4步:检查提交的图像文件是否有秘密数据
从这个容器中创建一个镜像。
示例
输出
现在检查图像,检查我们是否得到了root的密码。
示例
输出
因此,只有路径被提及,而凭证是安全的。
结论
在这篇文章中。我们学习了向Docker容器传递凭证的各种方法。还讨论了与之相关的安全问题,并提供了解决方案。使用Docker Secrets是最有用和最安全的方法之一,可以给你的登录。