Docker 镜像 用普通用户启动服务

Docker镜像内用普通用户启动服务


Docker是一种用于构建、封装和分发应用程序的开源平台。它利用容器化技术将应用程序及其依赖项打包到一个可移植的容器中,从而实现快速部署和可伸缩性。

在Docker中,通过使用Docker镜像可以创建容器,镜像是容器化过程中的一个关键概念,它是一个只读的文件系统,其中包含用于运行应用程序的一切内容。在默认情况下,Docker容器是以root用户身份运行的,这可能会导致一些安全风险。为了降低潜在的风险,我们应该以普通用户身份来运行服务。

使用普通用户启动服务的好处


使用普通用户启动Docker容器中的服务,可以有效降低潜在的安全风险。以root用户身份运行容器可能会导致容器中的应用程序获得对主机操作系统的控制权限。这样一来,如果容器中的应用程序受到攻击,攻击者可能会获得对主机操作系统的完全控制权限。而以普通用户身份运行容器可以限制应用程序对主机操作系统的访问权限,从而减小安全风险。

此外,以普通用户身份运行容器还可以提高容器的可移植性和可重用性。如果容器是以root用户身份运行的,那么在不同的环境中可能会遇到权限问题。而以普通用户身份运行容器可以避免这些问题,使得容器更易于在不同的环境中部署和运行。
 

使用普通用户启动服务的步骤


下面是使用普通用户启动Docker镜像中服务的步骤:

(1)在Dockerfile中创建一个普通用户,并切换到该用户:

FROM ubuntu:latest
RUN groupadd -r myuser && useradd -r -g myuser myuser
USER myuser

在这个Dockerfile中,我们首先创建一个名为myuser的用户组,然后创建一个名为myuser的普通用户,并将其加入到myuser用户组中。最后,我们使用USER命令将容器的默认用户切换为myuser。

(2)在容器中启动服务:

CMD ["python", "app.py"]

在这个例子中,我们使用CMD命令来定义容器启动时要运行的命令。在这里,我们假设容器中的服务是用Python编写的,将app.py作为启动命令。

(3)构建和运行容器:

$ docker build -t myimage .
$ docker run -d myimage

在这个示例中,我们首先使用docker build命令构建Docker镜像,然后使用docker run命令在后台运行容器。这样,容器将以普通用户身份运行服务。

为您的 Java 应用程序创建 Dockerfile

现在您已经安装了 Docker,让我们使用 Gradle 构建的简单 Java 应用程序并创建一个 Dockerfile。我们将在容器本身中构建和运行 jar 文件,这为我们提供了一个更加一致的环境。你可以在Github上查看我的示例项目,如果你愿意,可以从这个项目开始工作。

# NOTE: This is not a production ready Dockerfile. 
# Utilize this only for development purposes# Use a container image that has both Gradle and the JDK
FROM gradle:5.0.0-jdk8-alpine# Switch to the `gradle` user defined by our container image
USER gradle# Copy over the project directory into the container
COPY --chown=gradle:gradle . /java-and-docker# Set our working directory to our project directory that we set above
WORKDIR /java-and-docker# Run the build
RUN gradle build# Run the jar file
# Since we are using JDK8 we set some additional flags to be more container aware
CMD ["java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-jar", "build/libs/java-and-docker-1.0.jar"]

总结


通过以普通用户身份启动Docker镜像中的服务,我们可以有效降低潜在的安全风险,并提高容器的可移植性和可重用性。在Dockerfile中创建一个普通用户,并使用USER命令切换到该用户,然后使用CMD命令定义容器启动时要运行的命令。最后,通过构建和运行容器来启动服务。这些步骤可以帮助我们以更安全和可靠的方式在Docker中运行服务。

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

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

相关文章

Selenium+TestNG学习笔记

------------------TestNG-------------------- 1.层级 suite -》test-》class-》method 建议层级 class对应一个测试用例,suite对应一个测试集 2. testNG中的PO模式 3.运行多个测试类的测试用例 通过suite来进行管理;suite在testNG中可以通过xml 来进行编写管理…

Vue.js组件精讲 第4章 组件的通信2:派发与广播——自行实现dispatch和broadcast方法

上一讲的 provide / inject API 主要解决了跨级组件间的通信问题,不过它的使用场景,主要是子组件获取上级组件的状态,跨级组件间建立了一种主动提供与依赖注入的关系。然后有两种场景它不能很好的解决: 父组件向子组件&#xff0…

【Hello算法】 > 第 2 关 >数据结构 之 数组与链表

数据结构 之 数组与链表 1:Understanding data structures !——了解数据结构——1.1:Classification-分类-1.2:Type-类型- 2:Arrays are the bricks that make up the wall of data structures *——数组是组成数据结…

django基于python的法院执法案件管理系统

本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行,将系统所使用到的表以及数据存储到MySQL数据库中,方便对数据进行操作本课题基于WEB的开发平台,设计的基本思路是: 框架:django/flask 后端&#xff…

算法题解记录10+++缺失的第一个正数

