当前位置: 首页 > news >正文

docker|Oracle数据库|docker快速部署Oracle11g和数据库的持久化(可用于生产环境)

一、

容器数据持久化的概念

docker做为容器化的领先技术,现在广泛应用于各个平台中,但不知道什么时候有一个说法是docker并不适用容器化数据库,说容器化的数据库性能不稳定,其实,这个说法主要是因为对docker的数据持久化不了解所导致的,数据库持久化做好了,是完全可以在生产环境使用容器化的数据库的

在容器层的 UnionFS(联合文件系统)中对文件/目录的任何修改,无论是手工修改还是

容器在运行过程中的修改,在该容器丢失或被删除后这些修改将全部丢失。即这些修改是无

法保存下来的。若要保存下来这些修改,通常有两种方式:

定制镜像持久化:将这个修改过的容器生成一个新的镜像,让这些修改变为只读的镜像

数据卷持久化:将这些修改通过数据卷同步到宿主机

容器数据持久化主要解决的问题如下:

  • 数据丢失:在默认情况下,Docker容器内部产生的数据存储在其自身的存储层上。当容器停止运行或被删除时,与该容器关联的存储层也会被清理,这意味着所有在容器运行期间生成或修改的数据都将永久丢失。
  • 迁移和备份困难:由于容器存储层与容器生命周期紧密相连,如果需要将数据从一个容器移动到另一个容器,或者需要对数据进行备份和恢复操作,会非常复杂且不可靠。
  • 多容器共享数据:在实际应用中,可能需要多个容器之间共享某些数据,例如数据库服务和Web服务器之间。但是,容器间的直接文件系统交互并不方便,也不利于容器的独立性和可移植性。
  • 性能考量:容器存储层通常是通过联合文件系统(如AUFS、OverlayFS等)实现的,频繁写入这类文件系统的性能可能不如直接写入宿主机的磁盘。

二、

docker+docker-compose 部署Oracle11g数据库+数据持久化

1、镜像下载:

本次实验是在VMware虚拟机上实现的,docker环境搭建部署就不在这里废话了,镜像适用的是阿里云的镜像

[root@centos1 ~]# docker images
REPOSITORY                                             TAG       IMAGE ID       CREATED       SIZE
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g   latest    3fa112fd3642   8 years ago   6.85GB

镜像pull命令为:

docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
2、
docker和docker-compose的版本说明

docker的版本是 20.10.7 docker-compose的版本是1.25.1  ,需要说明的是,docker版本应该为至少19版本,其它没有要求

[root@centos1 ~]# docker version
Client:Version:           20.10.7API version:       1.41Go version:        go1.13.15Git commit:        f0df350Built:             Wed Jun  2 11:51:04 2021OS/Arch:           linux/amd64Context:           defaultExperimental:      trueServer: Docker Engine - CommunityEngine:Version:          20.10.7API version:      1.41 (minimum version 1.12)Go version:       go1.13.15Git commit:       b0f5bc3Built:            Wed Jun  2 11:55:29 2021OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          v1.4.6GitCommit:        d71fcd7d8303cbf684402823e425e9dd2e99285drunc:Version:          1.0.0-rc95GitCommit:        b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7docker-init:Version:          0.19.0GitCommit:        de40ad0
[root@centos1 ~]# docker-compose version
docker-compose version 1.25.1, build a82fef07
docker-py version: 4.1.0
CPython version: 3.7.4
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019
3、
docker-compose的编排文件

这里需要说明,该名字是固定的,如果不是docker-compose.yml ,重启,停止oracle数据库需要指定配置文件,十分不方便

cat >docker-compose.yml <<EOF
version: '3.1'
services:oracle:image: registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:latestrestart: alwayscontainer_name: ogports:- "15211:1521"
EOF

 编排文件里没有写volume,这个时候先启动容器,后面在拷贝文件到宿主机目录

启动容器命令为:

docker-compose up -d
4、
将容器中的文件复制到宿主机相关目录内

确保容器状态是正确的

宿主机创建相关用户:

/etc/passwd 文件末尾添加 oracle:x:500:500::/home/oracle:/bin/bash

/etc/group 文件末尾添加 oinstall:x:500:

最为关键的一步,复制需要持久化的文件到宿主机(复制文件的时候,容器必须是正常启动的)

