使用 Docker Compose 快速部署 Oracle 11G 与 RustFS

本文将详细介绍如何通过 Docker Compose 一键部署 Oracle 11G 数据库与 RustFS 对象存储服务,并提供完整的配置说明与使用示例。


目录

  1. 前置准备
  2. Oracle 11G 部署
  3. RustFS 部署
  4. 总结

前置准备

在开始之前,请确保你的环境满足以下条件:

  • 已安装 Docker(建议版本 20.10+)
  • 已安装 Docker Compose(建议版本 2.0+)
  • 确保服务器端口 1521(Oracle)和 9000/9001(RustFS)未被占用
  • 确保有足够的磁盘空间(建议预留 10GB+)

Oracle 11G 部署

1. 创建 Docker Compose 文件

在项目目录下创建 docker-compose-oracle.yaml 文件,内容如下:

version: '3'

services:
  oracle:
    # 官方维护的 Oracle 11g 镜像(最稳定、常用)
    image: oracleinanutshell/oracle-xe-11g
    container_name: oracle11g
    ports:
      - "1521:1521"   # Oracle 默认端口
    volumes:
      - ./volumes/data:/home/oracle/app/oracle/oradata  # 数据持久化
    environment:
      - TZ=Asia/Shanghai
    restart: always
    privileged: true  # 必须开启,否则启动失败

2. 启动 Oracle 11G 服务

# 创建数据目录
mkdir -p ./volumes/data

# 启动服务
docker-compose -f docker-compose-oracle.yaml up -d

# 查看日志,等待初始化完成
docker logs -f oracle11g

注意:首次启动需要等待 3-5 分钟完成数据库初始化,当看到 Database ready to use 字样时表示启动成功。

3. 默认连接信息

参数
主机地址 localhost 或服务器 IP
端口 1521
SID xe
默认用户名 system
默认密码 oracle

连接示例(使用 SQL*Plus):

# 进入容器
 docker exec -it oracle11g sqlplus system/oracle

或使用 SQL 客户端连接:

jdbc:oracle:thin:@localhost:1521:xe

4. 初始化数据库配置

连接到数据库后,执行以下 SQL 脚本完成基础配置:

4.1 创建临时表空间
CREATE TEMPORARY TABLESPACE temp_ts
TEMPFILE '/home/oracle/app/oracle/oradata/xe/temp_ts.dbf'
SIZE 100M AUTOEXTEND ON;
4.2 创建 TEST 表空间
CREATE TABLESPACE test
DATAFILE '/home/oracle/app/oracle/oradata/xe/test.dbf'
SIZE 100M
AUTOEXTEND ON
NEXT 25M
MAXSIZE 500M;
4.3 创建业务用户并授权
-- 创建用户
CREATE USER testuser IDENTIFIED BY testuser123
DEFAULT TABLESPACE test
TEMPORARY TABLESPACE temp_ts
QUOTA UNLIMITED ON test;

-- 授权(确保 CRUD 操作不受影响)
GRANT CREATE SESSION TO testuser;
GRANT CREATE TABLE TO testuser;
GRANT CREATE VIEW TO testuser;
GRANT CREATE SEQUENCE TO testuser;
GRANT CREATE TRIGGER TO testuser;
GRANT CREATE PROCEDURE TO testuser;
GRANT CREATE SYNONYM TO testuser;
GRANT UNLIMITED TABLESPACE TO testuser;

-- 数据操作权限
GRANT SELECT ANY TABLE TO testuser;
GRANT INSERT ANY TABLE TO testuser;
GRANT UPDATE ANY TABLE TO testuser;
GRANT DELETE ANY TABLE TO testuser;

-- 连接权限
GRANT CONNECT TO testuser;
GRANT RESOURCE TO testuser;

-- 如果需要 DBA 权限(可选,生产环境慎用)
-- GRANT DBA TO testuser;
4.4 创建示例表 T1

使用 testuser 登录后执行:

CONNECT testuser/testuser123

CREATE TABLE T1 (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(100) NOT NULL,
    description VARCHAR2(500),
    created_at DATE DEFAULT SYSDATE,
    status NUMBER(1) DEFAULT 1
);

