如果使用 -v 映射到本地文件夹,为了确保 Docker 容器内运行的 Oracle 数据库进程可以有权限读写数据到映射的目录,需要提前设置权限。

mkdir -p /data/oracle/oradata
chmod -R 777 /data/oracle/oradata

方式一:使用预构建镜像快速启动

如果只是想快速部署,可以直接拉取已构建好的镜像,无需等待漫长的编译过程。

第一步:创建数据目录

mkdir -p /data/oracle/oradata
chmod -R 777 /data/oracle/oradata

第二步:运行容器

docker run -d \
  --name oracle19c \
  -p 1521:1521 \
  -p 5500:5500 \
  -e TZ=Asia/Shanghai \
  -e ORACLE_SID=orcl \
  -e ORACLE_PDB=orclpdb \
  -e ORACLE_PWD=Ora20240419 \
  -v /data/oracle/oradata:/opt/oracle/oradata \
  registry.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee

第三步:监控启动日志

docker logs oracle19c --follow

等待输出中出现 DATABASE IS READY TO USE! 即表示启动成功。

第四步:连接数据库

参数
用户名system
密码Ora20240419(创建容器时设置)
主机端口1521
SIDorcl
PDBorclpdb

方式二:从零构建Docker镜像

适合需要自定义配置或在特殊架构(如 ARM)上运行的场景。

系统要求

第一步:下载官方 docker-images 仓库

git clone https://github.com/oracle/docker-images.git /opt/oracle/docker-images-main

第二步:放置 Oracle 19C 安装包

从 Oracle 官网下载 LINUX.X64_193000_db_home.zip(x86-64)或 ARM 对应版本,放入:

/opt/oracle/docker-images-main/OracleDatabase/SingleInstance/dockerfiles/19.3.0/

第三步:构建镜像

cd /opt/oracle/docker-images-main/OracleDatabase/SingleInstance/dockerfiles/
./buildContainerImage.sh -v 19.3.0 -e

构建过程约 10 分钟,完成后镜像标签为 oracle/database:19.3.0-ee

第四步:运行容器

与方式一的 docker run 命令相同,将镜像名称替换为本地构建的镜像即可。

推送镜像到阿里云容器镜像服务

# 登录阿里云镜像仓库
docker login registry.cn-guangzhou.aliyuncs.com

# 标记镜像
docker tag oracle/database:19.3.0-ee \
  registry.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee

# 推送
docker push registry.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee

创建多架构镜像(x86-64 + ARM)

# 分别在 x86 和 ARM 机器上构建并推送后,创建 manifest
docker manifest create \
  registry.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee \
  --amend registry.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee-amd64 \
  --amend registry.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee-arm64

docker manifest push registry.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee

💡 多架构 manifest 推送后,docker pull 会自动根据当前机器架构拉取对应镜像。