前言:一次项目采用docker部署oracle11g,公司提供的没有映射宿主机数据库镜像文件,这样出现容器坏掉,数据库文件就不复存在,所以网上研究了下,如何实现宿主机数据库文件映射容器内部数据库文件。
1、制作镜像文件
1)拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
2)导出镜像
docker save -o oracle_11g.tar registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:latest
2、离线安装教程
1)加载镜像
docker load < oracle_11g.tar
2)先创建一个临时容器
docker run --name oracle_temp -p 1500:1521 --privileged=true -d registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:latest
#把临时容器中的oradata目录拷贝到正式容器要挂在的目录拷贝容器中的oradata目录
mkdir -p /data/app/oracle/oradata
docker cp oracle_temp:/home/oracle/app/oracle/oradata/ /data/app/oracle
#修改挂载目录所属用户和用户组
chown -R 500:500 /data/app/oracle/oradata/
#删除临时容器
docker rm -f oracle_temp
3)创建正式容器
命令:docker run --name hs_oracle -p 1521:1521 --privileged=true -d -v /data/app/oracle/oradata:/home/oracle/app/oracle/oradata registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:latest
#进入容器
docker exec -it hs_oracle bash
#删除
rm -rf /home/oracle/app/oracle/flash_recovery_area/helowin/control02.ctl
#拷贝
cp /home/oracle/app/oracle/oradata/helowin/control01.ctl /home/oracle/app/oracle/flash_recovery_area/helowin/control02.ctl
#退出
exit;
# 重启
docker restart hs_oracle
#进入容器
docker exec -it hs_oracle bash
#环境变量
source ~/.bash_profile
sqlplus / as sysdba
#登录sqlplus
#修改system用户账号
alter user system identified by system;
#修改sys用户账号
alter user sys identified by system;
#创建内部管理员账号,创建一个用户名为golaxy_orcl的用户,密码为 oracle_cn
#create user golaxy_orcl identified by oracle_cn;
#将dba权限授权给内部管理员账
grant connect,resource,dba to golaxy_orcl;
#修改密码规则策略为密码永不过期
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
#修改数据库最大连接数据
alter system set processes=1000 scope=spfile;
shutdown immediate;
startup;
3、创建表空间
#进入容器
docker exec -it hs_oracle bash
#登录
source ~/.bash_profile
sqlplus / as sysdba
#创建表空间
create tablespace hs_dev datafile '/home/oracle/app/oracle/oradata/helowin/hs_dev.dbf 'size 500m autoextend on next 10m maxsize unlimited;
以上!谢谢