Docker 安装与常用操作
场景
要在 Linux 上跑几个服务,用容器隔离,升级和回滚都方便。
前置条件
- 64 位系统,内核 3.10 以上
- 系统盘之外有数据盘(镜像和容器默认放
/var/lib/docker) - 能访问镜像源(内网要配镜像加速)
配置
# 装 Docker CE
dnf install -y dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install -y docker-ce docker-ce-cli containerd.io
systemctl enable --now docker
# 数据目录和日志限制
mkdir -p /data/docker
cat >/etc/docker/daemon.json <<'EOF'
{
"data-root": "/data/docker",
"log-driver": "json-file",
"log-opts": { "max-size": "50m", "max-file": "3" },
"registry-mirrors": ["https://mirror.example.com"]
}
EOF
systemctl restart docker
常用命令:
docker ps -a
docker images
docker run -d --name web -p 8080:80 -v /data/web:/usr/share/nginx/html nginx:1.25
docker logs -f --tail 100 web
docker exec -it web bash
docker stats
docker system df
验证
docker info | grep -E "Docker Root Dir|Storage Driver"
docker run --rm hello-world
curl -I http://127.0.0.1:8080
回滚
systemctl disable --now docker
dnf remove -y docker-ce docker-ce-cli containerd.io
rm -rf /data/docker
坑
- 镜像默认放
/var/lib/docker,跑几个月能把根分区写满。 - 不限制日志大小,一个容器一天能写几十 G。
- 容器里的时区默认 UTC,应用时间差 8 小时。
-v挂载的宿主机目录权限不对,容器里写不进去。docker system prune会删掉没在运行的容器和悬空镜像,先确认。- 重启宿主后容器不会自动起,除非
--restart always。