环境与软件suse12的镜像
oracle12c_linux软件
windows下的docker VirtualBox
注意
因为oracle12需要2G的内存空间,所以给VirtualBox至少分配2G的内存
安装步骤
1. 下载基础镜像进入docker
查询suse12镜像docker search suse
获取suse12镜像docker pull alarmz/suse12
2. 运行suse12docker run --name rebatch -it -d -p 220:22 alarmz/suse12
进入suse12docker attach rebatch
3. 安装repo源并更新susezypper 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_profilevi .bash_profile
insert文本export TMOUT=0 export 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/oraclecd database ./runInstaller
安装完成后,启动oracle服务和监听
进入sqlplus: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打成镜像时不会将数据卷放入其中。docker pull xuweizhen/oracle12c:base
作者:xuweizhen
链接:https://www.jianshu.com/p/aaffd2737f54