容器基础镜像选择与容器镜像仓库使用指南
立即解锁
发布时间: 2025-08-26 00:06:48 阅读量: 3 订阅数: 7 


Podman for DevOps: 从理论到实践的容器化指南
### 容器基础镜像选择与容器镜像仓库使用指南
#### 1. 选择容器基础镜像
在容器开发中,选择合适的基础镜像至关重要。`yum install` 命令执行时可通过 `--installroot $mount` 选项,指示安装程序使用工作容器挂载点作为临时根目录来安装软件包。
##### 1.1 UBI 镜像类型
- **UBI Minimal 和 UBI Micro 镜像**:适用于微服务架构,可协调多个运行特定微服务的容器。
- **UBI Init 镜像**:允许在容器内协调多个服务的执行。传统容器开发常创建仅运行单个组件的高度专业化镜像,以实现多层应用。但在某些特殊场景下,如需要跨进程共享容器命名空间或使用单个大镜像时,这种方式并不适用。为此,Red Hat 推出了 UBI Init 镜像,它在容器内运行最小化的 Systemd 初始化进程,允许执行由 PID 为 1 的 Systemd 进程管理的多个 Systemd 单元。该镜像比标准镜像略小,但比最小镜像有更多可用软件包。默认的 `CMD` 设置为 `/sbin/init`,对应 Systemd 进程。由于 Systemd 会忽略 Podman 用于停止运行容器的 `SIGTERM` 和 `SIGKILL` 信号,因此在镜像的 Dockerfile 中通过 `STOPSIGNAL SIGRTMIN+3` 指令配置发送 `SIGRTMIN+3` 信号进行终止。
以下是一个 Dockerfile 示例,用于安装 `httpd` 包并配置 Systemd 单元以运行 `httpd` 服务:
```Dockerfile
FROM registry.access.redhat.com/ubi8/ubi-init
RUN yum -y install httpd && \
yum clean all && \
systemctl enable httpd
RUN echo "Successful Web Server Test" > /var/www/html/index.html
RUN mkdir /etc/systemd/system/httpd.service.d/ && \
echo -e '[Service]\nRestart=always' > /etc/systemd/system/httpd.service.d/httpd.conf
EXPOSE 80
CMD [ "/sbin/init" ]
```
可以使用以下命令构建和运行该镜像,并使用 `ps` 命令检查容器内初始化系统的行为:
```bash
$ buildah build -t init_httpd .
$ podman run -d --name httpd_init -p 8080:80 init_httpd
$ podman exec -ti httpd_init /bin/bash
[root@b4fb727f1907 /]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.0 89844 9404 ? Ss 10:30 0:00 /sbin/init
root 10 0.0 0.0 95552 10636 ? Ss 10:30 0:00 /usr/lib/systemd/systemd-journald
root 20 0.1 0.0 258068 10700 ? Ss 10:30 0:00 /usr/sbin/httpd -DFOREGROUND
dbus 21 0.0 0.0 54056 4856 ? Ss 10:30 0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
apache 23 0.0 0.0 260652 7884 ? S 10:30 0:00 /usr/sbin/httpd -DFOREGROUND
apache 24 0.0 0.0 2760308 9512 ? Sl 10:30 0:00 /usr/sbin/httpd -DFOREGROUND
apache 25 0.0 0.0 2563636 9748 ? Sl 10:30 0:00 /usr/sbin/httpd -DFOREGROUND
apache 26 0.0 0.0 2563636 9516 ? Sl 10:30 0:00 /usr/sbin/httpd -DFOREGROUND
root
```
0
0
复制全文
相关推荐









