1. 前言
在现代软件开发和部署中,Docker已成为不可或缺的工具。它提供了轻量级、可移植的容器化解决方案,使应用部署变得简单高效。本文将详细介绍如何使用Docker一键部署四个常用服务:RustFS(高性能文件存储)、GoFastDFS(分布式文件系统)、Gitea(自托管Git服务)和PostgreSQL(关系型数据库)。无论你是个人开发者还是团队负责人,这些服务都能为你的项目提供强大支持。
2. 前提条件
- 已安装Docker(版本20.10+)
- 已安装Docker Compose(版本1.29+)
- 64位操作系统(Windows/Linux/Mac)
- 至少4GB可用内存
3. RustFS部署
RustFS是一款使用Rust语言编写的高性能文件存储系统,支持S3协议,适用于私有云存储场景。
3.1 Docker命令部署
java
Linux:
docker run -d \
--name rustfs_container \
--user root \
-p 9000:9000 \
-p 9001:9001 \
-v D:/ProgramData/docker/rustfs/data:/data:z \
-e RUSTFS_ACCESS_KEY=rustfsadmin \
-e RUSTFS_SECRET_KEY=rustfsadmin \
-e RUSTFS_CONSOLE_ENABLE=true \
rustfs/rustfs:latest \
--address 0.0.0.0:9000 \
--console-enable \
--console-address 0.0.0.0:9001 \
--access-key rustfsadmin \
--secret-key rustfsadmin
Windows:
docker run -d `
--name rustfs_container `
--user root ` -p 9000:9000 `
-p 9001:9001 `
-v D:/ProgramData/docker/rustfs/data:/data:z `
-e RUSTFS_ACCESS_KEY=rustfsadmin `
-e RUSTFS_SECRET_KEY=rustfsadmin `
-e RUSTFS_CONSOLE_ENABLE=true `
rustfs/rustfs:latest `
--address 0.0.0.0:9000 `
--console-enable `
--console-address 0.0.0.0:9001 `
--access-key rustfsadmin `
--secret-key rustfsadmin
界面:http://localhost:9001/rustfs/console/browser
参数说明:
--user root: 以root用户运行容器-p 9000:9000: 映射API端口-p 9001:9001: 映射控制台端口-v: 挂载数据卷RUSTFS_ACCESS_KEY和RUSTFS_SECRET_KEY: 访问凭证--console-enable: 启用Web控制台
3.2 Docker Compose部署(推荐)
创建docker-compose.yml文件:
python
version: '3.8'
services:
rustfs:
image: rustfs/rustfs:latest
container_name: rustfs_container
user: root
ports:
- "9000:9000"
- "9001:9001"
volumes:
- D:/ProgramData/docker/rustfs/data:/data:z
environment:
- RUSTFS_ACCESS_KEY=rustfsadmin
- RUSTFS_SECRET_KEY=rustfsadmin
- RUSTFS_CONSOLE_ENABLE=true
command: >
--address 0.0.0.0:9000
--console-enable
--console-address 0.0.0.0:9001
--access-key rustfsadmin
--secret-key rustfsadmin
restart: unless-stopped
启动服务:
docker-compose up -d
访问控制台:http://localhost:9001/rustfs/console/browser
默认登录凭证:用户名/密码均为rustfsadmin
4. GoFastDFS部署
GoFastDFS是一个基于Golang实现的高性能分布式文件系统,适合大文件存储。
4.1 下载配置文件
GoFastDFS东西有点多,无法把内容全部写上,请从网盘下载Docker的安装

