docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
- DockerClient客户端:
Docker 客户端是与Docker 守护进程(Docker Daemon)交互的命令行工具。
docker 客户端非常简单,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。 - Docker Daemon守护进程
- Docker Image镜像
- DockerContainer容器
安装Docker
- 更新系统,确保系统为最新状态
Archlinux
sudo pacman -Syu
Debian
sudo apt update
安装
Arch
sudo pacman -S docker
Debian
sudo apt install docker.io
也可以用yay安装,命令如下
yay -S docker
启动服务
sudo systemctl start docker
sudo systemctl enable docker
确认安装版本
sudo docker version
配置用户
默认只有root用户可以管理Docker,可运行下列命令将当前用户赋予管理权限
sudo usermod -aG docker $USER
配置镜像
默认的镜像下载站点是在海外,切换到国内镜像站点可以提高下载速度。
打开或新建/etc/docker/daemon.json文件,将镜像地址添加到 registry-mirrors数组里即可。
如:
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
ref: jianshu
获取镜像
如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:
$ docker pull ubuntu
或者在 win 的 cmd 中,
docker pull seafileltd/seafile-mc:latest
docker pull mariadb:10.6
docker pull memcached:1.6
然后保存为 tar 文件
docker save seafileltd/seafile-mc:11.0.13 -o seafile11013.tar
最后上传到服务器,导入到 docker
docker load -i seafile11013.tar
删除镜像
docker rmi seafileltd/seafile-mc:latest
容器使用
启动容器
以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:
$ docker run -it ubuntu /bin/bash
参数说明:
i:交互式操作。t:终端。ubuntu:ubuntu 镜像。/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
启动已停止运行的容器
首先查看所有的容器,命令如下:
$ docker ps -a
使用 docker start <容器 ID> 启动一个已停止的容器:
$ docker start b750bbbcfd88
后台运行
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
$ docker run -itd --name ubuntu-test ubuntu /bin/bash
注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
停止一个容器
$ docker stop <容器 ID>
停止的容器可以通过 docker restart 重启
$ docker restart <容器 ID>
导出容器
如果要导出本地某个容器,可以使用 docker export 命令。
$ docker export <容器 ID> > ubuntu.tar
这样将导出容器快照到本地文件。
导入容器快照
可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
此外,也可以通过指定 URL 或者某个目录来导入,例如:
$ docker import http://example.com/exampleimage.tgz example/imagerepo
删除容器
删除容器使用 docker rm 命令:
$ docker rm -f <容器 ID>
下面的命令可以清理掉所有处于终止状态的容器。
$ docker container prune
查看容器log
docker logs -f seafile
问题
is the docker daemon runing?
sudo systemctl start docker.sevice
永久性解决问题
sudo systemctl enable docker.service
win pull 到 linux
- 以下命令在 Windows 的 PowerShell / Windows Terminal 中执行(不是在 WSL 里)
确认镜像存在 docker images | findstr webdav
导出为 tar 文件 docker save bytemark/webdav -o webdav.tar, 生成文件:webdav.tar
- 把
webdav.tar传到Linux服务器
scp webdav.tar peter@服务器公网IP:/home/peter/
- 在
Linux服务器上导入镜像
sudo docker load -i /home/liupei/webdav.tar
- 启动
WebDAV
用 Docker 在后台启动一个名叫 webdav 的容器,运行一个 WebDAV 服务,把服务器上的 /home/peter/sharedav 目录共享出来,通过 66666 端口访问,使用用户名 peter + 密码 21xx 的 Basic 认证,并且服务器重启后自动恢复运行。
sudo docker run -d
--name webdav
-p 66666:80
-v /home/peter/sharedav:/var/lib/dav
-e AUTH_TYPE=Basic
-e USERNAME=peter
-e PASSWORD=21xx
--restart unless-stopped bytemark/webdav
逐段详细解释
1️⃣ sudo
sudo
- 以 管理员(root)权限执行
- Docker 操作通常需要 root 权限
2️⃣ docker run
docker run
- 启动一个 新的容器
- 如果本地没有镜像,会尝试从 Docker Hub 拉取
3️⃣ -d
-d
- detached mode
- 容器在后台运行,不占用当前终端
4️⃣ --name webdav
--name webdav
给容器起名字叫
webdav以后可以用:
docker stop webdav docker restart webdav docker logs webdav
5️⃣ -p 66666:80
-p 66666:80
端口映射
- 左边
66666:
👉 宿主机(你的服务器)端口 - 右边
80:
👉 容器内部 WebDAV 服务端口
访问方式:
http://服务器IP:66666
📌 注意:66666 是一个 非标准高端口,可以避免和 80/443 冲突
6️⃣ -v /home/peter/sharedav:/var/lib/dav
-v /home/peter/sharedav:/var/lib/dav
数据目录映射(非常关键)
/home/peter/sharedav
👉 服务器上的真实目录/var/lib/dav
👉 容器内 WebDAV 的根目录
📁 效果是:
WebDAV 客户端看到的根目录
服务器的 /home/peter/sharedav
7️⃣ -e AUTH_TYPE=Basic
-e AUTH_TYPE=Basic
- 使用 HTTP Basic Authentication
- 最通用、Windows / macOS / 手机都支持
8️⃣ -e USERNAME=peter
-e USERNAME=peter
- WebDAV 登录用户名:
peter
9️⃣ -e PASSWORD=21xx
-e PASSWORD=21xx
- WebDAV 登录密码:
21xx
⚠️ 注意:
- 明文密码
- 不要随便发给别人
- 建议只在 HTTPS 下使用
🔟 --restart unless-stopped
--restart unless-stopped
容器自启动策略
含义是:
| 场景 | 是否自动启动 |
|---|---|
| 服务器重启 | ✅ 会 |
| Docker 重启 | ✅ 会 |
| 容器异常退出 | ✅ 会 |
你手动 docker stop webdav |
❌ 不会 |
👉 非常适合长期服务
1️⃣1️⃣ bytemark/webdav
bytemark/webdav
- Docker 镜像名
- 官方常用的轻量 WebDAV 镜像
- 默认监听
80端口 - 默认数据目录
/var/lib/dav
启动成功后:
WebDAV 地址:
http://服务器IP:66666/登录账号:
peter / 21xxWebDAV 根目录:
/home/peter/sharedav
“安全升级”这条命令(建议)
✅ 只允许本机访问(配合反向代理)
-p 127.0.0.1:66666:80
✅ 用域名 + HTTPS(推荐)
宝塔 / Nginx 反向代理到:
http://127.0.0.1:66666
✅ 改密码
-e PASSWORD=更复杂的密码
- 验证是否成功
docker ps -a
- 浏览器测试
http://服务器公网IP:66666/
seafile
Seafile 非常适合你这个「单人 + 不需要版本控制 + 要快」的场景。
👉 推荐:Docker 方式(最快、不踩坑)
总体结构
电脑 / 笔记本
⇅(Seafile 客户端,极速同步)
Seafile Server(你的服务器)
├── 文件库(项目A / 项目B / …)
└── Web 界面(管理 / 下载 / WebDAV)
你以后:
- 📁 本地建文件夹 → 自动同步到服务器
- 📄 Word / Excel / PNG 直接保存
- 🚀 同步速度明显比 Nextcloud 快
服务器准备
1️⃣ 基本要求
- Linux 服务器(Ubuntu 20.04 / 22.04 推荐)
- 内存 ≥ 2GB(1GB 也能跑,但不建议)
- 已安装 Docker
安装 Docker(如果没有)
curl -fsSL https://get.docker.com | bash
systemctl enable docker
systemctl start docker
2️⃣ 创建 Seafile 工作目录
mkdir -p /opt/seafile
cd /opt/seafile
Docker 一键启动 Seafile
创建 docker-compose.yml
version: '3'
services:
db:
image: mariadb:10.6
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=seafile_root_pass
- MYSQL_LOG_CONSOLE=true
- MYSQL_DATABASE=seafile_db
- MYSQL_USER=seafile
- MYSQL_PASSWORD=seafile_pass
volumes:
- ./mysql:/var/lib/mysql
restart: unless-stopped
memcached:
image: memcached:1.6
container_name: seafile-memcached
restart: unless-stopped
seafile:
image: seafileltd/seafile-mc:latest
container_name: seafile
ports:
- "8000:80"
volumes:
- ./seafile-data:/shared
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=seafile_root_pass
- SEAFILE_ADMIN_EMAIL=admin@example.com
- SEAFILE_ADMIN_PASSWORD=admin123
- SEAFILE_SERVER_LETSENCRYPT=false
- SEAFILE_SERVER_HOSTNAME=your.domain.com
depends_on:
- db
- memcached
restart: unless-stopped
⚠️ 请务必修改:
SEAFILE_ADMIN_EMAILSEAFILE_ADMIN_PASSWORDSEAFILE_SERVER_HOSTNAME
3️⃣ 启动 Seafile
docker-compose up -d
第一次启动 2–5 分钟,数据库会自动初始化。
对于无法访问 docker hub
docker-compose down
总体思路(先看一眼)
在 能连 Docker Hub 的电脑 A 上:
docker pull拉镜像docker save导出成.tar把
.tar文件传到 你的服务器 B:
docker load导入docker-compose up -d直接跑(不会再联网)需要导出的 Seafile 镜像(清单)
你的
docker-compose.yml用到了这 3 个镜像:seafileltd/seafile-mc:latest mariadb:10.6 memcached:1.6在【能连 Docker Hub 的电脑】上操作
1️⃣ 拉取镜像
docker pull seafileltd/seafile-mc:latest docker pull mariadb:10.6 docker pull memcached:1.6确认:
docker images2️⃣ 导出镜像为 tar 文件
docker save \ -o seafile-images.tar \ seafileltd/seafile-mc:latest \ mariadb:10.6 \ memcached:1.6文件大小大致:
- Seafile:≈ 800MB+
- MariaDB:≈ 200MB
- Memcached:≈ 30MB
👉 总共大概 1GB 左右
把镜像传到你的服务器
任选一种方式:
✅ scp(最简单)
scp seafile-images.tar liupei@你的服务器IP:/public/home/liupei/✅ rsync(断点续传,推荐大文件)
rsync -avP seafile-images.tar liupei@服务器IP:/public/home/liupei/在【你的服务器】上导入镜像
docker load -i seafile-images.tar确认镜像已存在:
docker images你应该能看到:
seafileltd/seafile-mc latest mariadb 10.6 memcached 1.6直接启动 Seafile(不再联网)
cd ~/seafile docker-compose up -d👉 这一步不会再访问 Docker Hub
六、常见问题(我提前帮你踩掉)
❓ 镜像版本必须完全一致吗?
✅ 是的
docker-compose.yml里的版本 必须和你 save 的一致❓ 可以分开导出吗?
可以,例如:
docker save -o seafile.tar seafileltd/seafile-mc:latest docker save -o mariadb.tar mariadb:10.6 docker save -o memcached.tar memcached:1.6❓ tar 可以删吗?
- 镜像 load 完后可以删
- 建议留一份当“冷备份”
给你一个「最省心」的推荐做法(我个人常用)
# 在可联网电脑 docker pull seafileltd/seafile-mc:latest mariadb:10.6 memcached:1.6 docker save -o seafile-stack.tar seafileltd/seafile-mc:latest mariadb:10.6 memcached:1.6 # 拷贝到服务器 rsync -avP seafile-stack.tar server:/path/ # 在服务器 docker load -i seafile-stack.tar docker-compose up -d
4️⃣ 访问 Web 管理界面
浏览器打开:
http://你的服务器IP:8000
用你刚设置的管理员邮箱和密码登录。
🎉 到这里,Seafile 服务端已经搭好!
创建“项目文件库”(像 Zotero)
在 Web 页面中:
点击 新建资料库
例如:
Project_RemoteSensingProject_Chess
每个资料库内部可无限建子文件夹:
Project_RemoteSensing ├── data ├── figures ├── paper ├── code
客户端同步(核心体验)
1️⃣ 下载 Seafile 客户端
- Windows / macOS / Linux
👉 https://www.seafile.com/download/
(这是 Seafile 同步速度快的关键)
2️⃣ 客户端配置
服务器地址:
http://你的服务器IP:8000登录账号
选择资料库
指定本地同步文件夹
之后你就可以:
- 本地新建文件 → 自动上传
- 改 Word / Excel → 秒级同步
- 支持断点续传、大文件
WebDAV(可选)
Seafile 自带 WebDAV:
地址:http://你的服务器IP:8000/seafdav
用户名:你的账号
密码:你的密码
Windows / macOS / Linux 都可以挂载。
⚠️ 注意:
👉 同步建议用 Seafile 客户端
👉 偶尔访问/编辑才用 WebDAV
性能与安全建议
🚀 性能
- 用 Seafile 客户端,不用 WebDAV 做主同步
- SSD 存储最好
- VPS 带宽越高越爽
🔐 安全
- 强烈建议:
- 后期加 Nginx + HTTPS
- 或放在内网 / VPN 下
使用场景建议结构
结合你之前:
- 科研
- 项目文档
- 图片 / Excel / 代码
推荐资料库结构:
Research
├── Project_Hainan_RS
│ ├── data
│ ├── figures
│ ├── scripts
│ ├── papers
│ └── notes
├── Project_ML_RS
└── Reference_Materials
👉 这套结构 比 Zotero 更自由,但一样清晰。
✅ 总结一句话
Seafile = 极速同步版“项目文件 Zotero”
如果你愿意,下一步我可以帮你:
- 📦 做自动备份
- 🔍 和 Typora 联动
- 🤖 和 LlamaIndex / 本地 RAG 联动







