在现代软件开发和运维中,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.repoyum clean all
yum makecacheyum 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 前台运行(避免容器立即退出)