前言

在一个裸机 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
在这里插入图片描述

2、下载官方的 dockerfile 构建包

https://github.com/oracle/docker-images
在这里插入图片描述

3、构建 docker 镜像

1、下面是我下载好的两个压缩包
在这里插入图片描述
2、解压缩 docker-images-main.zip

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

4、根据需要进入对应的版本目录(本例 19.3.0
在这里插入图片描述
5、将下载的 Oracle zip 附件拷贝到该目录中
在这里插入图片描述
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)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