Docker部署oracle-xe-11g数据持久化的问题解决

环境说明


kubernets集群部署 oracle
镜像所采用的是:wnameless/oracle-xe-11g
镜像地址是:https://hub.docker.com/r/oracleinanutshell/oracle-xe-11g
我是先下载到本地了

# 查看本地镜像
[root@k8s-master01 oracle11g]# docker images|grep oracleinanutshell
oracleinanutshell/oracle-xe-11g                                               latest        ad13c30ec346   2 years ago     2.13GB
[root@k8s-master01 oracle11g]# 

数据持久化

现在想要实现数据持久化
这个镜像的oradata目录在这里/u01/app/oracle/oradata/XE
我是这样操作的:
先把容器中的这个路径下的所有文件都拷贝到宿主机
然后再把拷贝出的文件挂载到原先的目录下
操作如下:

先启动服务,生成数据文件

[root@k8s-master01 oracle11g]# docker run -d --name oracle11g -p 1521:1521 -e ORACLE_ALLOW_REMOTE=true oracleinanutshell/oracle-xe-11g
bb62b7f9eb09b976557afed98c7915b53f09d0161d4a9b38337262d9fb036767
[root@k8s-master01 oracle11g]# docker logs -f oracle11g
Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.


System altered.

^C
[root@k8s-master01 oracle11g]# 

看到 System altered 代表服务启动成功

把数据文件copy到宿主机

[root@k8s-master01 oracle11g]# docker cp oracle11g:/u01/app/oracle/ /data/oracle11g-data/
[root@k8s-master01 oracle11g]# 
[root@k8s-master01 oracle11g]# ls /data/oracle11g-data/oracle/
admin  diag  fast_recovery_area  oradata  oradiag_oracle  product
[root@k8s-master01 oracle11g]# 

那么,oracle的数据文件已经copy到宿主机

清除刚启动的容器 oracle11g

[root@k8s-master01 oracle11g]# docker stop oracle11g
oracle11g
[root@k8s-master01 oracle11g]# docker rm oracle11g
oracle11g
[root@k8s-master01 oracle11g]# 

在k8s集群下部署oracle-xe-11g

我的deployment配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: oracle11g
  namespace: database
spec:
  selector:
    matchLabels:
      app: oracle11g
  replicas: 1 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: oracle11g
    spec:
      containers:
      - name: oracle11g
        image: oracleinanutshell/oracle-xe-11g:1.0.0
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - mountPath: /u01/app/oracle
          name: data-app-11g
        ports:
        - containerPort: 8080
        - containerPort: 1521
        env:
        - name: ORACLE_ALLOW_REMOTE
          value: "true"
        - name: ORACLE_DISABLE_ASYNCH_IO
          value: "true"
        - name: ORACLE_ENABLE_XDB
          value: "true"
      volumes:
      - name: data-app-11g
        hostPath:
          path: /data/oracle11g-data/oracle  #指定本地存储目录
          type: Directory

配置文件中指定了本地存储路径

启动oracle-xe-11g加载本地数据

[root@k8s-master01 oracle11g]# kubectl apply -f deployment.yaml
deployment.apps/oracle11g created
[root@k8s-master01 oracle11g]# kubectl get pod -n database
NAME                         READY   STATUS    RESTARTS   AGE
oracle11g-6fb478dbc7-n6874   1/1     Running   0          21s
oracle12c-ddd5f54b6-852tb    1/1     Running   1          6d2h
[root@k8s-master01 oracle11g]# 

Oracle11g启动成功

查看日志

[root@k8s-master01 oracle11g]# kubectl logs -f oracle11g-6fb478dbc7-n6874 -n database
Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.


User altered.


User altered.


System altered.


System altered.

Shutting down Oracle Database 11g Express Edition instance.
Stopping Oracle Net Listener.

Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

oracle11g 启动成功

k8s开放nodeport端口 访问oracal数据库

我的service配置如下

apiVersion: v1
kind: Service
metadata:
  namespace: database
  labels:
    app: oracle11g
  name: oracle11g-nodeport
spec:
        #clusterIP: "172.25.42.235"
  externalTrafficPolicy: Cluster
  type: NodePort
  ports:
    - name: manager
      protocol: TCP
      port: 8080
      targetPort: 8080
      nodePort: 28080
    - name: connect
      protocol: TCP
      port: 1521
      targetPort: 1521
      nodePort: 21521
  selector:
    app: oracle11g

应用service配置

[root@k8s-master01 oracle11g]# kubectl get service -n database
NAME                 TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
oracle11g-nodeport   NodePort   10.105.188.84    <none>        8080:28080/TCP,1521:21521/TCP   7s
oracle12c-nodeport   NodePort   10.109.195.127   <none>        8080:38080/TCP,1521:31521/TCP   11d
[root@k8s-master01 oracle11g]# 

在宿主机开放端口28080 21521

使用说明

管理数据库连接
Login http://ip:28080/apex/apex_admin
username: ADMIN
password: admin
在这里插入图片描述

使用以下设置连接数据库:
hostname: 宿主机ip地址
port: 21521
sid: xe
username: system
password: oracle

在这里插入图片描述
已上就是Docker部署oracle-xe-11g数据持久化的问题解决过程,觉得有用就给个赞吧

本人博客Docker部署oracle-xe-11g数据持久化的问题解决 欢迎来访!

原文链接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leenhem

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值