Oracle Docker 容器化部署
Oracle Docker 容器化部署
适用版本:Oracle Database 19c / 23ai Free 文档版本:v1.0 / 2026-07
1. 概述
Oracle 官方提供 Docker 镜像[1]:
镜像:
- Oracle 19c EE
- Oracle 23ai Free
- Oracle XE
2. 环境准备
2.1 Docker 安装
# CentOS / OL
dnf install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
# 验证
docker version
2.2 镜像获取
# 官方
docker pull container-registry.oracle.com/database/enterprise:19.19.0.0
# 23ai Free
docker pull container-registry.oracle.com/database/free:23.4
# Docker Hub
docker pull oracle/database:19.3.0-ee
3. 19c EE 部署
3.1 准备
mkdir -p ******
mkdir -p ******
chmod -R 775 /u01
3.2 启动
docker run -d \
--name orcl \
-p ****** \
-p ****** \
-e ORACLE_SID=orcl \
-e ORACLE_PWD=****** \
-e ORACLE_PDB=orclpdb \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-v /u01/oradata:/opt/oracle/oradata \
-v /u01/scripts:/opt/oracle/scripts/startup \
container-registry.oracle.com/database/enterprise:19.19.0.0
3.3 验证
# 状态
docker logs orcl
# 连接
sqlplus sys/Oracle123@localhost:1521/orcl as sysdba
4. 23ai Free 部署
4.1 启动
docker run -d \
--name oracle23ai \
-p ****** \
-p ****** \
-e ORACLE_PWD=****** \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-v /u01/oradata:/opt/oracle/oradata \
container-registry.oracle.com/database/free:23.4
4.2 连接
sqlplus sys/Oracle123@localhost:1521/FREE as sysdba
5. 自定义镜像
5.1 Dockerfile
FROM container-registry.oracle.com/database/enterprise:19.19.0.0
# 自定义脚本
COPY init.sql /opt/oracle/scripts/startup/
# 环境变量
ENV ORACLE_SID=orcl
ENV ORACLE_PWD=******
# 暴露端口
EXPOSE 1521 5500
5.2 构建
docker build -t my-oracle:19c .
5.3 运行
docker run -d --name orcl -p ****** my-oracle:19c
6. 初始化脚本
6.1 startup 脚本
# /u01/scripts/01_init.sql
CREATE TABLESPACE my_data DATAFILE SIZE 1G;
CREATE USER my_user IDENTIFIED BY ****** DEFAULT TABLESPACE my_data;
GRANT CONNECT, RESOURCE TO my_user;
# 启动时自动执行
6.2 setup 脚本
# /u01/scripts/setup/01_users.sh
#!/bin/bash
sqlplus / as sysdba <<EOF
CREATE USER ...
EOF
7. 数据持久化
7.1 数据卷
# 数据卷
docker volume create oracle_data
docker run -d \
--name orcl \
-v oracle_data:/opt/oracle/oradata \
...
7.2 挂载目录
-v /u01/oradata:/opt/oracle/oradata
7.3 备份
# 1. 停止
docker stop orcl
# 2. 备份目录
tar -czf orcl_backup.tar.gz /u01/oradata
# 3. 启动
docker start orcl
8. 网络配置
8.1 端口映射
-p ****** # 数据库
-p ****** # EM Express
-p ****** # SSH
8.2 自定义网络
docker network create oracle_net
docker run -d --name orcl --network oracle_net ...
8.3 容器互联
# 应用容器连接
docker run -d --name app --network oracle_net \
-e DB_HOST=orcl \
-e DB_PORT=1521 \
my_app
9. 管理
9.1 启停
docker stop orcl
docker start orcl
docker restart orcl
9.2 进入
docker exec -it orcl bash
docker exec -it orcl sqlplus / as sysdba
9.3 日志
docker logs orcl
docker logs -f orcl
docker logs --tail 100 orcl
10. 资源限制
10.1 内存
docker run -d --name orcl \
--memory=8g \
--memory-swap=8g \
...
10.2 CPU
--cpus=4
--cpu-shares=512
10.3 存储
--storage-opt size=100G
11. Docker Compose
11.1 docker-compose.yml
version: '3.8'
services:
oracle:
image: container-registry.oracle.com/database/enterprise:19.19.0.0
container_name: orcl
ports:
- "1521:1521"
- "5500:5500"
environment:
- ORACLE_SID=orcl
- ORACLE_PWD=******
- ORACLE_PDB=orclpdb
- ORACLE_CHARACTERSET=AL32UTF8
volumes:
- oracle_data:/opt/oracle/oradata
- ./scripts:/opt/oracle/scripts/startup
mem_limit: 8g
cpus: 4
volumes:
oracle_data:
11.2 启动
docker-compose up -d
docker-compose logs -f
docker-compose down
12. 常见坑与排错
12.1 启动慢
# 1. 内存
docker stats orcl
# 2. 等待初始化
docker logs -f orcl
# DATABASE IS READY TO USE!
12.2 密码丢失
# 1. 进入容器
docker exec -it orcl bash
# 2. 重置
sqlplus / as sysdba
SQL> ALTER USER sys IDENTIFIED BY ******
12.3 数据丢失
# 1. 检查挂载
docker inspect orcl | grep -A 20 Mounts
# 2. 持久化
-v /u01/oradata:/opt/oracle/oradata
13. 最佳实践
- 数据卷:持久化
- 环境变量密码:自动
- 初始化脚本:自动化
- 资源限制:稳定
- Compose 编排:管理
- 23ai Free:开发
- 19c EE:生产
- 网络:容器互联
- 日志监控:问题
- 备份:保护
14. 参考资料
[1] Oracle Database on Docker https://container-registry.oracle.com/