1

【oracle】从安装oracle linux 8开始构建一个oracle21c的docker镜像 -利来国际app

darkathena 2021-11-09
362

前言

最近有不少oracle21c的特性想测试,但是它有些特性是基于oracle linux操作系统的,网上没搜到现成docker或者虚拟机镜像,而且oracle cloud免费的21c体验不对中国区信用卡用户开放(上次办的万事达只能用19c),于是我打算自己弄一个。

首先我尝试了tim hall提供的虚拟机构建方案,,
但是我本机由于开启了虚拟化hyper-v,和oracle vm virtualbox可能有冲突,在构建成功后怎么都开不了机,硬件加速设置里的各种组合都试过了,为此我还把本机的hyper-v功能给取消掉了,结果仍旧无法启动虚拟机。虽然oracle官方是说他的虚拟机兼容hyper-v,,
但我实测应该还是有点问题,单独测试新建了个xp的虚拟机同样也是无法启动

virtualbox error: call to nemr0initvmpart2 failed: 
verr_nem_init_failed (verr_nem_vm_create_failed).

所以我就打算基于vmware全新安装一台oracle linux 8 虚拟机,再使用tim hall提供的docker构建方案构建一个镜像,这样就能做到干净,不影响我本机的环境了。(不用hyper-v的原因是它的磁盘文件建了多大磁盘,虚拟机文件就多大,太浪费空间了,vmware的虚拟机文件大小是根据实际情况自动增加的,最大不超过设定的大小,还支持压缩释放空间)

vmware的安装就不说了,基本就是一路下一步,顶多有个虚拟化,其他没啥讲的,略过。

需要提前准备的东西

