Docker 安装 Oracle 19c
一、环境说明
-
虚拟机:VMware Workstation Pro 17
-
系统:Ubuntu 24.04.2 服务器版
- 内存:6G
- 处理器:2
- 硬盘:30G
-
SSH:FinalShell 4.5.12
-
Docker 版本:Docker 28.4.0
-
数据库:Oracle 19c
-
数据库管理工具:DBeaver
本次安装的版本是 Oracle 19c,属于长期支持版本,是当前部署最广泛、最成熟稳定的版本,适用于绝大多数核心生产系统。考虑到 Oracle 19c 的大小,一定要注意磁盘容量,不然拉取镜像可能导致失败。
当前登录用户已加入 docker 组,所以在执行 Docker 命令时无需添加 sudo。
二、安装
2.1 拉取镜像
如果想要拉取 Oracle 官方镜像,需要进行账户登录操作,当前镜像并非在生产环境中使用,选择一个信誉良好的第三方镜像也是可以的。
考虑到便利性,此次是从阿里云下载。
docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c
通过 docker images 命令,可以看到下载的镜像。

2.2 创建并授权本地目录
为了持久化保存数据库文件(避免容器删除后数据丢失),需要创建一个目录并赋予相应权限:
sudo mkdir -p /docker/oracle19c/oradata # 创建目录
sudo chmod 777 /docker/oracle19c/oradata # 授予读写执行权限
2.3 运行容器
使用 docker run 命令运行容器。
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 /docker/oracle19c/oradata:/opt/oracle/oradata \
registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c
命令解析:
docker run:Docker 的核心命令,用于从镜像创建并启动一个新容器。-d:--detach的简写,表示在后台运行容器,并返回容器ID。这样终端不会被容器的输出日志所占用。--name oracle19c:为容器指定一个易于识别的名称oracle19c,方便后续的管理操作(如启动、停止、查看日志),而不需要使用冗长的容器ID。--restart=unless-stopped:这是解决“开机自启动”问题的关键参数。 它定义了容器的重启策略。unless-stopped表示:无论容器以何种原因退出(包括正常退出),Docker 守护进程都会自动重启它,除非容器是被你明确地手动停止的(例如使用了docker stop oracle19c命令)。- 这个策略确保了即使宿主机重启,Docker 服务起来后也会自动把你的 Oracle 容器拉起来。
-p 1521:1521:端口映射,这是连接数据库的关键。- 格式:
-p <宿主机端口>:<容器内端口> - 作用:将容器内部的 1521 端口(Oracle 数据库默认的监听端口)映射到宿主机的 1521 端口。
- 结果:外部客户端(如 SQL Developer、JDBC 程序)可以通过访问
宿主机IP:1521来连接到容器内的 Oracle 数据库。
- 格式:
-p 5500:5500:同样是端口映射。- 作用:将容器内部的 5500 端口(Oracle EM Express 的控制台端口)映射到宿主机的 5500 端口。
- 结果:你可以通过浏览器访问
https://宿主机IP:5500/em来打开 Oracle Enterprise Manager Database Express 的 Web 管理界面。
-e ORACLE_SID=ORCLCDB:设置环境变量,用于定义 Oracle 的系统标识符(System ID),即数据库实例名。这里设置为ORCLCDB。-e ORACLE_PDB=ORCLPDB:设置环境变量,用于定义可插拔数据库(Pluggable Database, PDB)的名称。Oracle 19c 采用多租户架构,CDB(Container Database)是容器,里面可以包含多个 PDB。这里设置为ORCLPDB。-e ORACLE_PWD=oracle:设置环境变量,定义数据库特权用户(如 SYS, SYSTEM)的初始密码。请注意:为了安全,在生产环境中务必使用强密码!-e ORACLE_CHARACTERSET=AL32UTF8:设置环境变量,定义数据库的字符集。AL32UTF8是 Unicode 字符集,能够完美支持中文和各种国际字符,避免出现乱码问题。-v /docker/oracle19c/oradata:/opt/oracle/oradata:数据卷挂载,这是保证数据持久化的关键,非常重要!- 格式:
-v <宿主机目录>:<容器内目录> - 作用:将宿主机上的目录
/docker/oracle19c/oradata挂载到容器内的/opt/oracle/oradata目录。 - 结果:容器内数据库生成的所有数据文件(控制文件、数据文件、重做日志等)都会实际存储在宿主机的目录中。即使容器被删除,数据也不会丢失。下次启动新容器时只要挂载同一个目录,数据就能恢复。
- 格式:
registry...:19c:指定用于创建容器的镜像名称和标签(Tag)。这里是从阿里云镜像仓库拉取的 Oracle 19c 镜像。
执行这个命令,在后台启动一个名为 oracle19c 的容器,它运行着一个开机自启动的 Oracle 19c 数据库实例。该实例的 SID 是 ORCLCDB,内含一个名为 ORCLPDB 的可插拔数据库,使用 UTF-8 字符集,并将所有数据持久化存储在宿主机的 /docker/oracle19c/oradata 目录下。外部可以通过主机的 1521 端口连接数据库,也可以通过 5500 端口访问 Web 管理界面。
成功运行后,你就可以使用连接字符串 宿主机IP:1521/ORCLPDB 和用户名 system / 密码 oracle 来连接这个数据库了。
2.4 查看安装过程
执行运行命令后,可以马上执行日志查看命令。创建实例的过程会比较长,请耐心等待。
docker logs -ft oracle19c
命令解析:
| 命令部分 | 含义与作用 | 补充说明 |
|---|---|---|
docker logs |
Docker 查看容器日志的基础命令。 | 用于获取容器的标准输出(stdout)和标准错误(stderr)。 |
-f |
--follow 的简写。保持输出日志,即实时显示容器产生的新日志,直到手动中断(如按 Ctrl+C)。 |
类似于 tail -f 命令的效果。这在观察数据库初始化等长时间进程时非常有用。 |
-t |
--timestamps 的简写。显示时间戳,即在每一行日志前加上日志产生的时间(通常是 UTC 时间)。 |
方便你定位事件发生的具体时间,对排查时序相关问题有帮助。 |
oracle19c |
容器的名称或 ID。这里指定要查看的是名为 oracle19c 的容器。 |
容器名称通常在 docker run 启动容器时通过 --name 参数指定(例如 --name oracle19c)。 |
当日志出现 DATABASE IS READY TO USE! 则表明安装成功。

