作为IT工程师,合理管理和优化Docker容器资源是确保应用性能和稳定性的关键。以下是全面的Docker资源管理方法:
# 限制容器使用最多50%的单个CPU
docker run -it --cpus="0.5" ubuntu
# 限制容器使用特定的CPU核心(0和1)
docker run -it --cpuset-cpus="0,1" ubuntu
# 设置CPU共享权重(默认1024)
docker run -it --cpu-shares=512 ubuntu
# 限制容器内存使用为1GB
docker run -it -m 1g --memory-swap=2g ubuntu
# 禁用swap(仅限内存)
docker run -it -m 1g --memory-swap=1g ubuntu
# 设置内存预留(软限制)
docker run -it -m 1g --memory-reservation=500m ubuntu
# 限制读写速率(单位可以是kb/mb/gb)
docker run -it --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb ubuntu
# 限制IOPS
docker run -it --device-read-iops /dev/sda:100 --device-write-iops /dev/sda:100 ubuntu
# 启用cgroups v2(需Linux内核5.2+)
# 在/etc/docker/daemon.json中添加:
{
"exec-opts": ["native.cgroupdriver=systemd"],
"features": {"cgroupv2": true}
}
# 使用docker stats实时监控
docker stats --all --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
# 使用cAdvisor进行详细监控
docker run -d --name=cadvisor \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
google/cadvisor:latest
# 使用Docker Swarm模式自动扩缩容
docker service create --name web --replicas 3 \
--reserve-cpu 0.5 --reserve-memory 500m \
--limit-cpu 1 --limit-memory 1g \
nginx
# 使用--mode=global确保每个节点运行一个实例
docker service create --name global_web --mode global nginx
# 多阶段构建减少镜像大小
FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]
# 使用--oom-kill-disable谨慎(可能导致系统不稳定)
docker run -it -m 100m --oom-kill-disable ubuntu
# 设置进程优先级
docker run -it --cap-add=sys_nice --ulimit nice=10 ubuntu
# 限制进程数
docker run -it --pids-limit=100 ubuntu
# 限制网络带宽(需tc工具)
docker run -it --cap-add=NET_ADMIN ubuntu tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
# 使用特定网络驱动
docker network create --driver=macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 my-macvlan
bash
docker run -it -l resource_class=high ubuntu
通过以上方法,您可以有效管理和优化Docker容器资源,确保应用性能同时提高资源利用率。