1.oraclelinux-r8-u4-x86_64-dvd.iso (https://yum.oracle.com/oracle-linux-isos.html)
2.apex_21.2_en.zip(https://www.oracle.com/tools/downloads/apex-downloads.html)
3.linux.x64_213000_db_home.zip(https://www.oracle.com/database/technologies/oracle-database-software-downloads.html)
4.这个目录及下面所有的文件 https://github.com/oraclebase/dockerfiles/tree/master/database/ol8_21

新建虚拟机

虚拟机硬件部分

点创建新的虚拟机

典型,下一步

选择安装光盘镜像,下一步

设置名称和虚拟机保存位置,下一步

设置磁盘大小40gb,下一步

点击自定义硬件

设置cpu2个,内存4096mb,网络桥接,复制物理网络,点关闭

点完成

虚拟机安装部分

虚拟机启动后,点向上方向键,切换到 install oracle linux 8.4.0,回车

等一会儿,自动进入到语言选择界面,按你自己的习惯选择即可,一般建议用默认的英语

进入到这个界面,先点安装目的地

进来后直接点完成(这里应该是40gib,此处只为截图演示)

然后点根密码,设置好后点完成

点开始安装

接下来就是漫长的等待了,完成后点重启系统

点许可证信息

打勾,点完成

点结束配置

点前进-前进-跳过,随便新建一个用户,注意不能是oracle,然后点前进

设置密码-前进,点开始使用

点右上角,进入有线,打开有线设置

点击齿轮

勾上自动连接,点确认

显示成这个样子即为连接成功,如果不是这样,请参考下面桥接模式的网络设置

桥接模式的网络设置

桥接模式需要另外设置虚拟网络,进入编辑-虚拟网络编辑器

点下面的更改设置

将桥接模式对应的网卡手动设置成你的主网卡

准备docker构建目录

将apex_21.2_en.zip、linux.x64_213000_db_home.zip 两个文件放到ol8_21/softwave目录里,
目录结构应该如下

ol8_21
├── dockerfile
├── readme.md
├── scripts
│   ├── healthcheck.sh
│   └── start.sh
└── software
    ├── apex_21.2_en.zip
    ├── linux.x64_213000_db_home.zip
    └── put_software_here.txt

挂载ol8_21这个目录到虚拟机,可以尝试使用vm自带的功能

但有时候会出现挂载后,在虚拟机内不显示的情况,所以还可以尝试windows开共享,然后虚拟机里挂载smb。
如果都嫌麻烦,可以直接sftp把这个文件夹给复制进虚拟机

安装docker环境及启动docker服务

打开shell工具,用root用户进入虚拟机,执行

dnf install -y dnf-utils zip unzip dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo dnf remove -y runc dnf install -y docker-ce --nobest

然后执行下面两条,启动docker服务

systemctl enable docker.service systemctl start docker.service

构建镜像

cd进入刚刚挂载的目录,执行(注意后面有个 .)

docker build -t ol8_21:latest .

如果中间网络断了或其他原因导致失败,需要清除过程文件,否则再次构建可能空间不足

docker system prune

最后显示

successfully tagged ol8_21:latest

即为成功

最后docker镜像大小为15gb,此时虚拟机40gb空间已经用到35gb了。

运行镜像

docker run -dit --name ol8_21_con \ -p 1521:1521 \ --shm-size="1g" \ ol8_21:latest

或者新建个文件夹将数据文件挂载到本地

mkdir -p ~/volumes/ol8_21_con_u02/ docker run -dit --name ol8_21_con \ -p 1521:1521 \ --shm-size="1g" \ -v /u01/volumes/ol8_21_con_u02/:/u02 \ ol8_21:latest

等几分钟后,就可登录数据库了,具体进度可监控日志

docker logs --follow ol8_21_con

这个时候虚拟机40g空间已经用得差不多了,容器运行需要5g空间。

密码及参数

数据库sys的默认密码配置在dockfiles文件中,当然你也可以在构建前修改相关参数,比如要不要安装apex

define config (runtime) environment variables.
env oracle_sid=cdb1
sys_password=“syspassword1”
pdb_name=“pdb1”
pdb_password=“pdbpassword1”
install_apex=“true”

后记

使用过程中遇到个奇怪的现象,我暂停虚拟机运行,再恢复,竟然无法在容器外再连上数据库了,虚拟机内容器还是在运行的,而且数据库也是正常启动的,容器内可以登录数据库。然后尝试stop容器再start,同样在容器外部无法连接。最终是重启了服务器再开启容器才连上。

我猜测这里存在某种机制会让docker的映射端口失效,但是检查docker port,端口映射还在那里;查看netstat -ntlp,端口也是处于监听状态。也就是说服务器和容器都没问题,是它们之间的沟通出了问题了(像极了前后端开发吵架~)。沿着这个思路,我尝试在此场景下,终止docker服务再启动docker服务和容器,果然通了。至于为什么暂停虚拟机再恢复虚拟机会导致这个问题,目前阶段我给不出明确原因,猜测可能是虚拟机暂停和恢复时并没有完整还原所有的数据,比如一些硬件地址,导致端口映射错位,毕竟端口号也只是个"名称"而已。

之后我又把这个镜像 push到了阿里云上,然后再在本机windows环境上pull下来,同样也可以使用,只是第一次启动的时候需要几分钟来初始化数据库。(15gb,上传下载就需要不少时间了)

另外,这个docker里没配置oml4py的相关环境

改天看看怎么修改docker的构建脚本让它预先安装,目前还不确定这次用的oraclelinux:8-slim系统版本是否支持oml。精简版镜像构建的就这么大了(操作系统只有一百兆,其实最主要的原因是这个dockerfile没有使用多阶段构建的方式),如果直接用ol8的完整版构建,最后的docker镜像可是个庞然大物了

  • 本文作者: darkathena
  • 本文链接:
  • 利来手机国际的版权声明: 本博客所有文章除特别声明外,均采用 许可协议。转载请注明出处!
最后修改时间:2021-12-06 20:33:47
「喜欢文章,快来给作者赞赏墨值吧」
【利来手机国际的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:[email protected]进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论