前言

在一个裸机 Linux 上安装 Oracle 步骤很多,且对安装环境有不少要求,一不小心就容易出错。安装过 Oracle 的想必都有一定感触。

在有些场合中我们对 Oralce 没有那么高的要求,比如临时测试、临时运行个项目等单数据库实例场景。这种情况使用 docker 一键启动运行 docker 会特别方便,运行时将数据挂载出来也能在很大程度上保证数据安全问题。

Oracle 官方已经正式发布了应该构建 Oracle 镜像的 dockerfile,目前支持列表如下(​​引用自官方​​):

Oracle Database 21c (21.3.0) Enterprise Edition, Standard Edition 2 and Express Edition (XE)
Oracle Database 19c (19.3.0) Enterprise Edition and Standard Edition 2
Oracle Database 18c (18.4.0) Express Edition (XE)
Oracle Database 18c (18.3.0) Enterprise Edition and Standard Edition 2
Oracle Database 12c Release 2 (12.2.0.2) Enterprise Edition and Standard Edition 2
Oracle Database 12c Release 1 (12.1.0.2) Enterprise Edition and Standard Edition 2
Oracle Database 11g Release 2 (11.2.0.2) Express Edition (XE)


Oracle on docker 是非常优秀的体验和测试 Oracle 数据库的方法。


教程

本文以构建 19.3.0 版本的镜像为例,做一下步骤教程:

1、下载官方的 Oracle 构建包

https://www.oracle.com/database/technologies/oracle-database-software-downloads.html

Oracle Docker 镜像(制作)_sql

2、下载官方的 dockerfile 构建包

https://github.com/oracle/docker-images

Oracle Docker 镜像(制作)_数据库_02

3、构建 docker 镜像

1、下面是我下载好的两个压缩包

Oracle Docker 镜像(制作)_数据库_03

2、解压缩 ​​docker-images-main.zip​

3、进入 ​​./docker-images-main/OracleDatabase/SingleInstance/dockerfiles​

4、根据需要进入对应的版本目录(本例 ​​19.3.0​​)

Oracle Docker 镜像(制作)_sql_04

5、将下载的 Oracle zip 附件拷贝到该目录中

Oracle Docker 镜像(制作)_sql_05

6、构建DOCKER镜像

$ cd ~/docker-images/OracleDatabase/SingleInstance/dockerfiles 
$ ./buildContainerImage.sh -v 19.3.0 -e

慢慢等待执行……

完成以后使用 ​​docker images​​​ 可以看到已经有成功构建的 ​​Oracle 19c​​​ 镜像了,同时构建了 ​​Oracle Linux 7​​ 的基础镜像,如下:

[root@localhost dockerfiles]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
oracle/database 19.3.0-ee b4d8488865d1 About a minute ago 6.54GB
oraclelinux 7-slim 4133e87bc7fa 5 weeks ago 132MB

4、运行 Oracle 容器

1、新创建一个 oracle 用户,这初始属于 oinstall 组,且同时让他也属于 dba 组

[root@harbor ~]# groupadd oinstall
[root@harbor ~]# groupadd dba
[root@harbor ~]# useradd oracle -g oinstall -G dba

2、切换到 oracle 用户,然后创建数据目录

su - oracle
mkdir -p ~/oradata/oracle19c

3、启动 oracle 容器

docker run -itd --name oracle19c \
-p 1521:1521 \
-p 5500:5500 \
-v /home/oracle/oradata/oracle19c:/opt/oracle/oradata \
oracle/database:19.3.0-ee

在第一次运行容器的时候,会自动创建新的数据库,其中使用 ​​-v​​​ 参数,是将上面新创建数据目录映射到容器内的 ​​/opt/oracle/oradata​​ 目录中,这样就完成了将数据文件存储在本机文件系统中而非docker容器内,避免删除容器导致数据丢失的问题。


docker run 的更多参数,可以详见官方文档 docker-images/OracleDatabase/SingleInstance/README.md


4、密码

容器启动后,通过 ​​docker logs -f oracle19c​​,查看日志,能看到自动生成的SYS等用户的密码,如下示例:

ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: aGHc3GKeSBj=1

如果需要修改数据库用户密码,可以在容器运行之后,通过以下命令修改。

docker exec <container name> ./setPassword.sh <your password>

比如下面的例子,将数据库sys用户密码设置为简单的 oracle123456888

$ docker exec oracle19c ./setPassword.sh oracle123456888
The Oracle base remains unchanged with value /opt/oracle

SQL*Plus: Release 19.0.0.0.0 - Production on Tue May 21 15:30:50 2019
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL>
User altered.

SQL>
User altered.

SQL>
Session altered.

SQL>
User altered.

SQL> Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

一直到出现以下字样,表示数据库已经正常创建并且可以使用了。

######################### DATABASE IS READY TO USE! #########################

5、关于 SID

默认创建的数据库SID是ORCLCDB,创建的PDB是ORCLPDB1,也可以在第一次docker run的时候,用 -e 参数来指定SID和PDB的名字。比如:

docker run -itd --name new-oracle19c \ 
-p 1521:1521 -p 5500:5500 \
-e ORACLE_SID=ORCL \
-e ORACLE_PDB=MYPDB1 \
-v /home/oracle/oradata/oracle19c:/opt/oracle/oradata \
oracle/database:19.3.0-ee

6、登录验证

直接登录容器使用sqlplus做简单的验证。注意使用之前docker run时候回显的用户密码。

[root@docker dockerfiles]# docker exec -it oracle-19c /bin/bash

[oracle@6a5cd3f9fb6c dbs]$ export ORACLE_SID=ORCLCDB

[oracle@6a5cd3f9fb6c dbs]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 8 02:00:16 2020

Version 19.3.0.0.0

Copyright © 1982, 2019, Oracle. All rights reserved.

Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.3.0.0.0

SQL> show pdbs;

CON_ID CON_NAME              OPEN MODE  RESTRICTED

2 PDB$SEED              READ ONLY  NO
3 LEIPDB READ WRITE NO

SQL>

也可以在浏览器中登录Oracle 19c内置的EM Express来通过图形界面 https://localhost:5500/em 访问和监控。


注意是 https,Username:sys,Password:***,Container Name:不用填


最后你可以选择将这个镜像 push 到你的私服中给其他地方使用。


(END)