Docker 是一种领先的容器化平台,可以简化应用程序的开发、部署和管理。通过使用 Docker,您可以创建一致、可移植且可扩展的环境,从而实现高效的开发和运营。本指南将介绍 Docker 的最佳实践,帮助您充分利用 Docker 的潜力并确保应用程序的安全性和性能。
一、安全性最佳实践
1、最小权限原则
容器运行权限
避免容器以 root 用户身份运行:
默认情况下,Docker 容器是以 root 用户身份运行的。
如果容器内的应用程序被攻破,攻击者将拥有容器内的 root 权限,可能对主机造成威胁。
在 Dockerfile 中使用 USER 指令,将容器默认用户设置为非特权用户,例如:
FROM ubuntu:latest
RUN groupadd -r appgroup && useradd -r -g appgroup appuser
USER appuser
以非特权用户身份运行:
可以在运行容器时使用 --user 标志指定非特权用户:
docker run --user 1000:1000 myimage
或者在 Docker Compose 文件中指定用户:
version: '3'
services:
app:
image: myimage
user: "1000:1000"
Docker 守护进程权限
确保只有可信用户能访问 Docker 守护进程:
Docker 守护进程默认以 root 用户身份运行,具有较高的系统权限。
默认情况下,Docker 守护进程监听 Unix 套接字 /var/run/docker.sock,只有 docker 组的成员可以访问。
使用 chmod 或 chown 确保 /var/run/docker.sock 只允许可信用户访问:
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock
将可信用户添加到 docker 组:
sudo usermod -aG docker trusted_user
限制 Docker 守护进程的网络访问权限:
默认情况下,Docker 守护进程不监听 TCP 套接字。
如果需要通过网络远程访问 Docker 守护进程,应开启 TLS 并确保只接受来自可信客户端的连接。