部分docker-compose.yml:
java
#version: '3.4'
services:
fastdfs1:
# build:
# context: .
# dockerfile: Dockerfile
image: sjqzhang/go-fastdfs:latest #docker pull sjqzhang/go-fastdfs
container_name: fastdfs1
privileged: true
restart: always
#networks:
# - extnetwork
volumes:
- type: bind
source: ./fastdfs/data1
target: /usr/local/go-fastdfs/data
ports:
- "9527:8080"
fastdfs2:
# build:
# context: .
# dockerfile: Dockerfile
image: sjqzhang/go-fastdfs:latest #docker pull sjqzhang/go-fastdfs
container_name: fastdfs2
privileged: true
restart: always
#networks:
# - extnetwork
volumes:
- type: bind
source: ./fastdfs/data2
target: /usr/local/go-fastdfs/data
ports:
- "9526:8080"
nginx:
image: nginx:latest
container_name: fileserver-nginx
privileged: true
restart: always
#networks:
# - extnetwork
ports:
- "9528:80"
volumes:
- type: bind
source: ./nginx/nginx.conf
target: /etc/nginx/nginx.conf
- type: bind
source: ./nginx/static
target: /usr/share/nginx/html
- type: bind
source: ./nginx/log
target: /var/log/nginx
fastdfs-web:
build:
context: ./fastdfs-web
dockerfile: Dockerfile
image: fastdfs-web:latest #docker pull sjqzhang/go-fastdfs
container_name: fastdfs-web
volumes:
- type: bind
source: ./fastdfs-web/db/go-fastdfs.db
target: /db/go-fastdfs.db
- type: bind
source: ./fastdfs-web/logs
target: /logs
privileged: true
restart: always
#networks:
# extnetwork:
# ipv4_address: 172.19.0.20
ports:
- "8099:8088"
links:
- fastdfs1
- fastdfs2
depends_on:
- fastdfs1
- fastdfs2
networks:
extnetwork:
driver: bridge
ipam:
config:
- subnet: 172.19.0.0/16
4.2 启动服务
docker-compose up -d
访问Web界面:http://localhost:8099
初次访问会要求设置管理员密码,请妥善保存。
5. Gitea部署
Gitea是一个轻量级的自托管Git服务,适合团队代码管理和协作。
5.1 创建Docker Compose文件
创建gitea-compose.yml文件:
java
version: "3"
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: always
environment:
- USER_UID=1000
- USER_GID=1000
- TZ=Asia/Shanghai
ports:
- "3000:3000" # HTTP
- "222:22" # SSH(避免与主机22端口冲突)
volumes:
- D:/ProgramData/docker/gitea/gitea:/data
- D:/ProgramData/docker/gitea/etc/timezone:/etc/timezone:ro
- D:/ProgramData/docker/gitea/etc/localtime:/etc/localtime:ro
6. PostgreSQL部署
PostgreSQL是一个强大的开源对象关系数据库系统。
6.1 创建Docker Compose文件
创建postgres-compose.yml文件:
version: '3.8'
services:
postgres:
image: postgres:latest
container_name: postgres_container
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres_password
- POSTGRES_DB=postgres
volumes:
- D:/ProgramData/docker/postgres/data:/var/lib/postgresql/data
ports:
- "5432:5432"
restart: unless-stopped
Dockerfie:
java
# 使用明确的 PostgreSQL 版本(推荐)
FROM postgres:17
# 设置环境变量
ENV POSTGRES_USER=postgres
ENV POSTGRES_PASSWORD=postgres
ENV POSTGRES_DB=postgres
# 安装编译依赖 + PostgreSQL 开发包
RUN apt-get update && \
apt-get install -y \
build-essential \
git \
cmake \
libssl-dev \
libpq-dev \
zlib1g-dev \
postgresql-server-dev-17 && \
rm -rf /var/lib/apt/lists/*
# 克隆并编译 pgvector
RUN git clone --branch v0.8.1 https://github.com/pgvector/pgvector.git /pgvector && \
cd /pgvector && \
make && \
make install
# 可选:清理源码(减小镜像体积)
RUN rm -rf /pgvector
# 复制初始化脚本(如果需要自动启用 extension)
COPY init.sql /docker-entrypoint-initdb.d/
init.sql
sql
-- 启用 vector 扩展
CREATE EXTENSION IF NOT EXISTS vector;
-- 创建一个示例表
CREATE TABLE example (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
embedding VECTOR(3) -- 假设嵌入维度为3
);
-- 插入一些示例数据
INSERT INTO example (name, embedding) VALUES ('Alice', '[1.0, 2.0, 3.0]'), ('Bob', '[4.0, 5.0, 6.0]');
7. 一体化部署方案
将所有服务整合到一个docker-compose.yml文件中:
version: '3.8'
services:
rustfs:
image: rustfs/rustfs:latest
container_name: rustfs_container
user: root
ports:
- "9000:9000"
- "9001:9001"
volumes:
- D:/ProgramData/docker/rustfs/data:/data:z
environment:
- RUSTFS_ACCESS_KEY=rustfsadmin
- RUSTFS_SECRET_KEY=rustfsadmin
- RUSTFS_CONSOLE_ENABLE=true
command: >
--address 0.0.0.0:9000
--console-enable
--console-address 0.0.0.0:9001
--access-key rustfsadmin
--secret-key rustfsadmin
restart: unless-stopped
gofastdfs:
image: sjq0/rush:latest
container_name: gofastdfs_container
ports:
- "8080:8080"
volumes:
- D:/ProgramData/docker/gofastdfs/data:/data:z
environment:
- GO_FASTDFS_DIR=/data
restart: unless-stopped
postgres:
image: postgres:latest
container_name: postgres_container
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres_password
- POSTGRES_DB=postgres
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- D:/ProgramData/docker/postgres/data:/var/lib/postgresql/data
ports:
- "5432:5432"
restart: unless-stopped
gitea:
image: gitea/gitea:latest
container_name: gitea_container
environment:
- USER_UID=1000
- USER_GID=1000
- ROOT_URL=http://localhost:3000/
- DB_TYPE=postgres
- DB_HOST=postgres:5432
- DB_NAME=gitea
- DB_USER=postgres
- DB_PASSWD=postgres_password
restart: always
volumes:
- D:/ProgramData/docker/gitea/data:/data
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
depends_on:
- postgres
7.1 启动所有服务
docker-compose up -d
7.2 服务访问地址
- RustFS控制台:http://localhost:9001/rustfs/console/browser
- GoFastDFS管理界面:http://localhost:8080
- Gitea:http://localhost:3000
- PostgreSQL:localhost:5432 (使用pgAdmin或命令行客户端连接)
8. 常见问题与解决方案
8.1 Windows路径问题
在Windows系统中,Docker可能无法访问非共享目录。确保:
- Docker Desktop中已设置目录共享
- 使用绝对路径,如:
D:\\ProgramData\\docker\\rustfs\\data - 避免使用空格和特殊字符
8.2 端口冲突
如果遇到端口冲突,修改docker-compose.yml中的主机端口映射,例如将"3000:3000"改为"3001:3000"。
8.3 权限问题
在Linux系统上,可能需要设置正确的文件权限:
chmod -R 777 D:/ProgramData/docker/
9. 后续优化建议
- 配置HTTPS:为所有服务配置SSL证书
- 设置备份策略:定期备份数据卷
- 资源限制:在docker-compose.yml中设置内存和CPU限制
- 监控系统:添加Prometheus+Grafana监控
- 日志管理:配置集中式日志收集系统
10. 总结
通过Docker,我们可以轻松部署和管理多个服务,无需担心环境依赖和配置冲突。本文详细介绍了RustFS、GoFastDFS、Gitea和PostgreSQL的Docker部署方案,提供了完整的docker-compose配置,使开发和运维工作更加高效。这些服务的组合为开发团队提供了完整的基础设施:代码托管(Gitea)、文件存储(RustFS/GoFastDFS)和数据存储(PostgreSQL)。
记住定期更新容器镜像,保持系统安全。在生产环境中,还需要考虑高可用性和灾备方案。
提示:本文中的所有配置均可根据实际需求进行调整,特别是数据存储路径和访问凭证,建议在生产环境中使用强密码并妥善保管。
本文首发于CSDN,转载请注明出处。
作者:DevOps实践者
时间:2026年01月18日