一、镜像安全:从源头降低风险
nginx:alpine、ubuntu:22.04-slim)或企业私有仓库的镜像,避免使用来源不明的第三方镜像;精简镜像(如Alpine Linux)可减少不必要的软件包,缩小攻击面。FROM golang:1.21 AS builder编译代码,FROM alpine:latest作为最终镜像复制二进制文件),仅保留运行所需的文件和依赖,进一步减小镜像体积和潜在漏洞。Docker Scan、Trivy或Clair等工具定期扫描镜像,检测并修复操作系统、依赖库中的已知漏洞(如CVE),确保镜像安全。二、运行时安全:限制容器权限与行为
RUN adduser -D myuser创建非root用户,再用USER myuser指令切换用户运行容器,避免容器内进程以root身份执行(降低被提权攻击的风险)。--cap-drop ALL关闭容器的所有内核能力(如CAP_SYS_ADMIN、CAP_NET_ADMIN),再按需添加必要能力(如--cap-add NET_BIND_SERVICE允许绑定低端口),防止容器通过内核能力逃逸或执行高危操作。--privileged参数启动容器(该参数赋予容器几乎所有宿主机权限,如操作设备、加载内核模块),仅在必要时(如调试)临时启用,并严格控制使用范围。--security-opt seccomp=/etc/docker/seccomp/profile.json指定seccomp配置文件,限制容器能调用的系统调用(如禁止mount、pivot_root等危险调用),防止恶意进程破坏宿主机系统。三、安全加固工具:强化访问控制
--security-opt label=type:container_runtime_t),AppArmor通过配置文件(如docker-default)限制容器内程序的行为;两者均能有效防止容器逃逸和非法访问。/etc/docker/daemon.json文件,添加"tls": true、"tlscacert": "/path/to/ca.pem"、"tlscert": "/path/to/server.pem"、"tlskey": "/path/to/server-key.pem"等参数,启用Docker守护进程与客户端之间的TLS加密,防止API通信被窃听或篡改。/etc/docker/daemon.json的"hosts"参数限制Docker API的访问方式(如仅允许unix:///var/run/docker.sock或特定IP的TCP连接),避免暴露API到公网;若需远程访问,需结合防火墙(如firewalld)限制访问IP范围。四、隔离与资源控制:防止横向扩散
docker network create --driver bridge mynet)将不同业务容器隔离到不同网络中,限制容器间的直接通信;通过--network参数指定容器所属网络,避免不必要的网络暴露。--memory="512m"、--memory-swap="1g"限制容器内存使用(防止内存耗尽导致宿主机崩溃),通过--cpus="1.0"限制CPU使用率(避免单个容器占用全部CPU资源),通过--pids-limit=100限制进程数量(防止fork炸弹攻击)。--read-only参数将容器文件系统设置为只读(防止容器内进程修改系统文件),避免将宿主机的/proc、/sys、/dev等敏感目录挂载到容器内(防止访问宿主机资源);若需挂载,使用--read-only结合--tmpfs挂载临时目录。五、监控与维护:及时发现并响应威胁
docker-ce)、容器运行时(containerd)为最新版本,及时修复已知安全漏洞;定期更新容器镜像(如通过docker pull拉取最新版本),确保应用依赖的安全性。cAdvisor收集容器资源使用数据,结合Prometheus和Grafana进行可视化监控(及时发现资源异常);使用Falco监控容器内的异常行为(如未授权的进程启动、网络连接、文件修改),并通过告警机制快速响应。json-file),设置日志大小("max-size": "10m")和保留数量("max-file": "3"),定期查看/var/log/docker.log中的日志信息(如容器启动、停止、异常事件),便于追溯安全事件。