# Docker 安装与常用操作 ## 场景 要在 Linux 上跑几个服务,用容器隔离,升级和回滚都方便。 ## 前置条件 - 64 位系统,内核 3.10 以上 - 系统盘之外有数据盘(镜像和容器默认放 `/var/lib/docker`) - 能访问镜像源(内网要配镜像加速) ## 配置 ```bash # 装 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 ``` 常用命令: ```bash 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 ``` ## 验证 ```bash docker info | grep -E "Docker Root Dir|Storage Driver" docker run --rm hello-world curl -I http://127.0.0.1:8080 ``` ## 回滚 ```bash 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`。