使用 Docker 镜像来运行 Oracle
基本步骤:
- 拉取镜像
- 创建容器
- 配置环境并列(SID和密码)
- 配置本地 NET 服务名, 用户名为 system, 即可连接.
给出一个示例
docker pull container-registry.oracle.com/database/free:latest
docker volume create OracleVolumeDev
docker run -d --name my-oracle-dev \
-p 1521:1521 \
-e ORACLE_PWD Sa12345678 \
-v OracleVolumeDev:/opt/oracle/oradata \
container-registry.oracle.com/database/free:latest
不要修改 SID, 默认 SID 为 FREE 创建容器名需要使用小写 PowerShell 中使用 ` 代替 \
如果使用 PL/SQL 去连接, 配置 net (在 实例文件夹中找到 network, 然后在 admin 中有 tnsnames.ora 文件)
LOCALFREE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = FREE)
)
)
连接时看看容器日志, 以确保初始化完毕. 初始化的时间一般比较常.
查看当前 Oracle 版本:
SELECT * FROM v$version
文档详细说明
2023年10月31日, 此时官方给出的数据库版本为 23c
文档从 oracle 官网 > 产品 > 数据库 > 下载数据库 进入下载页面, 里面会有 Docker 连接.
该镜像是 Oracle Free Release 23c (23.3.0.0) 的镜像, 运行在 Oracle Linux 8 上. 该数据库包含可插拔多租户配置.
更详细的细节可以参考文档: http://docs.oracle.com/en/database/
仓库 URL https://container-registry.oracle.com/ords/ocr/ba/database/free
, 也是文档所在.
拉取最新镜像:
docker pull container-registry.oracle.com/database/free:latest
使用该镜像启动 Oracle Database Server 实例
镜像包含预构建数据 (pre-build database), 因此启动非常快.
快速启动非常适用于 CI/CD 场景. 启动 数据库服务实例, 可以执行下面命令, 其中 <oracle-db>
为容器名.
$ podman run -d --name <oracle-db> container-registry.oracle.com/database/free:latest
启动容器时, SYS
, SYSTEM
, 和 PDBADMIN
用户使用随机密码, 该密码为默认密码.
文档使用 podman 作为工具, 直接使用 docker 也是一样
在 podman 下 数据库 STATUS 为 healthy 后即可连接使用. 可以使用
ps
子命令进行查看.例如:
docker ps
,podman ps
等.
自定义配置
数据库容器带有很多参数可供快速配置. 还是官方示例:
podman run --name <容器名> \
-P | -p <本地端口>:1521 \
-e ORACLE_PWD=<数据库密码> \
-e ORACLE_CHARACTERSET=<字符集> \
-v [主机挂载点:]/opt/oracle/oradata \
container-registry.oracle.com/database/free:latest
其中参数:
- 如果不提供容器名, 则会生成随机名
- 本地端口如果不冲突建议使用默认的 1521
- 数据库密码为 SYS, SYSTEM, PDBADMIN 的默认密码, 如果不设置会生成随机密码.
- 字符集默认为 AL32UTF8. 注意该命令只在第一次初始化数据库文件时生效.
/opt/oracle/oradata
为数据库文件存储的路径. 如果省略数据库将无法持久化数据./opt/oracle/scripts/startup
可选卷. 可包含自定义脚本, 在数据库启动时运行./opt/oracle/scripts/setup
可选卷. 可包含脚本, 在数据库 setup 后运行.
然后文档介绍了, 使用 podman
生成密码, 以及重新连接数据库, 以及本地连接, 远程连接的介绍. 这里略去.
因为还不会 podman, 也许后续会加, 也许不会 (docker 已经很好用了)
复用已存在数据库
数据库的文件格式是标准的, 只要将文件放在一个目录中作为卷的挂载, 在运行数据库容器即可.
podman run -d \
--name <oracle-db> \
-v <主机路径要求有可写权限>:/opt/oracle/oradata \
container-registry.oracle.com/database/free:latest
setup 和 startup 卷
然后文档介绍了 setup 卷和 startup 卷的作用. 脚本中可以支持的文件有 .sh
和 .sql
.
为了确保执行的顺序, 可以在文件开头用数字编号.
注意: startup 在数据库 setup 后第一次启动时执行.
其他
文档最后给出了镜像的拉取地址.