docker create
创建但不启动docker start
启动已创建的容器docker run
创建并启动(等同于create+start)docker stop
优雅停止,docker kill
强制停止docker pause/unpause
暂停进程但不释放资源docker restart
docker rm
(需先停止)# 查看运行中的容器
docker ps
docker ps -a # 查看所有容器(包括已停止的)
# 查看容器日志
docker logs <container_id>
docker logs -f <container_id> # 实时跟踪日志
# 进入容器
docker exec -it <container_id> /bin/bash
# 查看容器资源使用情况
docker stats
# 限制容器使用单个CPU核心的50%
docker run --cpus="0.5" <image>
# 限制容器使用最多两个CPU核心
docker run --cpus="2" <image>
# 将容器绑定到特定CPU核心
docker run --cpuset-cpus="0,3" <image>
# 限制容器内存使用为512MB
docker run -m 512m <image>
# 设置内存+交换分区限制(总内存)
docker run -m 512m --memory-swap=1g <image>
# 禁用交换分区
docker run -m 512m --memory-swappiness=0 <image>
# 限制读写速率(单位可以是kb/mb/gb)
docker run --device-read-bps /dev/sda:1mb \
--device-write-bps /dev/sda:1mb \
--device-read-iops /dev/sda:100 \
--device-write-iops /dev/sda:100 <image>
# 创建自定义网络并设置带宽限制
docker network create --driver=bridge \
--subnet=192.168.100.0/24 \
-o "com.docker.network.bridge.enable_icc"="true" \
-o "com.docker.network.bridge.host_binding_ipv4"="0.0.0.0" \
--opt com.docker.network.driver.mtu=1500 mynet
# 运行容器时限制带宽(需要第三方工具如tc)
# 查看容器的cgroup设置
cat /sys/fs/cgroup/memory/docker/<container_id>/memory.limit_in_bytes
# 动态调整正在运行容器的CPU份额
echo 512 > /sys/fs/cgroup/cpu/docker/<container_id>/cpu.shares
version: '3'
services:
webapp:
image: nginx
deploy:
resources:
limits:
cpus: '0.50'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
# Docker Swarm示例
docker service create \
--name my_service \
--replicas 3 \
--reserve-cpu 0.5 \
--reserve-memory 128m \
--limit-cpu 1 \
--limit-memory 256m \
nginx
合理设置资源限制:
资源隔离策略:
监控与调优:
# 使用cAdvisor监控容器资源使用
docker run -d \
--name=cadvisor \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
google/cadvisor:latest
安全考虑:
资源回收策略:
docker container prune
docker image prune
--restart unless-stopped
通过合理配置这些资源管理策略,可以确保Docker容器在共享主机资源时既能满足性能需求,又能避免资源争用导致的系统不稳定问题。