Docker 如何实现非root用户构建httpd镜像以及遇到的问题有哪些

这篇具有很好参考价值的文章主要介绍了Docker 如何实现非root用户构建httpd镜像以及遇到的问题有哪些。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为什么要用非root来构建httpd呢?

由于公司云平台,一般的web组件。不允许用root用户来部署相关应用程序。所以只能编写dockerfile先构建镜像,然后再部署到云平台(kubenetes集群),主要从安全问题来考虑的。还有本来我这个职位职责是管理租户应用问题,但是测试机器没部署。只能自己找镜像,写file部署。中间遇到了很多问题,可能由于我的技术比较菜导致的吧。掉坑里一天出不来,最后还是慢慢排错出来的。不聊别的了,聊聊技术吧。

  • 首先我们需要准备一个干净的镜像,因为我们云平台有docker仓库Harbor。所以我只需要使用命令拉取镜像:
docker push 10.0.0.1/public/bclinux:1.1.1
  • 拉取镜像之后,需要使用docker run 命令去运行,我拉取的镜像:
docker run --name tudo:1.1.1 -tid 10.0.0.1/public/bclinux:1.1.1
  • 进入运行的docker的容器中(未运行的叫镜像、运行了就叫容器了)
docker exec -ti tudo:1.1.1 /bin/bash
  • 修改基础镜像的yum源文件,因为内网涉及安全问题一般yum源配置是:
cat >/etc/yum.repos.d/os.repo<<EOF
[centos7]
name=Server
baseurl=http://10.0.0.1/fpz #源路径
gpgcheck=0
gpgcheck=1             #是否检查GPG(GNU Private Guard),一种密钥方式签名。 
EOF
  • 使用yum install -y httpd 部署安装完成后使用systemctl启动报错
# systemctl start httpd 
System has not been booed with systemd as init system (PID 1).Can't operate.
Failed to connect to bus: Host is down 
  • 怎么解决报错呢?答案是跳过这种方式去启动httpd直接用路径启动
#type httpd
httpd is /usr/sbin/httpd
  • 执行完命令发现还有问题
#/usr/sbin/httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.0.0.9. Set the 'ServerName' directive globally to suppress this message 
httpd (pid 18)  already running
报错的意思是我们没有修改/etc/httpd/conf/http.conf配置文件的参数导致 
ServerName localhost:80
再启动
#/usr/sbin/httpd
启动成功了
  • 启动后我们要编写docker file文件
vi /date/dockerfile
FROM 10.0.0.1/public/bclinux:1.1.1
RUN groupadd www
RUN useradd www -g www -u 1911
RUN chown -R www:www  /etc/httpd/conf/httpd.conf
RUN chmod -R 755 /etc/httpd/conf/httpd.conf
RUN chown -R www:www /usr/sbin/httpd
RUN chown -R www:www /etc/httpd/logs/
RUN chmod -R 755 /etc/httpd/logs/
RUN chown -R www:www /run/httpd/
RUN chmod -R 755 /run/httpd
RUN chmod -R 755 /usr/sbin/httpd
RUN mkdir -p  /var/tmp/logs/
RUN chown -R www:www /var/tmp/
RUN mkdir -p /date
ADD start.sh /date
RUN chmod a+x /date/start.sh
RUN chown -R www:www /date/start.sh
RUN chmod -R 755 /var/tmp/
RUN sed -i 's/User apache/User www/g' /etc/httpd/conf/httpd.conf
RUN sed -i 's/Group apache/Group www/g' /etc/httpd/conf/httpd.conf
RUN sed -i 's/#ServerName www.example.com:80/ServerName localhost:8080/g' /etc/httpd/conf/httpd.conf
RUN sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf
USER 1911
ENTRYPOINT ["sh","/date/start.sh"]
  • 启动脚本start.sh编写
vi /date/start.sh
#!/bin/bash
/usr/sbin/httpd -D FOREGROUND
不加 -D FOREGROUND会报错别问我为什么知道的。因为这里我卡了很久。。。。
重启提示AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
  • 构建镜像使用docker命令
1.构建命令
docker build -f dockerfile -t httpjingxing:1.1.1 .
(还有个问题docker构建镜像镜像名不能大写会报错)
2.上传命令
docker push httpjingxing:1.1.1 

到此完结。。。。。。。。。。。。文章来源地址https://www.toymoban.com/news/detail-408282.html

