环境与软件
- suse12的镜像
- oracle12c_linux软件
- windows下的docker VirtualBox
注意
因为oracle12需要2G的内存空间,所以给VirtualBox至少分配2G的内存
安装步骤
1. 下载基础镜像
- 进入docker
- 查询suse12镜像
docker search suse
- 获取suse12镜像
docker pull alarmz/suse12
2. 运行suse12
docker run --name rebatch -it -d -p 220:22 alarmz/suse12
进入suse12
docker attach rebatch
3. 安装repo源并更新suse
zypper addrepo -f http://mirrors.aliyun.com/opensuse/update/leap/42.1/oss openSUSE-42.1-Update-Oss
zypper addrepo -f http://mirrors.aliyun.com/opensuse/update/leap/42.1/non-oss/ openSUSE-42.1-Update-Non-Oss
zypper addrepo -f http://mirrors.aliyun.com/opensuse/distribution/leap/42.1/repo/oss/ openSUSE-42.1-Oss
zypper addrepo -f http://mirrors.aliyun.com/opensuse/distribution/leap/42.1/repo/non-oss/ openSUSE-42.1-Non-Oss
zypper addrepo -f http://mirrors.aliyun.com/packman/openSUSE_Leap_42.1/ aliyun-packman
手动更新
zypper refresh
更新所有软件
zypper update
4. 启动SSH
- 设置root用户名密码
passwd root
/usr/sbin/sshd -f /etc/ssh/sshd_config
报错,要求需要设置秘钥
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
再次启动ssh
/usr/sbin/sshd -f /etc/ssh/sshd_config
5. 安装xhost和xdpyinfo
xhost:
zypper addrepo https://download.opensuse.org/repositories/X11:XOrg/openSUSE_Leap_42.3/X11:XOrg.repo
zypper refresh
zypper install xhost
xdpyinfo:
zypper addrepo https://download.opensuse.org/repositories/openSUSE:Leap:42.1/standard/openSUSE:Leap:42.1.repo
zypper refresh
zypper install xdpyinfo
6. 配置oracle环境变量
- 创建oracle用户和用户组:
groupadd oinstall
groupadd dba
useradd -d /home/oracle -m -g oinstall -G dba oracle
passwd oracle
oracle/oracle
chown -R oracle:oinstall /home/oracle
- 创建安装目录:
mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01/app/oracle
chmod -R 755 /u01/app/oracle
- Create Inventory:
mkdir -p /u01/app/oraInventory
chown -R oracle:oinstall /u01/app/oraInventory
chmod -R 755 /u01/app/oraInventory
- edit sysctl文件
vi /etc/sysctl.conf
insert文本:
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0
kernel.shmmax = 68719476736
kernel.shmall = 6029312
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.ip_local_port_range = 9000 65500
fs.file-max = 6815744
fs.aio-max-nr = 1048576
# net.ipv6.conf.all.disable_ipv6 = 1
- edit /etc/security/limits.conf文件
vi /etc/security/limits.conf
insert文本
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 10240
- edit .bash_profile
vi .bash_profile
insert文本
export TMOUT=0
export LANG=en_US
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1; export ORACLE_HOME //有的目录是ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1 注意修改
ORACLE_SID=receipt; export ORACLE_SID
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
export PS1='$PWD>'
- su oracle 进入/home/oracle
- 上传oracle压缩包
- 解压oracle压缩包
- 设置display环境变量
设置display环境变量export DISPLAY=192.168.0.103:0.0
- su root 进入root用户
xhost +
- su oralce 进入/home/oracle
cd database
./runInstaller
- 安装完成后,启动oracle服务和监听
进入sqlplus:
- 安装完成后,启动oracle服务和监听
sqlplus / as sysdba
启动服务:
startup
使用quit
退出sqlplus,启动监听
lsnrctl start
注意
如果将这个oracle容器做成镜像后,使用镜像重新生成一个容器,正常启动oracle服务和监听会失败。
原因
docker使用的是虚拟的网络,分配的也是虚拟的ip,所以oracle服务的host使用docker容器分配的host。
在listener.ora
文件中HOST = ceab82c65b7e
,这个HOST值就是docker容器的容器ID。
解决方法
每次使用新容器时,都需要将listener.ora
文件中HOST = ceab82c65b7e
,修改为新容器的容器ID.
同理,在使用新容器时,oracle的动态监听会失败,所以改为静态监听即可。
直接在listener.ora
文件中添加:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = receipt)
(SID_NAME = receipt)
)
)
修改完成后,正常启动服务和监听。
- 使用数据卷完成数据持久化
我们使用oracle12c创建容器有两种方式:
方式一:创建端口并运行,这样每次退出数据不会保留
$ docker run -d -p 8080:8080 -p 1521:1521 sath89/oracle-12c
方式二:用数据卷实现容器和数据的有效分离,实现数据持久化
$ docker run -d -p 8080:8080 -p 1521:1521 -v /local_dir:/data sath89/oracle-12c
-v 指定数据卷位置
数据卷的特点
1、可以供多个容器访问,直接共享或者重用
2、独立于容器周期,不会在删除容器时删除其挂载的数据卷
3、数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含的数据这些数据会复制到新的容器中
4、可以直接对数据卷里的内容进行修改
我将27G的数据文件放入数据卷中,每次需要使用这些数据文件时,直接使用数据卷即可,oracle打成镜像时不会将数据卷放入其中。
我的oracle12c镜像
https://hub.docker.com/r/xuweizhen/suse12/
可以直接拉取
docker pull xuweizhen/oracle12c:base
网友评论