题目描述: 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 解释:范围 […

Spring与Spring Boot的区别:从框架设计到应用开发

这是我自己开发的一款小程序,感兴趣的可以体验一下: 进入正题: 在Java开发领域,Spring和Spring Boot都是备受推崇的框架,它们为开发人员提供了丰富的功能和便捷的开发体验。然而,许多人对它们之间的区别仍…

MySQL的基础操作(二)

目录 一.数据库约束 1.主键约束 (Primary Key) 2.唯一约束 (Unique) 3.外键约束 (Foreign Key): 4.检查约束(Check) 5.默认约束 (Default) 二.聚合查询 1.简单聚合函数 2.GROUP BY子句 3.HAVING子句 三.联合查询 1.内连接 2.左连接 3.右连接 4.子查询 5.合并查询…

大数据实训进行时:数据标注项目

数据标注项目 培训目的 让同学们先熟悉理论知识,如:识别障碍物是否满足拉框的要求,如何进行拉框;熟悉标注操作,培养出能够进入正式项目的人员 培训地点 理论:学术报告厅、阶梯教室 实操:1实…

【WPF应用42】WPF中的 GroupBox 控件详解

在 Windows Presentation Foundation (WPF) 中,控件是构建用户界面 (UI) 的基础。WPF 提供了丰富的控件库,其中包括 GroupBox 控件,它用于将相关的 UI 元素组织到逻辑分组中。在本博客文章中,我们将详细介绍 GroupBox 控件的功能、…

自己整理的ICT云计算题库四

14. 【多选题】 CIFS 支持的认证方式是以下哪些选项? A: A 全局认证 B: B LADP 域 C: C 本地认证 D: D AD 域 答案 正确答案:ACD 解释 全局认证为先本地,后AD,再LADP 15. 【单选题】 华为 oceanstor v3 smarterase 在使用时…

基于linux进一步理解核间通讯

芯片架构分为同构和异构: 如下图TC397: 如下图TDA4: 如下图STM32MP157: 非对称多处理结构(AMP): AMP 结构是指每个内核运行自己的 OS 或同一 OS 的独立实例&#

MTK Android13 霸屏实现

一、背景 在台式POS场景下,经常有应用会需要获取霸屏的权限,隐藏状态栏或者导航栏,且不能被划出,其实系统已经系统了隐藏状态栏也导航栏的接口,但是无法做到禁止滑出。 View decorView ((Activity) context).getWin…

Day53 动态规划 part14

Day53 动态规划 part14 1143.最长公共子序列 我的思路: 模仿昨天的最大重复子序列长度的思路,可以列出如下状态转移方程 对着状态转移方程写代码即可,还是需要注意,i, j是从1开始的,比较的时候是str1[i -1]和str2[j…

【PG-1】PostgreSQL体系结构概述

1. PostgreSQL体系结构概述 代码结构 其中,backend是后端核心代码,包括右边的几个dir: access:处理数据访问方法和索引的代码。 bootstrap:数据库初始化相关的代码。 catalog:系统目录(如表和索引的元数据…

数据结构4:基于单链表的通讯录项目

文章目录 头文件SList.hContact.h 实现文件SList.cContact.c 测试代码 头文件 SList.h #pragma once#include<stdio.h> #include<stdlib.h> #include<assert.h> #include"Contact.h"//typedef int SLDataType; typedef PersonInfo SLDataType;//…

2024年第十四届MathorCup数学应用挑战赛B题解题思路

B题https://mbd.pub/o/bread/ZZ6Wm5dx 问题1:对于附件I(Pre_test文件夹)给定的三张甲骨文原始拓片图 片进行图像预处理&#xff0c;提取图像特征&#xff0c;建立甲骨文图像预处理模型&#xff0c;实现对 甲骨文图像干扰元素的初步判别和处理。 针对问题1&#xff0c;对于附件…

【研发效能·创享大会-嗨享技术轰趴】-IDCF五周年专场

一、这是一场创新分享局&#xff01; 来吧&#xff0c;朋友们! 参加一场包含AIGC、BizDevOps、ToB产品管理、B端产品运营、平台工程、研发效能、研发度量、职业画布、DevOps国标解读的研发效能创享大会&#xff0c;会有哪些收益呢&#xff1f; 知识更新与技能提升&#xff1a;…

在线批量生成URL HTML单页网页程序

输入前缀、开始数字、结束数字、后缀 即可快速生成 几万、十万、百万 条链接。 支持 一键复制、 一键导出本地 txt 文件。 源码免费下载地址抄笔记 (chaobiji.cn)

Conda 常用命令总结

创建虚拟环境 conda create -n name python[your_version] 激活环境 conda activate name 退出环境 conda deactivate 查看虚拟环境 conda info --envs 删除虚拟环境 conda remove -n name --all 删除所有的安装包及cache(索引缓存、锁定文件、未使用过的包和tar包) …

java的jar包jakarta.jakartaee-web-api和jakarta.servlet-api有什么区别

jakarta.jakartaee-web-api和jakarta.servlet-api都是Java EE&#xff08;现在是 Jakarta EE&#xff09;中的一部分&#xff0c;用于开发基于Java EE平台的Web应用程序。它们之间的区别在于以下几点&#xff1a; 命名空间&#xff1a; jakarta.servlet-api是Java EE 8之前版本…