0aa8fe6
这次没有正文改动。
这是 container/Docker 安装与常用操作.md 的改动记录。后台每次保存都会留一份快照,
这里显示的是快照之间的差异,不会混入其他文章的改动。
还没有后台修改记录。
下面是 Git 里的提交,可能包含其他文章的改动(因为一次提交会带上工作区所有变化)。
0aa8fe6
这次没有正文改动。
69302a9
@@ -0,0 +1,76 @@ +--- +tags: [Docker, 容器, Linux] +order: 10 +--- + +# 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`。