Docker—— 镜像构建原因

在现代软件开发和运维中,Docker已成为一种非常流行的工具,它通过容器化应用程序来简化部署过程。然而,默认的官方镜像往往只能满足基础需求,无法涵盖所有特定项目的具体要求。

原因 说明
系统级改动无法通过 volume 实现 修改用户、删除命令、安装系统组件等只能在镜像层完成
安全加固要求可复制、可验证 你不能让每个节点手动执行一遍加固脚本,必须统一标准
合规性要求可追溯 构建镜像可以打标签、记录作者和时间,方便审计和版本管理

镜像 vs Volume 的适用场景对比表

场景 是否需要构建镜像 使用 Volume 是否足够
修改系统组件(如安装包、删命令) 必须构建镜像 不够
用户权限、安全策略调整 必须构建镜像 不够
日志配置、访问控制等应用级配置 可以用 volume 足够
数据持久化、网站静态资源 可以用 volume 足够
安全合规、标准化部署 必须构建镜像 不够

自定义HTTP镜像

在 CentOS 7 容器中安装 httpd,并提交为新镜像 my-httpd-image

启动容器并进入交互式 shell

复制代码
docker run -it --name my-httpd-container centos:7 /bin/bash

这会创建一个名为 my-httpd-container 的容器,并进入它的 bash 环境。

在容器内安装 httpd

复制代码
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum clean all
yum makecache

yum install -y httpd

配置启动服务

做一些简单配置,比如添加一个测试页面:

复制代码
echo "Hello from Apache in Docker!" > /var/www/html/index.html

退出容器:

复制代码
exit

提交容器为新镜像

复制代码
docker commit my-httpd-container my-httpd-image:latest

查看镜像信息

复制代码
docker images | grep my-httpd

你应该看到类似输出:

复制代码
my-httpd-image   latest   xxxxxxxxxxxx   ...  

运行该镜像并启动 Apache

为了运行这个镜像并启动 Apache,可以这样运行:

复制代码
docker run -d -p 8080:80 --name my-running-httpd my-httpd-image /usr/sbin/httpd -DFOREGROUND

解释:

  • -d: 后台运行

  • -p 8080:80: 映射宿主机端口 8080 到容器的 80 端口

  • /usr/sbin/httpd -DFOREGROUND: 强制 Apache 前台运行(避免容器立即退出)