使用Secret管理工具:
docker secret
Secrets
资源避免硬编码:
# 错误做法 - 密码硬编码
docker run -e MYSQL_PASSWORD=mysecretpass mysql
# 正确做法 - 使用secret
echo "mysecretpass" | docker secret create mysql_pass -
docker service create --secret mysql_pass -e MYSQL_PASSWORD_FILE=/run/secrets/mysql_pass mysql
最小权限原则:
docker run --read-only --user nobody myapp # 只读文件系统+非root用户
资源限制:
docker run --memory=512m --cpus=1 myapp
镜像扫描:
# 使用Trivy扫描镜像
trivy image myimage:latest
# 使用Docker Bench Security
docker run -it --net host --pid host --cap-add audit_control \
-v /var/lib:/var/lib \
-v /var/run/docker.sock:/var/run/docker.sock \
--label docker_bench_security \
docker/docker-bench-security
构建安全镜像:
FROM alpine:latest
RUN adduser -D myuser
USER myuser # 不使用root用户
COPY --chown=myuser:myuser app /app
# 创建自定义网络
docker network create --driver bridge isolated_net
docker run --network isolated_net myapp
# 使用AppArmor
docker run --security-opt apparmor=my_profile myapp
# 使用SELinux
docker run --security-opt label=type:svirt_lxc_net_t myapp
# 集中式日志收集
docker run --log-driver=syslog myapp
# 使用Fluentd收集容器日志
docker run --log-driver=fluentd myapp
通过实施这些措施,您可以显著提高容器环境中敏感数据的安全性,降低数据泄露风险。