在CentOS系统上部署Docker时,需通过操作系统配置、容器运行时加固、镜像管理、网络与权限控制等多维度措施,降低安全风险。以下是具体实施步骤:
/etc/selinux/config中SELINUX=enforcing(若为disabled需重启系统生效),并通过setsebool -P docker_isolation 1启用Docker专用SELinux布尔值。docker组并生效:sudo usermod -aG docker ${USER}
su - ${USER} # 注销重新登录
sudo yum update docker-ce docker-ce-cli containerd.io更新Docker至最新版本。daemon.json文件:编辑/etc/docker/daemon.json,优化守护进程行为:{
"exec-opts": ["native.cgroupdriver=systemd"], // 使用systemd管理cgroup
"log-driver": "json-file",
"log-opts": {"max-size": "100m", "max-file": "3"}, // 限制日志大小
"storage-driver": "overlay2", // 推荐存储驱动
"insecure-registries": [], // 禁用不安全仓库
"debug": false, // 关闭调试模式
"userns-remapping": "default" // 启用用户命名空间隔离
}
重启Docker使配置生效:sudo systemctl restart docker。--cpus、--memory、--pids-limit参数限制容器资源占用,防止单个容器耗尽宿主机资源:docker run -it --cpus=1 --memory=512m --pids-limit=100 ubuntu
--privileged参数(赋予容器root权限),并通过--cap-drop删除不必要的能力(如ALL),仅添加必需的权限(如NET_BIND_SERVICE):docker run -it --cap-drop ALL --cap-add NET_BIND_SERVICE ubuntu
nginx:alpine),采用多阶段构建减少镜像体积(移除编译工具等无用组件);运行前通过Trivy、Clair等工具扫描镜像漏洞。firewalld限制Docker守护进程端口(默认2375/tcp)访问,仅允许可信IP:sudo firewall-cmd --permanent --zone=trusted --add-service=docker
sudo firewall-cmd --reload
bridge网络,创建自定义网络(如my-network),将不同业务容器隔离到不同网络,限制横向渗透:docker network create --driver bridge my-network
docker run --network=my-network -d nginx
export DOCKER_CONTENT_TRUST=1
docker pull nginx:latest # 仅拉取带签名的镜像
Docker Secrets(适用于Swarm模式)或环境变量挂载(如-v ./secrets:/run/secrets)管理。/proc、/sys、/dev等宿主机关键目录挂载到容器内,如需挂载需设置为只读:docker run -v /host/data:/data:ro -it ubuntu
docker-compose.yml或run命令中添加healthcheck指令,定期检查容器状态(如Nginx是否响应):services:
web:
image: nginx
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
cAdvisor+Prometheus+Grafana监控容器资源使用情况;用Falco监控容器内异常行为(如未授权进程启动、网络异常),及时告警。以上措施覆盖了CentOS系统下Docker安全的核心环节,需根据实际业务场景调整(如生产环境需启用TLS加密Docker API通信)。定期审查安全策略,应对新出现的安全威胁。