安装
安装 Docker 是系统级操作,因为:
- 需要安装系统包(
apt install docker.io或添加 Docker 官方源) - 需要在
/etc/systemd/下创建服务配置 - 需要启动
dockerd守护进程 - 会创建
/var/run/docker.sock
安装这一步,必须用 root 或 sudo,绕不过去。
# 安装 Docker(需要 sudo)
sudo apt update
sudo apt install docker.io
# 或者安装 Docker CE(官方版)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
开启权限
只要你的普通用户在 docker组里,就能直接和 Docker daemon 通信,不需要 sudo!
# 假设 alice 是你的普通用户
# 1. 把 alice 加入 docker 组
sudo usermod -aG docker alice
# 2. alice 需要重新登录(或执行 newgrp docker)让组生效
# 注销当前 SSH 会话,重新登录
# 3. 验证
docker ps # 不需要 sudo 了!
docker compose up -d # 也不需要 sudo!
加入 docker组后,alice 就能读写 /var/run/docker.sock,从而直接和 Docker daemon 对话。daemon 本身以 root 运行,所以执行 docker ps时,虽然是 alice 发起的命令,但实际是在 root 权限的 daemon 中执行的。
文件操作
/srv/docker/ 目录如果是 root 创建的,默认权限是 755(rwxr-xr-x) ,这意味着:
| 操作 | alice 能不能做 |
|---|---|
cd /srv/docker | ✅ 能(有 x 权限) |
ls /srv/docker | ✅ 能(有 r 权限) |
vim docker-compose.yml (写入文件) | ❌ 不能(没有 w 权限) |
mkdir newProject (创建目录) | ❌ 不能 |
可以:
- 把目录的 owner 改成 alice:
sudo chown -R alice:alice /srv/docker# 之后 alice 对这个目录就有完全控制权了
- 把目录的组改成 docker,并给组写权限
sudo chown -R root:docker /srv/dockersudo chmod -R g+w /srv/docker# alice 因为在 docker 组里,自然就有写权限了
- 给 Others 加写权限(不推荐,太宽松)
sudo chmod -R 757 /srv/docker# 任何人都能写,不安全
完整流程
【一次性操作,用 root/sudo】
1. 安装 Docker
2. 创建普通用户 alice
3. 把 alice 加入 sudo 组(方便应急)
4. 把 alice 加入 docker 组(免 sudo 使用 Docker)
5. 创建项目目录并设置归属
sudo mkdir -p /srv/docker/myproject/{nginx,gin,mysql,static}
sudo chown -R alice:alice /srv/docker
【日常操作,alice 登录】
6. cd /srv/docker/myproject
7. 上传/编辑 docker-compose.yml 和配置文件
8. docker compose up -d ← 不需要 sudo!
9. docker compose logs -f ← 也不需要 sudo!
10. docker ps ← 也不需要 sudo!
最佳实践
# === 在服务器上(root 或有 sudo 权限执行)===
# 1. 创建 alice 的目录结构
sudo mkdir -p /srv/alice/docker
# 2. 设置 owner
sudo chown -R alice:alice /srv/alice
# 3. 设置权限(推荐 750 或 700)
sudo chmod 750 /srv/alice
# 或者更严格的:
sudo chmod 700 /srv/alice
# 4. 验证
ls -ld /srv/alice
# 应该看到:drwxr-x--- alice alice /srv/alice
# 或者: drwx------ alice alice /srv/alice
# === 然后 alice 可以自己操作了 ===
# (alice 登录后)
mkdir -p /srv/alice/docker/myproject/{nginx,gin,mysql,static}
cd /srv/alice/docker/myproject
# 开始干活...