-- 添加注释
COMMENT ON TABLE T1 IS '示例业务表';
COMMENT ON COLUMN T1.id IS '主键ID';
COMMENT ON COLUMN T1.name IS '名称';
COMMENT ON COLUMN T1.description IS '描述';
COMMENT ON COLUMN T1.created_at IS '创建时间';
COMMENT ON COLUMN T1.status IS '状态:1-有效,0-无效';

-- 创建序列(用于自增ID)
CREATE SEQUENCE seq_t1_id START WITH 1 INCREMENT BY 1;

-- 插入测试数据
INSERT INTO T1 (id, name, description) VALUES (seq_t1_id.NEXTVAL, '测试数据1', '第一条测试记录');
INSERT INTO T1 (id, name, description) VALUES (seq_t1_id.NEXTVAL, '测试数据2', '第二条测试记录');
COMMIT;

-- 查询验证
SELECT * FROM T1;

5. 常用运维命令

# 停止 Oracle
docker-compose -f docker-compose-oracle.yaml down

# 重启 Oracle
docker-compose -f docker-compose-oracle.yaml restart

# 查看运行状态
docker ps | grep oracle11g

# 备份数据(导出)
docker exec oracle11g expdp system/oracle DIRECTORY=DATA_PUMP_DIR DUMPFILE=backup.dmp FULL=y

# 进入容器执行 SQL
docker exec -it oracle11g sqlplus system/oracle

RustFS 部署

1. 创建 Docker Compose 文件

在项目目录下创建 docker-compose-rustfs.yaml 文件,内容如下:

# Copyright 2024 RustFS Team
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

version: "3.9"

