Docker安装Oracle

1. 版本选择

Oracle 19c:生产环境的"压舱石"

如果你期望容器能稳定运行,模拟一个可靠的企业级数据库环境,19c 是目前最稳妥、最主流的选择。

  • 官方定位 :它是一个长期支持版本(LTS),支持周期长,稳定性经过了全球无数生产环境的检验。
  • 对你而言:绝大多数教程和网上的经验分享都是以 19c 为基础的。这意味着你在安装或使用中遇到问题时,更容易找到解决方案。正如资料里提到的,19c 是目前企业生产环境中的标准配置。

Oracle 23ai (原名23c):面向未来的"创新者"

如果你想尝鲜,体验 Oracle 的最新特性,23ai(即原来的 23c)就是下一代的选择。

  • 官方定位 :它也是一个长期支持版本(LTS),是 Oracle 目前主推的融合了 AI 能力的旗舰版本。
  • 核心亮点:它引入了 AI 向量搜索、JSON 关系二元性等面向现代应用开发的功能。
  • 对你而言:如果你在做个人学习或新项目开发,希望技术不落后,可以考虑它。它的免费版 (23ai Free) 在 Docker 上也很容易获取。

各主要版本速览

版本 当前定位 一句话选型建议
11g 经典老将 不再推荐。由于主流支持已结束,缺乏安全更新,适合有特定需求的遗留系统。
12c / 18c 过渡版本 不推荐。它们引入了多租户架构,但目前已停止或即将停止服务,没有理由在新项目中选用。
21c 创新尝鲜版 不推荐。作为短期创新版本,支持周期短,更像是一个向 23ai 过渡的中间版本。
19c 稳定首选 强烈推荐。最成熟、文档最丰富、网上资料最多的版本,适合绝大多数学习、测试和准生产环境。
23ai (23c) 未来旗舰 新手尝鲜推荐。最新长期支持版本,融合 AI 能力,适合新项目和个人开发者学习未来技术方向。

在 Docker 里安装 Oracle 19c,国内网络环境下最稳妥的方式是使用国内镜像源,配合持久化配置,大约 10-20 分钟就能完成。下面分步说明。

2. Oracle安装

步骤一:拉取镜像

国内访问 Docker Hub 拉取大镜像可能很慢甚至超时。推荐使用阿里云镜像,速度快且稳定。

bash 复制代码
docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c

步骤二:创建数据持久化目录

为了防止容器删除后数据丢失,需要在宿主机上创建一个目录来存放数据库文件,并确保容器内的 oracle 用户有写入权限。

bash 复制代码
# 创建目录(路径可自定义)
sudo mkdir -p /docker/oracle19c/oradata

# 授予读写权限
sudo chmod 777 /docker/oracle19c/oradata

步骤三:创建并运行容器

执行以下 docker run 命令来创建和启动容器:

bash 复制代码
docker run -d \
  --name oracle19c \
  --restart=unless-stopped \
  -p 1521:1521 \
  -p 5500:5500 \
  -e ORACLE_SID=ORCLCDB \
  -e ORACLE_PDB=ORCLPDB \
  -e ORACLE_PWD=oracle \
  -e ORACLE_CHARACTERSET=AL32UTF8 \
  -v /opt/install/docker/oracle19c/oradata:/opt/oracle/oradata \
  registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c

各参数说明:

参数 说明
-d 后台运行容器
--name oracle19c 容器名称,后续管理方便
--restart=unless-stopped 宿主机重启后自动启动容器
-p 1521:1521 映射数据库连接端口
-p 5500:5500 映射 Web 管理端口 (EM Express)
-e ORACLE_SID=ORCLCDB 数据库实例名(容器数据库 CDB)
-e ORACLE_PDB=ORCLPDB 可插拔数据库名(实际存放数据的 PDB)
-e ORACLE_PWD=oracle 管理员 SYSSYSTEM 的密码
-e ORACLE_CHARACTERSET=AL32UTF8 字符集,支持中文
-v 数据卷挂载,实现数据持久化。" :" 分隔符,左边是宿主机路径(如果不存在,可以提前用 mkdir -p 创建),右边是容器内路径(官方 Docker 镜像预设的路径)

步骤四:等待初始化完成

Oracle 数据库的初始化需要较长时间(约 5-10 分钟)。执行以下命令实时查看日志进度,直到看到 DATABASE IS READY TO USE! 字样,才算真正成功:

bash 复制代码
docker logs -ft oracle19c

⚠️ 注意 :如果看到 DEPRECATION NOTICE 警告,那是镜像格式的提醒,不影响使用,可以放心忽略。

步骤五:连接数据库

数据库初始化成功后,可以通过下面几种方式连接和验证:

