oracle 在docker下安装并实现数据持久化

本文主要就是为了验证下oracle是否能够在docker容器中安装并持久化数据存储。中间遇到不少问题,本文仅做一个总结,希望对其他人也有一定帮助或者参考借鉴。

选择一个合适镜像

oracle官网没有提供docker镜像,需要自己封装,在https://hub.docker.com/上能查到已经封装好的镜像,本文中选择的是jaspeen/oracle-11g。该镜像并没有将oracle安装包封装到镜像中,只是封装了安装命令。所以使用该镜像的话,需要自己下载需要的oracle版本。本文中使用的oracle-11g

  • jaspeen/oracle-11g 结构说明

注意jaspeen/oracle-11g 中的安装脚本的执行目录。从github上查看源码分析到改镜像的安装脚本install.sh

#!/usr/bin/env bash
set -e
source /assets/colorecho

trap "echo_red '******* ERROR: Something went wrong.'; exit 1" SIGTERM
trap "echo_red '******* Caught SIGINT signal. Stopping...'; exit 2" SIGINT

if [ ! -d "/install/database" ]; then
	echo_red "Installation files not found. Unzip installation files into mounted(/install) folder"
	exit 1
fi

echo_yellow "Installing Oracle Database 11g"

su oracle -c "/install/database/runInstaller -silent -ignorePrereq -waitforcompletion -responseFile /assets/db_install.rsp"
/opt/oracle/oraInventory/orainstRoot.sh
/opt/oracle/app/product/11.2.0/dbhome_1/root.sh

通过上述shell脚本可以看到,镜像的安装命令是从/install/database目录去执行安装脚本的。

然后我们在hub.docker上也能看到该镜像的使用说明。需要自己下载oracle linux版本的安装包,然后解压到某个目录,并且将改目录挂载到容器的/install目录下。
image.png

持久化挂载

数据库安装肯定都需要对数据文件存储目录做持久化挂载。这里在做持久化的时候比较麻烦。首先我们不能配置持久化挂载oradata目录。如下图只配置了安装目录的挂载映射。

image.png

执行以下命令完成pod的创建

kubectl create -f oracle.yaml

这里提供一个 配置好的yaml文件
此时我们需要将oradata 目录从容器中复制到宿主机,复制的命令如下:

docker cp 03ea024262d7:/opt/oracle/app/oradata /home/oracle/app/

复制完成后,我们就可以通过持久化存储挂载实现oracle容器的数据持久化了。同样这里只需要将挂载配置注释放开就行。
image.png

爬坑指南

整个过程中遇到两个问题,一个是宿主机的swap问题。一个是挂载目录的权限问题

swap

在安装oracle容器时,容器没有启动成功,查看日志发现错误信息,信息

[oracle@localhost database]$ ./runInstaller -silent -responseFile /home/oracle/db_install.rsp
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 120 MB. Actual 150565 MB Passed
Checking swap space: 0 MB available, 150 MB required. Failed <<<<

Some requirement checks failed. You must fulfill these requirements before

continuing with the installation,

大概意思是swap space没有配置。解决方案是配置swap并开启即可.

dd if=/dev/zero of=/swapfile bs=1024 count=512k
mkswap /swapfile
swapon /swapfile
swapon -s

持久化挂载目录的权限问题。

因为在oracle docker 镜像的安装脚本中,其实是新建了一个oracle用户来执行安装oracle。所以此时宿主的挂载目,oracle用户其实是没有权限的。所以我们需要授权。

  • 先查看下oracle用户的ID和group id

image.png

查到信息后再宿主机中执行以下命令

chown -R 440.200 /home/oracle/app/

440标识group id,200 表示用户id,/home/oracle/app/是需要授权的目录。

评论

公众号:mumuser

企鹅群:932154986

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×