services:
  # RustFS main service
  rustfs:
    image: rustfs/rustfs:latest
    container_name: rustfs-server
    security_opt:
      - "no-new-privileges:true"
    ports:
      - "9000:9000" # S3 API port
      - "9001:9001" # Console port
    environment:
      - RUSTFS_VOLUMES=/data/rustfs{0...3}
      - RUSTFS_ADDRESS=0.0.0.0:9000
      - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9001
      - RUSTFS_CONSOLE_ENABLE=true
      - RUSTFS_CORS_ALLOWED_ORIGINS=*
      - RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS=*
      - RUSTFS_ACCESS_KEY=rustfsadmin # CHANGEME
      - RUSTFS_SECRET_KEY=rustfsadmin # CHANGEME
      - RUSTFS_OBS_LOGGER_LEVEL=info
      - RUSTFS_TLS_PATH=/opt/tls
      # Object Cache
      - RUSTFS_OBJECT_CACHE_ENABLE=true
      - RUSTFS_OBJECT_CACHE_TTL_SECS=300

    volumes:
      - ./volumes/rustfs_data_0:/data/rustfs0
      - ./volumes/rustfs_data_1:/data/rustfs1
      - ./volumes/rustfs_data_2:/data/rustfs2
      - ./volumes/rustfs_data_3:/data/rustfs3
      - ./volumes/logs:/app/logs
    networks:
      - rustfs-network
    restart: unless-stopped
    healthcheck:
      test:
        [
          "CMD",
          "sh", "-c",
          "curl -f http://127.0.0.1:9000/health && curl -f http://127.0.0.1:9001/rustfs/console/health"
        ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

  # RustFS volume permissions fixer service
  volume-permission-helper:
    image: alpine
    volumes:
      - ./volumes/rustfs_data_0:/data0
      - ./volumes/rustfs_data_1:/data1
      - ./volumes/rustfs_data_2:/data2
      - ./volumes/rustfs_data_3:/data3
      - ./volumes/logs:/logs
    command: >
      sh -c "
        chown -R 10001:10001 /data0 /data1 /data2 /data3 /logs &&
        echo 'Volume Permissions fixed' &&
        exit 0
      "
    restart: "no"

networks:
  rustfs-network:

2. 启动 RustFS 服务

# 创建数据目录
mkdir -p ./volumes/rustfs_data_{0,1,2,3}
mkdir -p ./volumes/logs

# 启动服务(先运行权限修复,再启动主服务)
docker-compose -f docker-compose-rustfs.yaml up -d volume-permission-helper
docker-compose -f docker-compose-rustfs.yaml up -d rustfs

# 查看日志
docker logs -f rustfs-server

3. 访问 RustFS

服务启动后,可以通过以下地址访问:

服务 访问地址 说明
S3 API 端点 http://<服务器IP>:9000 程序/SDK 调用接口
Web 管理控制台 http://<服务器IP>:9001 浏览器可视化界面

请将 <服务器IP> 替换为实际的服务器 IP 地址或 localhost(本地部署时)。

4. 默认登录凭证

参数
Access Key rustfsadmin
Secret Key rustfsadmin

5. 配置 S3 资源

5.1 通过 Web 控制台配置
  1. 打开浏览器,访问 http://<服务器IP>:9001
  2. 输入 Access Key rustfsadmin 和 Secret Key rustfsadmin 登录
  3. 在左侧导航栏点击 BucketsCreate Bucket
  4. 输入 Bucket 名称(例如 my-bucket),点击 Create
  5. 进入 Bucket 后,可以上传文件、设置访问策略、配置生命周期规则等
5.2 通过 AWS CLI 配置(推荐)
# 安装 AWS CLI(如未安装)
pip install awscli

# 配置 RustFS 凭证
aws configure --profile rustfs
# 根据提示输入:
# AWS Access Key ID: rustfsadmin
# AWS Secret Access Key: rustfsadmin
# Default region name: us-east-1
# Default output format: json

# 配置 S3 端点地址
aws --profile rustfs --endpoint-url http://<服务器IP>:9000 s3 ls

# 创建 Bucket
aws --profile rustfs --endpoint-url http://<服务器IP>:9000 s3 mb s3://my-bucket

# 上传文件
aws --profile rustfs --endpoint-url http://<服务器IP>:9000 s3 cp ./test.txt s3://my-bucket/

# 列出文件
aws --profile rustfs --endpoint-url http://<服务器IP>:9000 s3 ls s3://my-bucket/
5.3 通过 SDK 配置(以 Python boto3 为例)
import boto3

# 初始化 S3 客户端
s3_client = boto3.client(
    's3',
    endpoint_url='http://<服务器IP>:9000',  # RustFS S3 API 端点
    aws_access_key_id='rustfsadmin',
    aws_secret_access_key='rustfsadmin',
    region_name='us-east-1'
)

# 创建 Bucket
s3_client.create_bucket(Bucket='my-bucket')

# 上传文件
s3_client.upload_file('local_file.txt', 'my-bucket', 'remote_file.txt')

# 下载文件
s3_client.download_file('my-bucket', 'remote_file.txt', 'downloaded_file.txt')

# 列出 Bucket 中的对象
response = s3_client.list_objects_v2(Bucket='my-bucket')
for obj in response.get('Contents', []):
    print(obj['Key'])
5.4 修改默认密码(生产环境必须)

编辑 docker-compose-rustfs.yaml 文件,修改以下环境变量:

environment:
  - RUSTFS_ACCESS_KEY=your-new-access-key    # 修改为强密码
  - RUSTFS_SECRET_KEY=your-new-secret-key    # 修改为强密码

修改后重启服务:

docker-compose -f docker-compose-rustfs.yaml down
docker-compose -f docker-compose-rustfs.yaml up -d

6. 常用运维命令

# 停止 RustFS
docker-compose -f docker-compose-rustfs.yaml down

# 重启 RustFS
docker-compose -f docker-compose-rustfs.yaml restart

# 查看运行状态
docker ps | grep rustfs-server

# 查看实时日志
docker logs -f rustfs-server

# 进入容器排查问题
docker exec -it rustfs-server sh

总结

本文介绍了如何通过 Docker Compose 快速部署 Oracle 11G 和 RustFS,主要内容包括:

服务 默认端口 默认账号 默认密码 访问地址
Oracle 11G 1521 system oracle localhost:1521
RustFS S3 API 9000 rustfsadmin rustfsadmin http://<IP>:9000
RustFS 控制台 9001 rustfsadmin rustfsadmin http://<IP>:9001

生产环境建议

  1. 修改默认密码:务必修改 Oracle 的 system 密码和 RustFS 的 Access/Secret Key
  2. 启用 TLS:为 RustFS 配置 HTTPS 证书,确保数据传输安全
  3. 数据备份:定期备份 Oracle 数据文件和 RustFS 存储卷
  4. 网络隔离:使用 Docker 网络限制服务暴露范围,避免直接暴露在公网
  5. 监控告警:配置日志收集和性能监控,及时发现异常

如有问题,欢迎在评论区留言交流!


版权声明:RustFS 部分遵循 Apache 2.0 开源协议,Oracle 镜像遵循相应授权协议。本文仅供学习交流使用。

更多推荐