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

或者在 wincmd 中,

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

  1. 以下命令在 Windows 的 PowerShell / Windows Terminal 中执行(不是在 WSL 里)

确认镜像存在 docker images | findstr webdav
导出为 tar 文件 docker save bytemark/webdav -o webdav.tar, 生成文件:webdav.tar

  1. webdav.tar 传到 Linux 服务器
scp webdav.tar peter@服务器公网IP:/home/peter/
  1. Linux 服务器上导入镜像
sudo docker load -i /home/liupei/webdav.tar
  1. 启动 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 / 21xx
    
  • WebDAV 根目录:

    /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_EMAIL
  • SEAFILE_ADMIN_PASSWORD
  • SEAFILE_SERVER_HOSTNAME

3️⃣ 启动 Seafile

docker-compose up -d

第一次启动 2–5 分钟,数据库会自动初始化。

对于无法访问 docker hub

docker-compose down

总体思路(先看一眼)

能连 Docker Hub 的电脑 A 上:

  1. docker pull 拉镜像
  2. docker save 导出成 .tar

.tar 文件传到 你的服务器 B

  1. docker load 导入
  2. 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 images

2️⃣ 导出镜像为 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 页面中:

  1. 点击 新建资料库

  2. 例如:

    • Project_RemoteSensing
    • Project_Chess
  3. 每个资料库内部可无限建子文件夹:

    Project_RemoteSensing
    ├── data
    ├── figures
    ├── paper
    ├── code
    

客户端同步(核心体验)

1️⃣ 下载 Seafile 客户端

(这是 Seafile 同步速度快的关键)

2️⃣ 客户端配置

  1. 服务器地址:

    http://你的服务器IP:8000
    
  2. 登录账号

  3. 选择资料库

  4. 指定本地同步文件夹

之后你就可以:

  • 本地新建文件 → 自动上传
  • 改 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 联动

参考来源