参考链接:https://github.com/jaspeen/oracle-11g
docker run --privileged --name oracle11g -p 1521:1521 -v :/install jaspeen/oracle-11g
docker commit oracle11g oracle11g-installed
docker run --privileged --name oracle11g -p 1521:1521 -v :/install -v :/opt/oracle/dpdump jaspeen/oracle-11g
执行命令 docker exec -it oracle11g impdp ..
追加:
以上命令没有将数据目录映射出来,如果容器被误删或者启动不了了,所有的数据都会丢失,然后就开始了趟路径映射的坑。。。
先将/opt/oracle整个映射出来,启动报错发现建不上目录,权限不足,想看看/tmp日志是哪个目录建不上,一映射/tmp目录也没权限写
然后尝试了--privilege,将属组改成oracle用户,还不行,
再然后用docker run -it jaspeen/oracle-11g /bin/bash 进去看了看目录,原来里面的是oracle:oinstall的属性,id oralce一看440:200
然后建立目录/home/oracle_home/oracle_data,属组改成440:200,再-v /home/oracle_home/oracle_data/:/opt/oracle/,终于不报权限问题了,等到初始化到后面,需要用root执行一个脚本时报错,/opt/oracle/下一个隐藏文件找不到。。。
好吧,再次docker run -it jaspeen/oracle-11g /bin/bash 看看/opt/oracle下都有啥,原来就三个目录,都建好了再映射,其他的隐藏文件不会被覆盖,终于启动成功了。启动好了建了个表,删了容器再docker run ,访问一下表还在,ok了
主要就是三步:
mkdir -p -m 755 /home/oracle_home/oracle_data/{app,dpdump,oraInventory}
chown -R 440:200 /home/oracle_home/oracle_data
docker run -d --privileged=true \
--name oracle_11g -p 8521:1521 \
-v /home/oracle_home/oracle_data/app:/opt/oracle/app \
-v /home/oracle_home/oracle_data/dpdump:/opt/oracle/dpdump \
-v /home/oracle_home/oracle_data/oraInventory:/opt/oracle/oraInventory \
jaspeen/oracle-11g
补充:swapon -s或者free -g查看是否没有swap区,没有的话挂一下,不然检测不过
dd if=/dev/zero of=/home/oracle_home/oracle_swap bs=1G count=1
mkswap /home/oracle_home/oracle_swap
swapon /home/oracle_home/oracle_swap
以下是一些操作记录
一、建立oracle数据目录
mkdir -p -m 755 /home/oracle_home/oracle_data/{app,dpdump,oraInventory}
chown -R 440:200 /home/oracle_home/oracle_data
二、建立oracle_11g目录,将两个安装包解压到 oracle_11g下,下载地址:http://www.oracle.com/technetwork/database/in-memory/downloads/index.html 需要用账号登录
mkdir /home/oracle_home/oracle_11g
unzip linux.x64_11gR2_database_1of2.zip\?AuthParam\=1579333478_652b711602cce0cf0b7e60207a384d83 -d oracle_11g
unzip linux.x64_11gR2_database_2of2.zip\?AuthParam\=1579335028_6c4ff05f1feaadaab4e63ef2faaf0564 -d oracle_11g/
三、建立swap区
dd if=/dev/zero of=/home/oracle_home/oracle_swap bs=1G count=1
mkswap /home/oracle_home/oracle_swap
swapon /home/oracle_home/oracle_swap
增加/etc/fstab一行在末尾
/home/oracle_home/oracle_swap swap swap defaults 0 0
执行mount -a检验无报错(无返回就正常)
四、启动
docker run -d --privileged=true \
--name oracle_11g -p 8521:1521 \
-v /home/oracle_home/oracle_data/app:/opt/oracle/app \
-v /home/oracle_home/oracle_data/dpdump:/opt/oracle/dpdump \
-v /home/oracle_home/oracle_data/oraInventory:/opt/oracle/oraInventory \
jaspeen/oracle-11g
五、创建表空间、用户
进入容器
docker exec -it oracle_11g su - oracle
连接sqlplus
sqlplus / as sysdba
建立表空间
create tablespace test_table datafile '/opt/oracle/app/oradata/test_table.dbf' size 8g;
#如果超过32G,使用bigfile类型表空间(表空间太大,耗时长)
#create bigfile tablespace test_table datafile '/opt/oracle/app/oradata/test_table.dbf' size 100g;
建立用户test指定默认表空间
create user test identified by test default tablespace test_table;
用户授权
grant create session, connect, resource to test;