首页 > 其他分享 >Dockerfile 构建镜像

Dockerfile 构建镜像

时间:2023-08-20 22:45:13浏览次数:33  
标签:容器 systemd run sshd 构建 镜像 Dockerfile

目录

一、构建 Apache 镜像

1. 创建工作目录

mkdir /opt/apache

2. 编辑Dockerfile脚本

cd /opt/apache
vim Dockerfile

# 基于的基础镜像
FROM centos:7

# 维护镜像的用户信息
MAINTAINER this is apache image <mz>

# 镜像操作指定安装apache软件
RUN yum -y update
RUN yum -y install httpd

# 开启80端口
EXPOSE 80


# 复制网站首页文件
ADD index.html /var/www/html/index.html

# 方法一
# 将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh

# 启动容器时执行脚本
CMD ["/run.sh"]


# 方法二
ENTRYPOINT ["/usr/sbin/apachectl"]
CMD ["-D","FOREGOUND"]


image-20230818143222136

3. 编辑run执行脚本

用方法一时需要run.sh脚本

vim run.sh

#! /bin/bash

# 清理httpd的缓存
rm -rf /run/httpd/*

# 指定为前台运行
/usr/sbin/apachectl -D FOREGOUND
# 因为Docker容器仅在它的1号进程(PID为1)运行时,会保持运行。如果1号进程退出了,Docker容器也就退出了。


image-20230818142043120

4. 准备网站页面

echo "this is test web" > index.html

image-20230818142110643

5. 生成镜像

docker build -t httpd:centos .

注:末尾有点 “ . ”

.:表示Dockerfile所在的上下文路径,默认情况下是当前目录。Dockerfile是一个文本文件,其中包含了构建镜像的指令和配置

image-20230818142430217

6. 新镜像运行容器

docker run -d -p 12345:80 httpd:centos

image-20230818143539455

7. 测试

浏览器访问:http://129.168.23.35:12334

image-20230818143715836

二、 构建 SSH 镜像

1. 创建工作目录

mkdir /opt/sshd

2. 创建Dockerfile脚本

cd /opt/sshd
vim Dockerfile

# 指定基于的基础镜像
FROM centos:7

# 作者信息
MAINTAINER this is sshd image <mz>

# 镜像的操作指令
RUN yum -y update
RUN yum -y install openssh* net-tools lsof telnet passwd
RUN echo 'abc123' | passwd --stdin root
# 禁用PAM验证机制
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
# 取消PAM限制
RUN sed -ri '/^session\s+required\s+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd 
# 生成SSH密钥对,-t 指定生成RSA类型的密钥,-A 生成全部默认类型的主机密钥对
RUN ssh-keygen -t rsa -A
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh

# 指定端口
EXPOSE 22

# 用于前台启动sshd服务
CMD ["/usr/sbin/sshd","-D"]


image-20230818160056038

3. 生成镜像

docker build -t sshd:centos .

image-20230818160222503

4. 启动容器并使用密码登录

docker run -d -P sshd:centos
docker ps -a
ssh localhost -p 32768

image-20230818160633258

5. 更改密码

passwd root
123123
123123

image-20230818162045998

三、构建 Systemctl 镜像

1. 创建工作目录

mkdir /opt/systemctl

2. 编辑Dockerfile脚本

cd /opt/systemctl

vim Dockerfile

# 指定基于的基础镜像
FROM sshd:centos

# 维护者信息
MAINTAINER this is systemctl images <mz>

# 设置环境变量container为docker
ENV container docker

# 除了 systemd-tmpfiles-setup.server 删除其它所有文件
RUN (cd /lib/systemd/system/sysinit.target.wants/;for i in *;do [ $i == systemd-tmpfile-setup.service ] || rm -f $1;done);\

rm -f /lib/systemd/system/multi-user.target.wants/*; \
rm -f /etc/systemd/system/*.wants/*; \
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;

# 将宿主机的 /sys/fs/cgroup 目录挂载到容器中
VOLUME ["/sys/fs/cgroup"]

# 启动容器时执行
CMD ["/usr/sbin/init"]

systemd-tmpfiles-setup.service是一个由Systemd init系统提供的服务单元文件。它负责在系统启动过程中创建临时文件和目录

3. 生成镜像

docker build -t systemd:centos .

4. 启动容器

启动容器,并挂载宿主机目录挂载到容器中,和进行初始化

docker run --privileged -d -P -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd:centos /sbin/init

--privileged:使container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。

5. 进入容器

docker ps -a

# 进入容器
docker exec -it 

systemctl status sshd

标签:容器,systemd,run,sshd,构建,镜像,Dockerfile
From: https://www.cnblogs.com/m-zhuang/p/17644777.html

相关文章

  • Dockerfile创建镜像
    Dockerfile是用于定义和构建Docker镜像的重要工具,它使得镜像的构建过程更加可控、可重复和可自动化,为应用程序的打包、分发和部署提供了便利性和灵活性。目录一、创建镜像方法二、Dockerfile概述三、Dockerfile操作指令 四、Dockerfile案例五、总结  一、创建镜像方......
  • 构建高性能后端:探秘Nginx与Elasticsearch的技术协同
    在如今的信息时代,高性能的后端技术对于应用的成功至关重要。本文将深入探讨两个关键技术领域:Nginx反向代理和Elasticsearch全文搜索。通过详细的原理解析和实际代码示例,揭示它们如何协同工作,为应用的性能和效率提供强大支持。Nginx反向代理:背后的原理Nginx不仅是一款优秀的Web服务......
  • 使用PHP构建安全可靠的电子商务平台 - 实现无缝支付集成
    在构建一个安全可靠的电子商务平台时,实现无缝支付集成是至关重要的一步。通过使用PHP编程语言,您可以轻松地与各种支付网关进行集成,并确保用户的支付信息得到适当的加密和保护。下面是一些步骤和策略,可以帮助您使用PHP构建一个安全可靠的电子商务平台。1.选择适合的支付网关在......
  • Prim算法是一种用于解决最小生成树问题的贪心算法。它通过逐步选择边来构建最小生成树
    importjava.util.*;classPrimAlgorithm{privatestaticfinalintINF=Integer.MAX_VALUE;publicvoidprimMST(int[][]graph){intvertices=graph.length;int[]parent=newint[vertices];//用于存储最小生成树的父节点int......
  • 构建高效远程团队协作网络的最佳实践分享与经验总结
    随着全球化和科技发展的推进,越来越多的企业开始采用远程办公模式。构建高效远程团队协作网络成为了提高工作效率和团队凝聚力的关键。本文将分享一些构建高效远程团队协作网络的最佳实践和经验总结,帮助团队更好地远程协作。1.选择合适的协作工具选择适合团队需求的协作工具是构......
  • 国内无法下载k8s镜像的解决办法
    关于通过各种方法下载k8s相关镜像的方法总结如下:1.使用Azure中国镜像站,目前限制只能“AzureChinaIP”可用,不再对外提供服务,此路不通。2.直接使用mirrorgooglecontainers用户同步到DockerHub的镜像。用户mirrorgooglecontainers在DockerHub上同步了一些相应的google镜像,可以直......
  • Streamlit 讲解专栏(三):两种方案构建多页面
    1前言首先,感谢各位读者阅读之前的一篇博文Streamlit讲解专栏(二):搭建第一个应用,该博文详细介绍了如何使用Streamlit框架来搭建数据应用程序。......
  • [超详细] GraalVM打包含有JNI的本地镜像
    GraalVM是一种高性能、多语言通用虚拟机和编译器技术。它由Oracle开发并开源,旨在为不同的编程语言和应用场景提供统一的运行时环境和编译器平台。以下是GraalVM的一些主要特点和功能:多语言支持:GraalVM支持多种编程语言,包括Java、JavaScript(Node.js)、Python、Ruby、R、C......
  • 应用部署,dockerfile
    目录1容器操作2应用部署2.1mysql部署2.2redis2.3nginx3迁移与备份4Dockerfile#1docker启动,停止,查看状态命令 systemctlstartdockersystemctlstopdockersystemctlstatusdockerdockerinfo#查看详情systemctlenabledocker#开机自启动......
  • EinScan-S软件构建物体的空间三维模型:编码结构光
      本文介绍基于EinScan-S软件,实现编码结构光方法的空间三维模型重建的具体操作。(基于EinScan-S的编码结构光方法空间三维模型重建)  上一篇文章3DSOM软件基于物体的照片构建空间三维模型的方法详细介绍了基于3DSOM的侧影轮廓方法物体空间三维模型重建;接下来,本文我们将在一款......