到了这里,关于Docker 如何实现非root用户构建httpd镜像以及遇到的问题有哪些的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【无标题】如何使用Docker构建多平台镜像?

    如何构建多平台镜像? 工作原理 准备构建环境 开启Linux内核对多处理器架构的支持 创建使用\\\"docker-container\\\"驱动的Buildx实例 调整Dockerfile 调整构建命令 在不同镜像仓库之间传输镜像 如何构建多平台镜像? 如果你还不了解什么是多平台构建,请先阅读一下Docker构建多平台镜像

    2024年02月11日
    浏览(37)
  • SpringBoot项目使用docker-maven-plugin插件构建docker镜像以及推送到docker hub或docker registry私服

    我们知道docker可将应用程序和基础设施层隔离,可更快地打包、测试以及部署应用程序。本文主要介绍SpringBoot项目如何构建docker镜像以及推送到私服或者docker hub服务器上。 本文介绍的方式是使用docker-maven-plugin的方式构建SpringBoot的docker镜像以及推送到私服或docker hub服务器上

    2024年02月16日
    浏览(35)
  • 如何使用docker-compose.yml构建镜像?

    使用 docker-compose.yml 文件来构建镜像,你需要在该文件中对你的服务进行定义,然后使用 docker-compose build 命令。 假设你有一个 docker-compose.yml 文件,它定义了一个名为 “web” 的服务,并指定了构建该服务所需的 Dockerfile 的路径,如下所示: 在这个例子中, build: . 指出 Dock

    2024年02月12日
    浏览(65)
  • 【Docker】如何编写Dockerfile,深入理解 Dockerfile:构建精简且高效的容器镜像

    Docker 是一种轻量级的容器化技术,使得应用程序和它们的依赖可以被打包到一个容器中,方便在不同环境中运行。Dockerfile 是用于定义 Docker 镜像的文本文件,其中包含了一系列的指令,这些指令描述了镜像中应该包含哪些内容和如何配置。 在开始编写 Dockerfile 之前,确保你

    2024年01月24日
    浏览(40)
  • 如何在 Linux 命令行下玩转 Docker——如何使用 Dockerfile 来构建和运行容器镜像

    作者:禅与计算机程序设计艺术 Docker 是一款开源的容器化技术,它利用 Linux 内核的容器特性,将应用部署到独立的进程环境中。基于容器技术可以极大地提高开发者和运维人员的效率,降低部署、测试和生产环节中的成本,有效地实现云计算资源的弹性伸缩。 本文主要介绍

    2024年02月07日
    浏览(41)
  • Idea使用Docker插件实现maven打包自动构建镜像

    Docker 开启TCP 服务 改写以下内容 重启服务 此时docker已经开放了2375端口,使用外部主机访问 http://docker:2375/info IDEA 集成Docker 安装Docker 插件 配置docker服务地址 点击view-services,打开docker的操作面板 双击docker01可以看到此docker服务下镜像和容器 右击docker镜像,可以创建新的容器,

    2024年02月10日
    浏览(39)
  • Spring Boot配置docker-maven-plugin实现构建与推送镜像

    1、优化前: 目前构建docker镜像都是先执行mvn clean package打包之后,将target目录下的jar包放到服务器上,再通过Dockerfile去build成镜像,步骤多,而且每次都需要登录服务器进行操作,十分麻烦。 2、优化后: 在Spring Boot项目中引入docker-maven-plugin进行相关配置,之后就可以在项目

    2024年02月15日
    浏览(39)
  • Spring Boot配置docker-maven-plugin实现构建与推送镜像(Dockerfile)

    0、前提:docker、 maven、java均已安装,docker 镜像私服均已设置网络也开通 本文基于Docker进行构建,也可以指定构建信息到 POM 中构建,大家自行搜索 1、首先是一些网络和docker相关配置的打开 2、针对maven 的 setting.xml 文件的修改 3、项目的pom文件,引入docker maven plugin 及相关配

    2024年02月07日
    浏览(33)
  • 简单指令实现Docker构建镜像启动运行保存导出后再导入新环境完整全流程

    本文做一个简单Docker使用指令指南,可快速实现Docker构建镜像、启动、运行、保存、导出后再导入新环境完整全流程。具体每一个指令又有很多参数和学问,大家可自行查询更详细的解释,本文可用于小白快速构建镜像并使用。 首先,准备一个Dockerfile,包含你要使用的基础

    2024年02月11日
    浏览(35)
  • 【jenkins】jenkins流水线构建打包jar,生成docker镜像,重启docker服务的过程,在jenkins上一键完成,实现提交代码自动构建的功能

     【jenkins】jenkins流水线构建打包jar,生成docker镜像,重启docker服务的过程,在jenkins上一键完成,实现提交代码自动构建,服务重启,服务发布的功能。一键实现。非常的舒服。 这是 shell脚本  脚本名称: startup.sh   本脚本的功能是在jenkins 构建完项目后,通过jar包生成dock

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包