方式1:进入容器内连接
bash 复制代码
# 进入容器内部
docker exec -it oracle19c /bin/bash

# 在容器内以 sysdba 身份登录
sqlplus / as sysdba

# 查看所有可插拔数据库 (PDB)
SQL> show pdbs;
方式2:使用客户端工具(如 DBeaver/Navicat)外部连接
项目
主机 宿主机IPlocalhost
端口 1521
服务名 ORCLPDB(这就是 PDB 的名称)
用户名 system
密码 oracle(你设置的值)
方式3:通过 Web 管理界面(EM Express)

打开浏览器,访问 https://宿主机IP:5500/em,用用户名 system、密码 oracle 登录(浏览器会提示证书风险,点击"高级"->"继续访问"即可)。

步骤六:创建用户

bash 复制代码
-- 创建一个名为 root 的用户,密码为 123456
CREATE USER root IDENTIFIED BY 123456;

-- 给这个用户连接数据库和创建一些基本对象(如表、视图)的权限
GRANT CONNECT, RESOURCE TO developer;

-- 给予开发者操作自己对象的权限
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO developer;

你给出的 GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO developer; 这组权限是够用的,但仅限于最基础的开发。这为开发者打开了连接数据库、创建和修改自己表、创建视图的大门。

不过,为了让开发体验更顺畅,通常还需要补充几个核心权限。我把它们整理成了一个表格,你可以对照着看:

📝 核心权限速查表

你需要的能力 对应的权限 为什么需要它 是否必要?
连接数据库 CREATE SESSION 已经授予,这是访问数据库的"门票"。 已有
在自己的Schema下建表、视图 CREATE TABLE CREATE VIEW 已经授予,这是开发的基础。 已有
创建存储过程、函数或包 CREATE PROCEDURE 如果后端逻辑需要用PL/SQL实现,这是必备权限。 强烈推荐
创建触发器 CREATE TRIGGER 实现复杂数据约束或自动化日志记录时会用到。 按需授予
创建序列 CREATE SEQUENCE 常用于生成自增主键,是很多表的标准配置。 强烈推荐
创建同义词 CREATE SYNONYM 让复杂的对象名变得简单,提升开发便利性。 可选
无限使用表空间 UNLIMITED TABLESPACE 这个非常重要!否则建表时一旦超过系统默认配额(通常是0),就会报错。 必须补充
(备选)使用推荐的角色包 CONNECT, RESOURCE 这两个角色包含了上述大部分开发者所需的系统权限,是更省事的"一键授予"方案。 ⭐ 强烈推荐

注:CONNECT 角色实际上就包含了 CREATE SESSION 权限,而 RESOURCE 角色则包含了 CREATE TABLECREATE PROCEDURECREATE SEQUENCE 等核心开发权限。这两个角色搭配使用,基本能满足绝大部分开发需求。

直接授权DBA管理员权限,方便开发

sql 复制代码
GRANT DBA TO root;

💡 补充说明

  1. 关于中文显示:如果查询中文时出现乱码,是因为客户端

  2. 字符集设置不匹配。可以在连接前执行 export NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8 来解决。

  3. 资源要求 :Oracle 19c 对内存有一定要求,建议给 Docker 分配至少 4GB 内存,宿主机建议 6GB 以上。

  4. 常用管理命令

bash 复制代码
# 查看运行状态
docker ps | grep oracle19c

# 停止容器
docker stop oracle19c

# 启动容器
docker start oracle19c

# 查看日志
docker logs -f oracle19c
相关推荐
邵奈一1 小时前
OrbStack 环境下 Dify 启动报错完整解决方案教程:validating docker-compose.yaml
docker·容器·eureka
一只小bit2 小时前
Docker 镜像制作:包含自定义镜像及常用命令
运维·docker·容器
苍煜3 小时前
K8s 核心资源详解(Pod/Deployment/Service 实战)
云原生·容器·kubernetes
江湖有缘3 小时前
容器化笔记:Memory应用在Docker环境下的部署与配置
笔记·docker·容器
苍煜3 小时前
Docker Compose 多容器编排实战(系列第五篇:开发环境一键部署)
运维·docker·容器
sbjdhjd4 小时前
企业级 Docker 镜像仓库建设与运维规范
linux·运维·docker·云原生·容器·eureka·开源
ChaITSimpleLove4 小时前
优化 WSL2 性能:为 Docker 和 K8s 定制高效内存配置指南
docker·容器·性能优化·kubernetes·wsl2·windows开发·pwsh
苍煜5 小时前
K8s 网络与存储(容器网络互通与数据持久化)
网络·容器·kubernetes
苍煜5 小时前
K8s 集群快速搭建(系列第八篇:单机/多节点集群实战)
java·容器·kubernetes