将用户添加到 Docker 容器
在开发应用程序时,我们通常有不同的用户与系统交互以执行不同的功能。 这些用户具有使他们能够根据其角色执行功能的权限。
请注意
,有些超级用户可以执行系统中的所有功能,因为他们已被分配了系统的所有角色。 同样,我们可以为Docker容器创建用户,并为用户设置权限,保证他们只能在容器中执行特定的任务。
这些增强了容器的安全性,因为我们可以将对容器关键部分的访问限制为超级用户,并且还可以跟踪在特定事件发生时哪个用户正在与系统交互。
在本文中,我们将学习如何通过实现返回产品数组的 Express 应用程序将用户添加到 Docker 容器。
创建一个快速应用程序
打开 WebStorm IDEA 并选择文件 > 新建 > 项目。 选择 Node.js 并将位置部分的项目名称从无标题更改为产品 API。
您应该已经安装了节点运行时环境,以便可以从计算机自动添加节点解释器和包管理器部分。 按标有“创建”的按钮生成项目。
要安装 Express,请在 WebStorm 上使用键盘快捷键 Alt+F12 打开一个新的终端窗口,然后使用以下 npm 命令安装依赖项。
~/WebstormProjects/product-api$ npm install express
在当前文件夹中创建一个名为 index.js 的文件,并将以下代码复制并粘贴到该文件中。
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.json(
[
{
name: 'Iphone 13 Pro',
price: 1500.67
},
{
name: 'Samsung Galaxy A53',
price: 1300.56
},
])
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
在此文件中,我们创建了一个 Express 应用程序,当我们向浏览器/在浏览器上发出 GET 请求时,它会返回一组产品。 请注意,此应用程序公开了端口 3000,这有助于我们为该应用程序提供服务。
创建应用程序的 Docker 映像
在 product-api 文件夹中创建一个名为 Dockerfile 的文件,并将以下代码复制并粘贴到该文件中。
FROM node:latest
RUN groupadd admin &&\
useradd mary -g admin -s /bin/sh
WORKDIR /com/product
ADD package*.json ./
RUN npm install
ADD . .
USER mary
CMD node index.js
在这个文件中,我们使用 node:latest
作为基础图像创建了我们应用程序的图像。 FROM 指令之后的 RUN 指令创建一个名为 admin 的组,并向该组添加一个名为 mary 的用户。
我们使用反斜杠 \ 将命令继续到下一行。 注意,创建组和用户的命令都是Linux命令,包括 groupadd
和 useradd
。
此文件中的另一条重要指令是 USER 指令,它设置将用于剩余阶段的默认用户。
我们也可以设置默认组,尽管这是可选的。 Docker 文档详细提供了其余指令的用法。
构建镜像
要构建镜像,请使用键盘快捷键 Alt+F12 打开一个新的终端窗口,然后使用以下命令创建一个名为 product-api 的图像。
~/WebstormProjects/product-api$ docker build --tag product-api:latest .
此命令从第一个文件开始依次执行名为 Dockerfile 的文件,如下面的终端窗口所示。 点。 命令末尾的 显示 Dockerfile 文件的位置,在本例中它位于当前文件夹中。
=> [1/6] FROM docker.io/library/node:latest@sha256:bb3b9f1867edba6d8892758889e43b2f0205ebbd381969a2c45577d38281 95.4s
=> => resolve docker.io/library/node:latest@sha256:bb3b9f1867edba6d8892758889e43b2f0205ebbd381969a2c45577d38281a 0.1s
=> [2/6] RUN groupadd admin && useradd mary -g admin -s /bin/sh 6.3s
=> [3/6] WORKDIR /com/product 0.9s
=> [4/6] ADD package*.json ./ 0.7s
=> [5/6] RUN npm install 7.1s
=> [6/6] ADD . .
运行容器
构建镜像后,使用以下命令从此镜像运行名为 product-service 的容器。
~/WebstormProjects/product-api$ docker run --name product-service -d -p 3030:3000 product-api:latest
此命令运行一个容器,该容器将端口 3000 映射到本地主机上的端口 3030,因为该容器正在本地使用。
验证用户是否已创建
要验证用户是否已创建,请使用以下命令,该命令允许我们使用 exec
指令从正在运行的容器中执行命令。
~/WebstormProjects/product-api$ docker exec -it product-service /bin/sh
由于我们将 WORKDIR 指定为 /com/product,因此命令在此目录中运行。 如果我们不指定目录,该命令将在默认目录中运行。
该命令执行交互式 Bash shell,我们可以使用 Bash 会话在运行的容器上执行命令。 在正在运行的容器上执行以下命令验证用户组,如下。
$ id mary
输出:
uid=1001(mary) gid=1001(admin) groups=1001(admin)
我们已经看到容器有一个名为 mary 的用户,来自名为 admin 的组,允许我们根据需要更改权限。
从容器中获取数据
打开任何浏览器并向 localhost:3030 (http://localhost:3030/) 发出请求以验证我们的应用程序是否按预期工作。 确保请求返回我们在 index.js 文件中创建的产品 API,如下所示。
[
{
"name": "Iphone 13 Pro",
"price": 1500.67
},
{
"name": "Samsung Galaxy A53",
"price": 1300.56
}
]
总结
在本文中,我们学习了如何使用 Dockerfile 将用户添加到容器中。 我们还了解了如何将用户添加到组中,因为用户属于组织中的特定组。
请注意
,有不同的方法可以实现相同的结果,因此请随意使用满足要求的任何方法。
相关文章
在 Linux 中托管 Docker Internal
发布时间:2023/04/18 浏览次数:139 分类:Docker
-
Docker 允许开发人员通过将应用程序包装在称为容器的标准化单元中来高效地构建、测试和部署应用程序。 在使用 Docker 容器时,您可能会遇到需要将容器与主机连接的场景。
在 Docker 中设置工作目录
发布时间:2023/04/18 浏览次数:82 分类:Docker
-
在 Docker 中,我们可以通过编辑 Dockerfile 并添加密钥 WORKDIR 来设置我们的工作目录。本文将讨论在 Docker 中更改我们当前和默认的工作目录。
在 Docker 容器中公开多个端口
发布时间:2023/04/18 浏览次数:143 分类:Docker
-
Docker 容器使用端口来实现万维网上不同设备之间的通信。 在本篇文章中,我们将学习如何使用 Nginx 应用程序在 Docker 容器中公开多个端口。
使用 Docker 网络主机命令
发布时间:2023/04/18 浏览次数:112 分类:Docker
-
在本文中,我们将学习如何使用 --network 命令将容器添加到主机网络。 如果我们不使用此命令指定网络,我们还将了解如何将容器添加到默认网络。
清除 Docker 容器日志
发布时间:2023/04/18 浏览次数:181 分类:Docker
-
本文介绍了我们可以用来清除 docker 容器中日志的不同方法。日志是应用程序在特定事件或状态发生时记录的信息,它们帮助我们监控应用程序并采取必要的措施。
Dockerfile 中 COPY 和 ADD 命令的区别
发布时间:2023/04/18 浏览次数:158 分类:Docker
-
在 Dockerfile 中,我们可以使用 COPY 或 ADD 命令复制这些文件。 这些命令在功能上是相同的; 但是,存在一些差异。本文介绍了 Dockerfile 中 COPY 和 ADD 命令之间的区别。