Oracle Docker 容器化详解
Oracle Docker 容器化详解
适用版本:Oracle Database 19c / 23ai Free 文档版本:v1.0 / 2026-07
1. 概述
Docker 容器化简化部署[1]:
优势:
- 快速
- 一致
- 隔离
- CI/CD
详细见:Oracle Docker 安装指南。
2. Docker 安装
2.1 安装
dnf install -y dnf-utils
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install -y docker-ce docker-ce-cli containerd.io
systemctl enable docker
systemctl start docker
2.2 验证
docker version
docker info
3. Oracle 23ai Free
3.1 拉取
docker pull container-registry.oracle.com/database/free:23.5-lite
3.2 启动
docker run -d \
--name oracle-23ai \
-p ****** \
-p ****** \
-e ORACLE_PWD=****** \
-v /data/oracle/oradata:/opt/oracle/oradata \
-v /data/oracle/scripts:/opt/oracle/scripts/startup \
--restart=always \
container-registry.oracle.com/database/free:23.5-lite
3.3 验证
docker logs -f oracle-23ai
docker exec -it oracle-23ai sqlplus / as sysdba
SQL> SELECT banner_full FROM v$version;
4. Oracle 19c
4.1 镜像构建
git clone https://github.com/oracle/docker-images.git
cd docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0
cp LINUX.X64_193000_db_home.zip .
cd ..
./buildContainerImage.sh -v 19.3.0 -t oracle-db:19c -e
4.2 启动
docker run -d \
--name oracle-19c \
-p ****** \
-p ****** \
-e ORACLE_PWD=****** \
-e ORACLE_SID=orcl \
-e ORACLE_PDB=orclpdb \
-v /data/oracle/oradata:/opt/oracle/oradata \
--restart=always \
oracle-db:19c
5. 数据卷
5.1 持久化
# oradata 持久化
-v /data/oracle/oradata:/opt/oracle/oradata
# 启动脚本
-v /data/oracle/scripts/startup:/opt/oracle/scripts/startup
# 初始化脚本
-v /data/oracle/scripts/setup:/opt/oracle/scripts/setup
5.2 自定义脚本
# /data/oracle/scripts/startup/01_create_user.sql
CREATE USER myapp IDENTIFIED BY ******
GRANT CONNECT, RESOURCE TO myapp;
ALTER USER myapp DEFAULT TABLESPACE users;
6. 网络
6.1 自定义
docker network create oracle-net
docker run -d \
--name oracle \
--network oracle-net \
-p ****** \
...
6.2 连接
# 主机
sqlplus sys/Oracle123@localhost:1521/orcl as sysdba
# 容器间
sqlplus sys/Oracle123@oracle:1521/orcl as sysdba
7. Docker Compose
7.1 docker-compose.yml
version: '3.8'
services:
oracle:
image: container-registry.oracle.com/database/free:23.5-lite
container_name: oracle-23ai
ports:
- "1521:1521"
- "5500:5500"
environment:
- ORACLE_PWD=******
- ORACLE_SID=orcl
- ORACLE_PDB=orclpdb
volumes:
- oracle-data:/opt/oracle/oradata
- ./scripts:/opt/oracle/scripts/startup
restart: always
shm_size: '1gb'
volumes:
oracle-data:
7.2 启动
docker-compose up -d
docker-compose logs -f
docker-compose down
8. 管理
8.1 启停
docker stop oracle-23ai
docker start oracle-23ai
docker restart oracle-23ai
8.2 进入
docker exec -it oracle-23ai bash
# sqlplus
docker exec -it oracle-23ai sqlplus / as sysdba
8.3 日志
docker logs oracle-23ai
docker logs -f --tail 100 oracle-23ai
8.4 监控
docker stats oracle-23ai
9. 备份
9.1 卷备份
docker stop oracle-23ai
tar -czf /backup/oracle-$(date +%Y%m%d).tar.gz /data/oracle/oradata
docker start oracle-23ai
9.2 RMAN
docker exec -it oracle-23ai rman target /
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
详细见:Oracle RMAN 备份恢复。
9.3 Data Pump
docker exec -it oracle-23ai expdp system/Oracle123 ...
详细见:Oracle Data Pump 全集。
10. 升级
10.1 数据迁移
# 旧容器
docker stop oracle-old
docker run --rm -v /data/oracle/oradata:/data oracle-old tar czf - /data > /backup/data.tar.gz
# 新容器
docker run -d --name oracle-new -v /data/oracle/oradata:/opt/oracle/oradata oracle-new:23ai
10.2 镜像升级
docker pull container-registry.oracle.com/database/free:23.6-lite
docker-compose down
docker-compose up -d
11. 性能
11.1 SHM
# Oracle 使用 /dev/shm
docker run --shm-size=1g ...
11.2 CPU
docker run --cpus="2" ...
11.3 内存
docker run --memory="4g" ...
12. 安全
12.1 非 root
docker run --user oracle ...
12.2 只读
docker run --read-only ... -v /data/oracle/oradata:/opt/oracle/oradata
12.3 网络
docker run --network=internal ...
13. Kubernetes
13.1 部署
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: oracle
spec:
serviceName: oracle
replicas: 1
selector:
matchLabels:
app: oracle
template:
metadata:
labels:
app: oracle
spec:
containers:
- name: oracle
image: container-registry.oracle.com/database/free:23.5-lite
ports:
- containerPort: 1521
env:
- name: ORACLE_PWD
value: Oracle123
volumeMounts:
- name: data
mountPath: /opt/oracle/oradata
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 50Gi
14. 常见坑与排错
14.1 /dev/shm
- ORA-00845
- --shm-size
14.2 内存
- ORA-04031
- --memory
- 增大
14.3 端口冲突
docker ps
netstat -tlnp | grep 1521
14.4 数据丢失
- 持久化卷
- 验证挂载
15. 最佳实践
- 官方镜像:稳定
- 持久化卷:数据
- 资源限制:稳定
- SHM 大小:Oracle
- 网络隔离:安全
- Compose:编排
- K8s:生产
- 备份:保护
- 监控:及时
- 文档化:配置
16. 参考资料
[1] Oracle Database on Docker https://container-registry.oracle.com/