mkdir -p /data/oracle/oradata
docker cp og:/home/oracle/app/oracle/oradata/helowin /data/oracle/oradata/test_data
docker cp og:/home/oracle/app/oracle/flash_recovery_area/helowin /data/oracle/oradata/flash_recovery_area
chown -Rf oracle:oinstall /data/oracle/

 这里说明一下,cp的左边是容器的目录,空格后面的是宿主机的目录,宿主机的目录不需要自己创建,会自动完成,文件很快就拷贝完成,完成后,赋予相关用户权限

5、修改编排文件并重新应用编排文件
 cat >docker-compose.yml <<EOF
version: '3.1'
services:oracle:image: registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:latestrestart: alwayscontainer_name: ogvolumes:- "/data/oracle/oradata/test_data:/home/oracle/app/oracle/oradata/helowin"- "/data/oracle/oradata/flash_recovery_area:/home/oracle/app/oracle/flash_recovery_area/helowin"ports:- "15211:1521"
EOF

通过上面修改的编排文件,再次启动容器,这里需要先关闭,在启动,不能使用参数restart直接重启哦:

[root@centos1 ~]# docker-compose down
Stopping og ... done
Removing og ... done
Removing network root_default
[root@centos1 ~]# docker-compose up -d
Creating network "root_default" with the default driver
Creating og ... done

应用新编排文件后,查看容器日志,日志里面必须没有任何error:

root@centos1 ~]# docker logs -f og
/home/oracle/app/oracle/product/11.2.0/dbhome_2
Processing Database instance "helowin": log file /home/oracle/app/oracle/product/11.2.0/dbhome_2/startup.log
Fixed Size		    2213776 bytes
Variable Size		  402655344 bytes
Database Buffers	 1191182336 bytes
Redo Buffers		    7360512 bytes
Database mounted.
Database opened.
SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options/home/oracle/app/oracle/product/11.2.0/dbhome_2/bin/dbstart: Database instance "helowin" warm started.
tail: unrecognized file system type 0x794c7630 for `/home/oracle/app/oracle/product/11.2.0/dbhome_2/startup.log'. Reverting to polling.

🆗,现在Oracle数据库的容器持久化就做好了,使用工具连接也没有任何问题了

sid和服务名都是helowin,随便用哪个都可以,sys用户的密码是oracle,端口由于映射的是15211,因此上面必须这么填写,角色是sysdba

SH这个用户是锁定状态,把锁定去掉后,在重启Oracle容器,可以看到锁定仍然是去掉的,说明持久化成功了

 总结:

关键其实就两步,第一个是不带volume,启动容器,容器正常工作,第二步,拷贝容器内文件到宿主机,赋予权限,然后带上volume,先down容器,在up容器,拷贝文件决定了持久化工作是否正常

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何免费调用GPT API进行自然语言处理
  • 力扣2563.统计公平数对的数目
  • 2024年9月第3周AI资讯
  • android10 系统定制:增加应用使用数据埋点,应用使用时长统计
  • 【uni-app】小兔鲜项目-基础架构-请求和上传文件拦截器
  • 大数据最新面试题(持续更新)
  • 语音识别与语音控制的原理介绍
  • C++的初阶模板和STL
  • 漫步者头戴式耳机怎么样?漫步者、西圣、索尼三大耳机测评对比
  • 1.3 MySql的用户管理
  • 基于STM32红外感应的自动迎客人语音控制系统设计
  • .NET Core中的时区转换问题
  • Java设计模式—面向对象设计原则(五) ----->迪米特法则(DP) (完整详解,附有代码+案例)
  • 生信初学者教程(五):R语言基础
  • PCL 读取txt格式点云并可视化
  • python3.6+scrapy+mysql 爬虫实战
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【347天】每日项目总结系列085(2018.01.18)
  • Java面向对象及其三大特征
  • JS函数式编程 数组部分风格 ES6版
  • JS专题之继承
  • Linux各目录及每个目录的详细介绍
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Object.assign方法不能实现深复制
  • PhantomJS 安装
  • Web Storage相关
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 聊一聊前端的监控
  • 浏览器缓存机制分析
  • 数据结构java版之冒泡排序及优化
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 说说我为什么看好Spring Cloud Alibaba
  • ​configparser --- 配置文件解析器​
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ######## golang各章节终篇索引 ########
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #数学建模# 线性规划问题的Matlab求解
  • ( 10 )MySQL中的外键
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Note)C++中的继承方式
  • (Oracle)SQL优化技巧(一):分页查询
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (图)IntelliTrace Tools 跟踪云端程序
  • (小白学Java)Java简介和基本配置
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)大型网站架构演变和知识体系
  • (转载)Linux网络编程入门
  • (自适应手机端)响应式服装服饰外贸企业网站模板