Files
my-vault/04_Archive/Inbox-Clippings/2024/11/DockerLearning-Notes_14-dockerApplication-Deplo.md
T

583 lines
28 KiB
Markdown
Raw Normal View History

2026-01-05 13:03:55 +08:00
---
page-title: "Docker学习笔记_14 docker应用 - 部署ORACLE 11g单实例数据库.md | 一个DBA的工作学习笔记"
url: http://dbase.cc/2018/09/19/docker/14_docker%E5%BA%94%E7%94%A8-%E9%83%A8%E7%BD%B2ORACLE-11g%E5%8D%95%E5%AE%9E%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/
date: "2024-11-20 16:16:55"
---
> docker pull oraclelinux:6.10
---
## Docker学习笔记\_14 docker应用 - 部署ORACLE 11g单实例数据库.md
## [](http://dbase.cc/2018/09/19/docker/14_docker%E5%BA%94%E7%94%A8-%E9%83%A8%E7%BD%B2ORACLE-11g%E5%8D%95%E5%AE%9E%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/#%E4%B8%8B%E8%BD%BD%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E9%95%9C%E5%83%8F "下载操作系统基镜像")下载操作系统基镜像
docker pull oraclelinux:6.10
docker tag oraclelinux:6.10 10.240.4.159/os/oraclelinux:6.10
docker push 10.240.4.159/os/oraclelinux:6.10
docker pull oraclelinux:7.5
docker tag oraclelinux:7.5 10.240.4.159/os/oraclelinux:7.5
docker push 10.240.4.159/os/oraclelinux:7.5
## [](http://dbase.cc/2018/09/19/docker/14_docker%E5%BA%94%E7%94%A8-%E9%83%A8%E7%BD%B2ORACLE-11g%E5%8D%95%E5%AE%9E%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/#BUILD%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BD%AF%E4%BB%B6%E9%95%9C%E5%83%8F "BUILD数据库软件镜像")BUILD数据库软件镜像
mkdir -p /docker\_build/oracle\_database/oel\-6.10/01\_database
cd /docker\_build/oracle\_database/oel\-6.10/01\_database
rz
rlwrap\-0.42.tar.gz
p13390677\_112040\_Linux-x86\-64\_1of7.zip
p13390677\_112040\_Linux-x86\-64\_2of7.zip
vi db\_install.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt\_dbinstall\_response\_schema\_v11\_2\_0
oracle.install.option=INSTALL\_DB\_SWONLY
ORACLE\_HOSTNAME=oradb
UNIX\_GROUP\_NAME=oinstall
INVENTORY\_LOCATION=/u01/app/oraInventory
SELECTED\_LANGUAGES=en,zh\_CN
ORACLE\_HOME=/u01/app/oracle/product/11.2.0/db\_1
ORACLE\_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.EEOptionsSelection=false
oracle.install.db.optionalComponents=oracle.rdbms.partitioning:11.2.0.4.0,oracle.oraolap:11.2.0.4.0,oracle.rdbms.dm:11.2.0.4.0,oracle.rdbms.dv:11.2.0.4.0,oracle.rdbms.lbac:11.2.0.4.0,oracle.rdbms.rat:11.2.0.4.0
oracle.install.db.DBA\_GROUP=dba
oracle.install.db.OPER\_GROUP=dba
oracle.install.db.CLUSTER\_NODES=
oracle.install.db.isRACOneInstall=
oracle.install.db.racOneServiceName=
oracle.install.db.config.starterdb.type=
oracle.install.db.config.starterdb.globalDBName=
oracle.install.db.config.starterdb.SID=
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=true
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.enableSecuritySettings=true
oracle.install.db.config.starterdb.password.ALL=oracle
oracle.install.db.config.starterdb.password.SYS=
oracle.install.db.config.starterdb.password.SYSTEM=
oracle.install.db.config.starterdb.password.SYSMAN=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.control=DB\_CONTROL
oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.automatedBackup.osuid=
oracle.install.db.config.starterdb.automatedBackup.ospwd=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
MYORACLESUPPORT\_USERNAME=
MYORACLESUPPORT\_PASSWORD=
SECURITY\_UPDATES\_VIA\_MYORACLESUPPORT=
DECLINE\_SECURITY\_UPDATES=true
PROXY\_HOST=
PROXY\_PORT=
PROXY\_USER=
PROXY\_PWD=
PROXY\_REALM=
COLLECTOR\_SUPPORTHUB\_URL=
oracle.installer.autoupdates.option=
oracle.installer.autoupdates.downloadUpdatesLoc=
AUTOUPDATES\_MYORACLESUPPORT\_USERNAME=
AUTOUPDATES\_MYORACLESUPPORT\_PASSWORD=
vi Dockerfile
FROM 10.240.4.159/os/oralcelinux:6.10
ADD rlwrap\-0.42.tar.gz /tmp/
ADD p13390677\_112040\_Linux-x86\-64\_1of7.zip /tmp/
ADD p13390677\_112040\_Linux-x86\-64\_2of7.zip /tmp/
ADD db\_install.rsp /tmp/
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle && \\
yum -y install oracle-rdbms-server\-11gR2-preinstall unzip readline-devel.x86\_64 lrzsz && \\
cd /tmp/rlwrap\-0.42 && ./configure && make && make install && \\
echo "Create /u01/app dir..." && \\
mkdir -p -m 755 /u01/app/dumpdir && \\
mkdir -p -m 755 /u01/app/oradata && \\
mkdir -p -m 755 /u01/app/oraInventory && \\
mkdir -p -m 755 /u01/app/oracle && \\
mkdir -p -m 755 /u01/app/oracle/product/11.2.0/db\_1 && \\
chown -R oracle:oinstall /u01 && \\
unzip -oq /tmp/p13390677\_112040\_Linux-x86\-64\_1of7.zip -d /tmp/ && \\
unzip -oq /tmp/p13390677\_112040\_Linux-x86\-64\_2of7.zip -d /tmp/ && \\
chown -R oracle:oinstall /tmp/database && \\
printf "%s\\n" 'export ORACLE\_SID=orcl' \\
'export ORACLE\_BASE=/u01/app/oracle' \\
'export ORACLE\_HOME=$ORACLE\_BASE/product/11.2.0/db\_1' \\
'export LD\_LIBRARY\_PATH=$ORACLE\_HOME/lib:$ORACLE\_HOME/lib32' \\
'export PATH=$PATH:$ORACLE\_HOME/bin:$ORACLE\_HOME/OPatch' \\
'export NLS\_LANG=AMERICAN\_AMERICA.ZHS16GBK' \\
'export NLS\_DATE\_FORMAT="yyyy-mm-dd hh24:mi:ss"' \\
'alias sqlplus="rlwrap sqlplus"' \\
'alias rman="rlwrap rman"' \\
>>/home/oracle/.bash\_profile && \\
cat /etc/security/limits.conf | grep -v oracle | tee /etc/security/limits.conf && \\
su oracle -c "/tmp/database/runInstaller -ignorePrereq -ignoreSysPrereqs -waitforcompletion -silent -responseFile /tmp/db\_install.rsp 2>&1" && \\
/u01/app/oraInventory/orainstRoot.sh && \\
/u01/app/oracle/product/11.2.0/db\_1/root.sh && \\
yum clean all && \\
rm -rf /tmp/\* && rm -rf /var/log/\* && rm -rf /var/cache/\*
vi build.sh
imagetag="10.240.4.159/app/oracledatabase:11.2.0.4-software"
dockerfile="Dockerfile"
docker build --rm \\
--force-rm \\
--no-cache \\
--memory=4g \\
--shm-size=4g \\
-t ${imagetag} \\
-f ${dockerfile} .
chmod +x build.sh
./build.sh
## [](http://dbase.cc/2018/09/19/docker/14_docker%E5%BA%94%E7%94%A8-%E9%83%A8%E7%BD%B2ORACLE-11g%E5%8D%95%E5%AE%9E%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/#PSU "PSU")PSU
mkdir -p /docker\_build/oracle\_database/oel\-6.10/02\_psu
cd /docker\_build/oracle\_database/oel\-6.10/02\_psu
rz
ocm.rsp
p6880880\_112000\_Linux-x86\-64.zip
p27967757\_112040\_Linux-x86\-64\_2of7.zip
p27923163\_112040\_Linux-x86\-64\_2of7.zip
vi Dockerfile
FROM 10.240.4.159/app/oracledatabase:11.2.0.4\-software
ADD ocm.rsp /tmp/ocm.rsp
ADD p6880880\_112000\_Linux-x86\-64.zip /tmp/
ADD p27967757\_112040\_Linux-x86\-64.zip /tmp/
ADD p27923163\_112040\_Linux-x86\-64.zip /tmp/
RUN printf "%s\\n" '\[GENERAL\]' \\
'RESPONSEFILE\_VERSION="11.2"' \\
'CREATE\_TYPE="CUSTOM"' \\
'\[oracle.net.ca\]' \\
'INSTALLED\_COMPONENTS={"server","net8","javavm"}' \\
'INSTALL\_TYPE=""typical""' \\
'LISTENER\_NUMBER=1' \\
'LISTENER\_NAMES={"LISTENER"}' \\
'LISTENER\_PROTOCOLS={"TCP;1521"}' \\
'LISTENER\_START=""LISTENER""' \\
'NAMING\_METHODS={"TNSNAMES","ONAMES","HOSTNAME"}' \\
'NSN\_NUMBER=1' \\
'NSN\_NAMES={"EXTPROC\_CONNECTION\_DATA"}' \\
'NSN\_SERVICE={"PLSExtProc"}' \\
'NSN\_PROTOCOLS={"TCP;HOSTNAME;1521"}' \\
>>/tmp/netca.rsp && \\
unzip -oq /tmp/p6880880\_112000\_Linux-x86\-64.zip -d /tmp/ && \\
rm -rf /u01/app/oracle/product/11.2.0/db\_1/OPatch && \\
chown -R oracle:oinstall /tmp/OPatch && \\
mv /tmp/OPatch /u01/app/oracle/product/11.2.0/db\_1/ && \\
unzip -qo /tmp/p27967757\_112040\_Linux-x86\-64.zip -d /tmp && \\
unzip -qo /tmp/p27923163\_112040\_Linux-x86\-64.zip -d /tmp && \\
su - oracle -c "opatch apply -silent -ocmrf /tmp/ocm.rsp -local /tmp/27967757/27734982" && \\
su - oracle -c "opatch apply -silent -ocmrf /tmp/ocm.rsp -local /tmp/27923163" && \\
su oracle -c "/u01/app/oracle/product/11.2.0/db\_1/bin/netca -silent -responseFile /tmp/netca.rsp" && \\
yum clean all && \\
rm -rf /tmp/\* && rm -rf /var/log/\* && rm -rf /var/cache/\*
vi build.sh
imagetag="10.240.4.159/app/oracledatabase:11.2.0.4-psu"
dockerfile="Dockerfile"
docker build --rm \\
--force-rm \\
--no-cache \\
--memory=4g \\
--shm-size=4g \\
-t ${imagetag} \\
-f ${dockerfile} .
chmod +x build.sh
./build.sh
## [](http://dbase.cc/2018/09/19/docker/14_docker%E5%BA%94%E7%94%A8-%E9%83%A8%E7%BD%B2ORACLE-11g%E5%8D%95%E5%AE%9E%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/#%E5%AE%89%E8%A3%85%E6%95%B0%E6%8D%AE%E5%BA%93 "安装数据库")安装数据库
mkdir -p /docker\_build/oracle\_database/oel\-6.10/03\_db
cd /docker\_build/oracle\_database/oel\-6.10/03\_db
vi Dockerfile
FROM 10.240.4.159/app/oracledatabase:11.2.0.4\-psu
RUN printf "%s\\n" '\[GENERAL\]' \\
'RESPONSEFILE\_VERSION = "11.2.0"' \\
'OPERATION\_TYPE = "createDatabase"' \\
'\[CREATEDATABASE\]' \\
'GDBNAME = "orcl"' \\
'DATABASECONFTYPE = "SI"' \\
'SID = "orcl"' \\
'TEMPLATENAME = "General\_Purpose.dbc"' \\
'SYSPASSWORD = "Center08"' \\
'SYSTEMPASSWORD = "Center08"' \\
'DATAFILEDESTINATION=/u01/app/oradata' \\
'RECOVERYAREADESTINATION=/u01/app/oradata' \\
'STORAGETYPE=FS' \\
'CHARACTERSET="ZHS16GBK"' \\
'INITPARAMS="java\_jit\_enabled=false,memory\_target=0,sga\_target=2048,pga\_aggregate\_target=300,processes=300,open\_cursors=300"' \\
'AUTOMATICMEMORYMANAGEMENT="False"' \\
> /tmp/dbca.rsp && chown oracle:oinstall /tmp/dbca.rsp && chmod +x /tmp/dbca.rsp && \\
su oracle -c "/u01/app/oracle/product/11.2.0/db\_1/bin/dbca -silent -responseFile /tmp/dbca.rsp" && \\
yum clean all && \\
rm -rf /tmp/\* && rm -rf /var/log/\* && rm -rf /var/cache/\*
vi build.sh
imagetag="10.240.4.159/app/oracledatabase:11.2.0.4-db"
dockerfile="Dockerfile"
docker build --rm \\
--force-rm \\
--no-cache \\
--memory=4g \\
--shm-size=4g \\
-t ${imagetag} \\
-f ${dockerfile} .
chmod +x build.sh
./build.sh
docker push 10.240.4.159/app/oracledatabase:11.2.0.4
## [](http://dbase.cc/2018/09/19/docker/14_docker%E5%BA%94%E7%94%A8-%E9%83%A8%E7%BD%B2ORACLE-11g%E5%8D%95%E5%AE%9E%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/#%E5%90%AF%E6%9C%BA%E5%90%8E%E6%95%B0%E6%8D%AE%E5%BA%93%E8%87%AA%E8%A1%8C%E5%90%AF%E5%8A%A8 "启机后数据库自行启动")启机后数据库自行启动
mkdir -p /docker\_build/oracle\_database/oel\-6.10/04\_run
cd /docker\_build/oracle\_database/oel\-6.10/04\_run
cp /usr/share/zoneinfo/Asia/Shanghai .
vi entrypoint.sh
set -e
/etc/init.d/sshd start
chown -R oracle:oinstall /u01
su - oracle -c "/usr/sbin/entrypoint\_oracle.sh"
chmod +x entrypoint.sh
vi entrypoint\_oracle.sh
set -e
source ~/.bashrc
alert\_log="$ORACLE\_BASE/diag/rdbms/orcl/$ORACLE\_SID/trace/alert\_$ORACLE\_SID.log"
listener\_log="$ORACLE\_BASE/diag/tnslsnr/$HOSTNAME/listener/trace/listener.log"
pfile=$ORACLE\_HOME/dbs/init$ORACLE\_SID.ora
monitor() {
tail -F -n 0 $1 | while read line; do echo -e "$2: $line"; done
}
trap\_db() {
trap "echo 'Caught SIGTERM signal, shutting down...'; stop\_db" SIGTERM;
trap "echo 'Caught SIGINT signal, shutting down...'; stop\_db" SIGINT;
}
check\_shm() {
echo ""
echo "Checking shared memory..."
df -h | grep "Mounted on" && df -h | egrep --color "^.\*/dev/shm" || echo "Shared memory is not mounted."
}
reconfig\_lsnr() {
echo ""
echo "Reconfig listener for hostname : \[$HOSTNAME\]..."
sed -i "s/(HOST.\*)(/(HOST = $HOSTNAME)(/g" /u01/app/oracle/product/11.2.0/db\_1/network/admin/tnsnames.ora
sed -i "s/(HOST.\*)(/(HOST = $HOSTNAME)(/g" /u01/app/oracle/product/11.2.0/db\_1/network/admin/listener.ora
echo "Show tnsnames.ora..."
cat /u01/app/oracle/product/11.2.0/db\_1/network/admin/tnsnames.ora
echo "Show listener.ora..."
cat /u01/app/oracle/product/11.2.0/db\_1/network/admin/listener.ora
}
start\_lsnr() {
echo ""
echo "Starting listener..."
monitor $listener\_log listener &
lsnrctl start | while read line; do echo -e "lsnrctl: $line"; done
MON\_LSNR\_PID=$!
}
start\_db() {
echo ""
echo "Starting database..."
trap\_db
monitor $alert\_log alertlog &
MON\_ALERT\_PID=$!
sqlplus / as sysdba <<-EOF |
pro Starting with pfile='$pfile' ...
startup;
alter system register;
exit 0
EOF
while read line; do echo -e "sqlplus: $line"; done
change\_dpdump\_dir
change\_profile\_default\_limit
wait $MON\_ALERT\_PID
}
stop\_db() {
trap '' SIGINT SIGTERM
shut\_immediate
echo "Shutting down listener..."
lsnrctl stop | while read line; do echo -e "lsnrctl: $line"; done
kill $MON\_ALERT\_PID $MON\_LSNR\_PID
exit 0
}
shut\_immediate() {
ps -ef | grep ora\_pmon | grep -v grep > /dev/null && \\
echo "Shutting down the database..." && \\
sqlplus / as sysdba <<-EOF |
set echo on
shutdown immediate;
exit 0
EOF
while read line; do echo -e "sqlplus: $line"; done
}
change\_dpdump\_dir () {
echo ""
echo "Changing dpdump dir to /u01/app/dumpdir"
sqlplus / as sysdba <<-EOF |
create or replace directory data\_pump\_dir as '/u01/app/dumpdir';
commit;
exit 0
EOF
while read line; do echo -e "sqlplus: $line"; done
}
change\_profile\_default\_limit() {
echo ""
echo "Changing profile default limit : password\_life\_time/failed\_login\_attempts"
sqlplus / as sysdba <<-EOF |
alter profile default limit password\_life\_time unlimited;
alter profile default limit failed\_login\_attempts unlimited;
commit;
exit 0
EOF
while read line; do echo -e "sqlplus: $line"; done
}
check\_shm
reconfig\_lsnr
start\_lsnr
start\_db
chmod +x entrypoint\_oracle.sh
vi Dockerfile
FROM 10.240.4.159/app/oracledatabase:11.2.0.4\-db
ADD Shanghai /etc/localtime
ADD entrypoint.sh /usr/sbin/entrypoint.sh
ADD entrypoint\_oracle.sh /usr/sbin/entrypoint\_oracle.sh
RUN sed -i "s/#PermitRootLogin.\*/PermitRootLogin yes/g" /etc/ssh/sshd\_config && \\
echo "export LANG=en\_US.utf8" >> /etc/profile && \\
echo 'root:ydgw.cn' | chpasswd
ENTRYPOINT \["/usr/sbin/entrypoint.sh"\]
CMD \[""\]
vi build.sh
imagetag="10.240.4.159/app/oracledatabase:11.2.0.4-rundb"
dockerfile="Dockerfile"
docker build --rm \\
--force-rm \\
--no-cache \\
--memory=4g \\
--shm-size=4g \\
-t ${imagetag} \\
-f ${dockerfile} .
chmod +x build.sh
./build.sh
## [](http://dbase.cc/2018/09/19/docker/14_docker%E5%BA%94%E7%94%A8-%E9%83%A8%E7%BD%B2ORACLE-11g%E5%8D%95%E5%AE%9E%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/#%E9%83%A8%E7%BD%B2ORACLE%E6%9C%8D%E5%8A%A1 "部署ORACLE服务")部署ORACLE服务
1. 登陆Rancher(1.6.21),编排工具用的是默认的Cattle
2. 应用 - 用户 - 添加应用 - 名称:\[ORACLE\] - 创建(已有服务此步忽略)
3. 添加服务 - 在添加服务页面添写配置如下信息 - 创建
名称: erptest2\-11g
描述: 日结后
选择镜像: 10.240.4.159/app/oracledatabase:11.2.0.4\-database
端口映射: 1521:1522/tcp 15620:22/tcp
网络 - 主机名: erptest2
安全/主机: 主机完全访问权限 内存限制 4096
调度 - 在指定主机上运行全部容器: docker156
4.启动应用(容器) - 检查检查并登录erptest2-11g服务,无问题后`shutdown immediate`数据库
5.登陆宿主机,执行以下命令
docker ps -a | grep oracle
ab409de14588 10.240.4.159/app/oracledatabase:11.2.0.4\-database "/.r/r /entrypoint.s…" 7 minutes ago Up 7 minutes r-Oracle-erptest1\-11g\-1\-c16a25ba
295f99a4f7d4 10.240.4.159/app/oracledatabase:11.2.0.4\-database "/.r/r /entrypoint.s…" 3 hours ago Up 3 hours r-Oracle-erptest2\-1\-efd39217
cd /docker\_mnt/oracledb/erptest2\-20180817
docker cp 295f99a4f7d4:/u01/app/oradata .
docker cp 295f99a4f7d4:/u01/app/dumpdir .
docker cp 295f99a4f7d4:/u01/app/oracle/fast\_recovery\_area .
docker cp 295f99a4f7d4:/u01/app/oracle/diag .
docker cp 295f99a4f7d4:/u01/app/oracle/product/11.2.0/db\_1/dbs .
6.升级erptest2-11g
卷 - 添加卷: /etc/localtime:/etc/localtime:ro
/docker\_mnt/oracledb/erptest2\-20180817/oradata:/u01/app/oradata
/docker\_mnt/oracledb/erptest2\-20180817/dpdump:/u01/app/dumpdir
/docker\_mnt/oracledb/erptest2\-20180817/fast\_recovery\_area:/u01/app/oracle/fast\_recovery\_area
/docker\_mnt/oracledb/erptest2\-20180817/diag:/u01/app/oracle/diag
/docker\_mnt/oracledb/erptest2\-20180817/dbs:/u01/app/oracle/product/11.2.0/db\_1/dbs
docker 限制内存, 报 not support swap limit capabilities
参考:[https://segmentfault.com/q/1010000002888521](https://segmentfault.com/q/1010000002888521)
Adjust memory and swap accounting
When users run Docker, they may see these messages when working with an image:
WARNING: Your kernel does not support cgroup swap limit. WARNING: Your
kernel does not support swap limit capabilities. Limitation discarded.
To prevent these messages, enable memory and swap accounting on your system. To enable these on system using GNU GRUB (GNU GRand Unified Bootloader), do the following.
Log into Ubuntu as a user with sudo privileges.
Edit the /etc/default/grub file.
Set the GRUB\_CMDLINE\_LINUX value as follows:
GRUB\_CMDLINE\_LINUX="cgroup\_enable=memory swapaccount=1"
Save and close the file.
Update GRUB.
$ sudo update-grub
Reboot your system.
## [](http://dbase.cc/2018/09/19/docker/14_docker%E5%BA%94%E7%94%A8-%E9%83%A8%E7%BD%B2ORACLE-11g%E5%8D%95%E5%AE%9E%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/#%E5%8F%82%E8%80%83 "参考")参考
- [基于Oracle Linux 7.5实现了Oracle Database 11gR2 企业版容器化运行](https://gitee.com/rancococ-code/docker-oracle11g)
- [利用Docker建立Oracle 11g实验环境](https://zhangjoto.github.io/li-yong-dockerjian-li-oracle-11gshi-yan-huan-jing.html)
- docker 限制内存, 报`not support swap limit capabilities`,解决方法:
Edit the /etc/default/grub file.
Set the GRUB\_CMDLINE\_LINUX value as follows:
GRUB\_CMDLINE\_LINUX="cgroup\_enable=memory swapaccount=1"
Save and close the file.
Update GRUB.
$ sudo update-grub
Reboot your system.
## [](http://dbase.cc/2018/09/19/docker/14_docker%E5%BA%94%E7%94%A8-%E9%83%A8%E7%BD%B2ORACLE-11g%E5%8D%95%E5%AE%9E%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/#expect%E7%9A%84%E7%94%A8%E6%B3%95%E7%A4%BA%E4%BE%8B "expect的用法示例")expect的用法示例
RUN yum -y install expect && \\
unzip -qo /tmp/p6880880\_112000\_Linux-x86\-64.zip -d /tmp && \\
unzip -qo /tmp/p27967757\_112040\_Linux-x86\-64.zip -d /tmp && \\
unzip -qo /tmp/p27923163\_112040\_Linux-x86\-64.zip -d /tmp && \\
rm -rf /u01/app/oracle/product/11.2.0/db\_1/OPatch && \\
chown -R oracle:oinstall /tmp/OPatch && \\
mv /tmp/OPatch /u01/app/oracle/product/11.2.0/db\_1/ && \\
printf "%s\\n" '#!/usr/bin/expect' \\
'spawn opatch apply -local /tmp/27967757/27734982/' \\
'expect "\*proceed\*" {send "y\\r"}' \\
'expect "\*Email\*" {send "\\r"}' \\
'expect "\*security\*" {send "y\\r"}' \\
'expect "\*patching" {send "y\\r"}' \\
'interact' \\
>> /tmp/27967757/27734982/psu\_apply.sh && \\
printf "%s\\n" '#!/usr/bin/expect' \\
'spawn opatch apply -local /tmp/27923163/' \\
'expect "\*proceed\*" {send "y\\r"}' \\
'expect "\*Email\*" {send "\\r"}' \\
'expect "\*security\*" {send "y\\r"}' \\
'expect "\*patching" {send "y\\r"}' \\
'interact' \\
>> /tmp/27923163/jvm\_apply.sh && \\
chmod +x /tmp/27967757/27734982/psu\_apply.sh && \\
chmod +x /tmp/27923163/jvm\_apply.sh && \\
su - oracle -c "/tmp/27967757/27734982/psu\_apply.sh" && \\
su - oracle -c "/tmp/27923163/jvm\_apply.sh"
## [](http://dbase.cc/2018/09/19/docker/14_docker%E5%BA%94%E7%94%A8-%E9%83%A8%E7%BD%B2ORACLE-11g%E5%8D%95%E5%AE%9E%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/#%E6%95%B4%E5%90%88%E6%88%90%E4%B8%80%E4%B8%AAdockerfile "整合成一个dockerfile")整合成一个dockerfile
### [](http://dbase.cc/2018/09/19/docker/14_docker%E5%BA%94%E7%94%A8-%E9%83%A8%E7%BD%B2ORACLE-11g%E5%8D%95%E5%AE%9E%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/#%E5%88%B6%E4%BD%9C%E9%95%9C%E5%83%8F "制作镜像")制作镜像
FROM 10.240.4.159/os/oraclelinux:6.10
ADD Shanghai /etc/localtime
ADD rlwrap\-0.42.tar.gz /tmp/
ADD p13390677\_112040\_Linux-x86\-64\_1of7.zip /tmp/
ADD p13390677\_112040\_Linux-x86\-64\_2of7.zip /tmp/
ADD p6880880\_112000\_Linux-x86\-64.zip /tmp/
ADD p27967757\_112040\_Linux-x86\-64.zip /tmp/
ADD p27923163\_112040\_Linux-x86\-64.zip /tmp/
ADD db\_install.rsp /tmp/
ADD ocm.rsp /tmp/ocm.rsp
ADD p6880880\_112000\_Linux-x86\-64.zip /tmp/
ADD p27967757\_112040\_Linux-x86\-64.zip /tmp/
ADD p27923163\_112040\_Linux-x86\-64.zip /tmp/
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle && \\
yum -y install oracle-rdbms-server\-11gR2-preinstall unzip readline-devel.x86\_64 lrzsz && \\
cd /tmp/rlwrap\-0.42 && ./configure && make && make install && \\
echo "Create /u01/app dir..." && \\
mkdir -p -m 755 /u01/app/dumpdir && \\
mkdir -p -m 755 /u01/app/oradata && \\
mkdir -p -m 755 /u01/app/oraInventory && \\
mkdir -p -m 755 /u01/app/oracle && \\
mkdir -p -m 755 /u01/app/oracle/product/11.2.0/db\_1 && \\
chown -R oracle:oinstall /u01 && \\
unzip -oq /tmp/p13390677\_112040\_Linux-x86\-64\_1of7.zip -d /tmp/ && \\
unzip -oq /tmp/p13390677\_112040\_Linux-x86\-64\_2of7.zip -d /tmp/ && \\
chown -R oracle:oinstall /tmp/database && \\
printf "%s\\n" 'export ORACLE\_SID=orcl' \\
'export ORACLE\_BASE=/u01/app/oracle' \\
'export ORACLE\_HOME=$ORACLE\_BASE/product/11.2.0/db\_1' \\
'export LD\_LIBRARY\_PATH=$ORACLE\_HOME/lib:$ORACLE\_HOME/lib32' \\
'export PATH=$PATH:$ORACLE\_HOME/bin:$ORACLE\_HOME/OPatch' \\
'export NLS\_LANG=AMERICAN\_AMERICA.ZHS16GBK' \\
'export NLS\_DATE\_FORMAT="yyyy-mm-dd hh24:mi:ss"' \\
'alias sqlplus="rlwrap sqlplus"' \\
'alias rman="rlwrap rman"' \\
>>/home/oracle/.bash\_profile && \\
cat /etc/security/limits.conf | grep -v oracle | tee /etc/security/limits.conf && \\
su oracle -c "/tmp/database/runInstaller -ignorePrereq -ignoreSysPrereqs -waitforcompletion -silent -responseFile /tmp/db\_install.rsp 2>&1" && \\
/u01/app/oraInventory/orainstRoot.sh && \\
/u01/app/oracle/product/11.2.0/db\_1/root.sh && \\
unzip -oq /tmp/p6880880\_112000\_Linux-x86\-64.zip -d /tmp/ && \\
rm -rf /u01/app/oracle/product/11.2.0/db\_1/OPatch && \\
chown -R oracle:oinstall /tmp/OPatch && \\
mv /tmp/OPatch /u01/app/oracle/product/11.2.0/db\_1/ && \\
unzip -qo /tmp/p27967757\_112040\_Linux-x86\-64.zip -d /tmp && \\
unzip -qo /tmp/p27923163\_112040\_Linux-x86\-64.zip -d /tmp && \\
su - oracle -c "opatch apply -silent -ocmrf /tmp/ocm.rsp -local /tmp/27967757/27734982" && \\
su - oracle -c "opatch apply -silent -ocmrf /tmp/ocm.rsp -local /tmp/27923163" && \\
printf "%s\\n" '\[GENERAL\]' \\
'RESPONSEFILE\_VERSION="11.2"' \\
'CREATE\_TYPE="CUSTOM"' \\
'\[oracle.net.ca\]' \\
'INSTALLED\_COMPONENTS={"server","net8","javavm"}' \\
'INSTALL\_TYPE=""typical""' \\
'LISTENER\_NUMBER=1' \\
'LISTENER\_NAMES={"LISTENER"}' \\
'LISTENER\_PROTOCOLS={"TCP;1521"}' \\
'LISTENER\_START=""LISTENER""' \\
'NAMING\_METHODS={"TNSNAMES","ONAMES","HOSTNAME"}' \\
'NSN\_NUMBER=1' \\
'NSN\_NAMES={"EXTPROC\_CONNECTION\_DATA"}' \\
'NSN\_SERVICE={"PLSExtProc"}' \\
'NSN\_PROTOCOLS={"TCP;HOSTNAME;1521"}' \\
>>/tmp/netca.rsp && \\
su oracle -c "/u01/app/oracle/product/11.2.0/db\_1/bin/netca -silent -responseFile /tmp/netca.rsp" && \\
printf "%s\\n" '\[GENERAL\]' \\
'RESPONSEFILE\_VERSION = "11.2.0"' \\
'OPERATION\_TYPE = "createDatabase"' \\
'\[CREATEDATABASE\]' \\
'GDBNAME = "orcl"' \\
'DATABASECONFTYPE = "SI"' \\
'SID = "orcl"' \\
'TEMPLATENAME = "General\_Purpose.dbc"' \\
'SYSPASSWORD = "Center08"' \\
'SYSTEMPASSWORD = "Center08"' \\
'DATAFILEDESTINATION=/u01/app/oradata' \\
'RECOVERYAREADESTINATION=/u01/app/oradata' \\
'STORAGETYPE=FS' \\
'CHARACTERSET="ZHS16GBK"' \\
'INITPARAMS="java\_jit\_enabled=false,memory\_target=0,sga\_target=2048,pga\_aggregate\_target=300,processes=300,open\_cursors=300"' \\
'AUTOMATICMEMORYMANAGEMENT="False"' \\
> /tmp/dbca.rsp && chown oracle:oinstall /tmp/dbca.rsp && chmod +x /tmp/dbca.rsp && \\
su oracle -c "/u01/app/oracle/product/11.2.0/db\_1/bin/dbca -silent -responseFile /tmp/dbca.rsp" && \\
sed -i "s/#PermitRootLogin.\*/PermitRootLogin yes/g" /etc/ssh/sshd\_config && \\
echo "export LANG=en\_US.utf8" >> /etc/profile && \\
yum clean all && \\
rm -rf /tmp/\* && rm -rf /var/log/\* && rm -rf /var/cache/\*
### [](http://dbase.cc/2018/09/19/docker/14_docker%E5%BA%94%E7%94%A8-%E9%83%A8%E7%BD%B2ORACLE-11g%E5%8D%95%E5%AE%9E%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/#%E6%B7%BB%E5%8A%A0%E5%88%B0rancher%E4%B8%AD "添加到rancher中")添加到rancher中
1. 登陆Rancher(1.6.21),编排工具用的是默认的Cattle
2. 应用 - 用户 - 添加应用 - 名称:\[ORACLE\] - 创建(已有服务此步忽略)
3. 添加服务 - 在添加服务页面添写配置如下信息 - 创建
名称: dev-erp
选择镜像: 10.240.4.159/app/oracledatabase:11.2.0.4\-run
端口映射: 1521:1521/tcp 16221:22/tcp
网络 - 主机名: dev-erp
安全/主机: 主机完全访问权限 内存限制 4096
调度 - 在指定主机上运行全部容器: docker162
4.启动应用(容器) - 检查检查并登录dev-erp服务,无问题后`shutdown immediate`数据库
5.登陆宿主机,执行以下命令
docker ps -a | grep erp
cdf49b075fb6 10.240.4.159/app/oracledatabase:11.2.0.4\-run "/.r/r /usr/sbin/ent…" 38 minutes ago Up 38 minutes r-Oracle-erp-dev\-1\-77fbbce2
mkdir -p /docker\_mnt/oracledb/dev-erp\-20180925
cd /docker\_mnt/oracledb/dev-erp\-20180925
docker cp cdf49b075fb6:/u01/app/oradata .
docker cp cdf49b075fb6:/u01/app/dumpdir .
docker cp cdf49b075fb6:/u01/app/oracle/fast\_recovery\_area .
docker cp cdf49b075fb6:/u01/app/oracle/diag .
docker cp cdf49b075fb6:/u01/app/oracle/product/11.2.0/db\_1/dbs .
6.升级
卷 - 添加卷:
/docker\_mnt/oracledb/dev-pos\-20180925/oradata:/u01/app/oradata
/docker\_mnt/oracledb/dev-pos\-20180925/dpdump:/u01/app/dumpdir
/docker\_mnt/oracledb/dev-pos\-20180925/fast\_recovery\_area:/u01/app/oracle/fast\_recovery\_area
/docker\_mnt/oracledb/dev-pos\-20180925/diag:/u01/app/oracle/diag
/docker\_mnt/oracledb/dev-pos\-20180925/dbs:/u01/app/oracle/product/11.2.0/db\_1/dbs