当然也可以执行 docker ps 命令查看当前正在运行的容器。

三、连接
3.1 进入容器内连接
3.1.1 进入容器
docker exec -it oracle19c /bin/bash
命令解析:
| 命令部分 | 含义与作用 |
|---|---|
docker exec |
Docker 命令,用于在正在运行的容器内部执行一条命令。 |
-i |
--interactive 的简写。保持标准输入(stdin)打开,允许你与容器内的命令进行交互(比如输入命令)。 |
-t |
--tty 的简写。分配一个伪终端(pseudo-TTY),让你获得一个格式良好的、类似 SSH 的交互式 shell 体验。 |
-it |
通常组合使用,为容器内的进程提供一个交互式的终端。 |
oracle19c |
目标容器的名称(由 docker run --name oracle19c 指定)。 |
/bin/bash |
要在容器内部执行的命令,这里是启动 Bash shell。 |
这条命令会打开一个终端,让你可以像通过 SSH 连接到一台独立服务器一样,在名为 oracle19c 的容器内部执行各种 Linux 命令(如 ls, cd, ps 等)。结果如下:

3.1.2 连接数据库
sqlplus / as sysdba
命令解析:
| 命令部分 | 含义与作用 |
|---|---|
sqlplus |
Oracle 提供的命令行数据库管理工具,是与 Oracle 数据库交互的主要界面。 |
/ |
一种特殊的身份验证方式,称为 “操作系统认证”。它告诉 SQL*Plus:“使用当前登录到操作系统的用户身份来验证我”。 |
as sysdba |
一个特殊的权限角色,全称是 SYStem DataBase Administrator。这是 Oracle 数据库中最高级别的管理权限。 |
/ as sysdba |
组合起来的意思是:“请使用操作系统认证的方式,将我以 SYSDBA 的超级管理员身份登录到数据库”。 |
在容器内执行该命令,将以最高权限连接到 Oracle 数据库。结果如下:

3.1.3 执行一条语句
show pdbs;
这个命令用于查看当前数据库实例中所有可插拔数据库(Pluggable Databases, PDBs)的摘要信息。

3.1.4 退出
如果要退回到主机,可以通过 exit 命令:
- 输入
exit退出 SQL*Plus,回到容器内的 Bash。 - 再输入一次
exit退出容器,回到宿主机。
3.2 进入控制台
3.2.1 EM Express 地址
Oracle Enterprise Manager Database Express(EM Express)是一个基于 Web 的轻量级数据库管理工具,提供了对数据库性能、配置、空间使用情况和安全性的基本监控和管理功能。
https://<hostname>:<port>/em
<hostname>:数据库服务器的主机名或 IP 地址。<port>:设置的 EM Express 端口(如 5500)。
EM Express 必须使用 HTTPS 协议。首次访问时,浏览器可能会警告你的连接不是专用连接,继续访问即可。

3.2.2 登录
- Username:sys
- Password:oracle
- Container Name:ORCLPDB
Username 应该是具有SYSDBA或SYSOPER权限的账户,比如 SYS、SYSTEM。Password 和 Container Name 则是 docker run 命令中配置的内容。

3.3 DBeaver 连接
如果第一次使用 DBeaver 连接 Oracle 数据库,会需要下载对应驱动。不过,这个不需要你手动下载,一般会自动下载。


本文详细介绍了在VMware虚拟机Ubuntu系统上,通过Docker安装Oracle 19c的步骤。核心要点包括:拉取阿里云第三方Oracle 19c镜像,创建并授权本地目录以持久化数据,使用`docker run`命令运行容器(配置端口映射、环境变量、数据卷挂载及重启策略),并通过`docker logs`监控安装进程。安装完成后,演示了如何进入容器内部使用`sqlplus`连接数据库,以及通过EM Express和DBeaver等工具进行外部连接和管理。
浙公网安备 33010602011771号