Docker内核指的是Docker与Linux内核交互的核心组件,主要包括:
命名空间(Namespaces):提供进程隔离
控制组(cgroups):资源限制
联合文件系统(UnionFS):分层镜像存储
# 查看当前内核参数
sysctl -a
# 调整内核参数(临时)
sudo sysctl -w vm.swappiness=10
sudo sysctl -w vm.overcommit_memory=1
# 永久生效(写入/etc/sysctl.conf)
echo "vm.swappiness = 10" | sudo tee -a /etc/sysctl.conf
echo "vm.overcommit_memory = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 修改Docker守护进程参数
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65536,
"Soft": 65536
}
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
sudo systemctl restart docker
# 使用cgroups限制CPU
docker run -it --cpus="1.5" ubuntu /bin/bash
# 设置CPU份额(相对权重)
docker run -it --cpu-shares=512 ubuntu /bin/bash
# 绑定到特定CPU核心
docker run -it --cpuset-cpus="0,2" ubuntu /bin/bash
# 硬内存限制
docker run -it -m 512m ubuntu /bin/bash
# 内存+swap限制
docker run -it -m 512m --memory-swap=1g ubuntu /bin/bash
# OOM优先级调整
docker run -it -m 512m --oom-kill-disable ubuntu /bin/bash
# 限制块设备I/O
docker run -it --device-read-bps /dev/sda:1mb ubuntu /bin/bash
# 限制IOPS
docker run -it --device-write-iops /dev/sda:100 ubuntu /bin/bash
# 禁用特权容器
docker run -it --security-opt=no-new-privileges ubuntu /bin/bash
# 设置seccomp配置文件
docker run -it --security-opt seccomp=/path/to/seccomp/profile.json ubuntu /bin/bash
# 使用AppArmor
docker run -it --security-opt apparmor=docker-default ubuntu /bin/bash
# 移除所有capabilities再添加需要的
docker run -it --cap-drop=ALL --cap-add=NET_ADMIN ubuntu /bin/bash
# 常用capabilities:
# - NET_ADMIN: 网络管理
# - SYS_ADMIN: 系统管理
# - DAC_OVERRIDE: 绕过文件权限检查
# 查看容器使用的内核资源
docker stats <container_id>
# 进入容器的命名空间
nsenter --target <pid> --mount --uts --ipc --net --pid
# 查看cgroups配置
cat /sys/fs/cgroup/memory/docker/<container_id>/memory.limit_in_bytes
# 查看内核日志
dmesg | grep docker
journalctl -k | grep -i docker
# 启用debug日志
dockerd --debug
# 查看已加载模块
lsmod
# 加载模块(如overlay)
modprobe overlay
# 确保Docker启动时加载
echo "overlay" | sudo tee /etc/modules-load.d/overlay.conf
如果需要特定内核功能,可能需要:
通过深入理解和合理配置Docker与内核的交互,可以显著提升容器环境的性能、安全性和稳定性。