暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【DB宝10】在Docker中只需2步即可拥有Oracle18c环境

DB宝 2021-03-23
1099
   点 击 上 方 蓝 字 “DB宝”,关 注 我 吧  

目录

    一、从Docker Hub或阿里云镜像下载小麦苗上传的镜像文件
    二、创建容器并启动数据库
    三、尽情使用吧
    3.1 数据库使用
    3.2 创建数据库
    3.3 EMDE的使用
    3.4 使用ssh连接到容器内
    3.5 外部客户端连接容器内的数据库

    一、从Docker Hub或阿里云镜像下载小麦苗上传的镜像文件

    • 小麦苗的Docker Hub的地址:https://hub.docker.com/u/lhrbest
    • Oracle 18c DB的地址:https://hub.docker.com/r/lhrbest/oracle18clhr_rpm_db/tags

    1# 从Docker hub下载,网络不好时,一般比较慢
    2docker pull lhrbest/oracle18clhr_rpm_db
    3# 可以选择从阿里云下载
    4docker pull registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle18clhr_rpm_db
    5# 从阿里云下载后可以tag成如下形式
    6docker tag registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle18clhr_rpm_db lhrbest/oracle18clhr_rpm_db

    镜像大概5G左右,解压后大约13G左右,所以请保留充足的空间。执行过程如下:

     1[root@docker35 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle18clhr_rpm_db
    2Using default tag: latest
    3latest: Pulling from lhrbest/oracle18clhr_rpm_db
    4ac9208207ada: Already exists 
    55f7f556e707f: Pull complete 
    6Digest: sha256:e2e90034c232e328441b704a3db2edeb13a83cfe5e5dd9221f6ee954c4efdf1e
    7Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle18clhr_rpm_db:latest
    8registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle18clhr_rpm_db:latest
    9[root@docker35 ~]# docker tag registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle18clhr_rpm_db lhrbest/oracle18clhr_rpm_db
    10[root@docker35 ~]# docker images | grep 18c
    11lhrbest/oracle18clhr_rpm_db                                     latest              d99be9a3f472        11 days ago         13.1GB
    12registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle18clhr_rpm_db   latest              d99be9a3f472        11 days ago         13.1GB
    13[root@docker35 ~]

    二、创建容器并启动数据库

    1# 1、创建容器
    2docker run -itd -h lhr18cocp --name lhr18cocp -p 222:22  -p 1522:1521 -p 5500:5500  --privileged=true lhrbest/oracle18clhr_rpm_db  /usr/sbin/init
    3# 2、进入容器
    4docker exec -it lhr18cocp bash
    5# 3、启动监听和数据库,使用root命令一键启动
    6/etc/init.d/oracledb_ORCLCDB-18c start

    在创建容器时,需要注意端口映射关系。在以上命令中,主机的222、1522和5500这3个端口不能被占用,否则会创建失败。

    如果想再创建一个容器,那么只需要将以上命令修改参数name和p不同即可,立马就可以拥有一个新的环境,而且和之前的IP地址不同,用来做测试再方便不过了,如下:

    1# 1、创建容器2
    2docker run -itd -h lhr18cocp --name lhr18cocp2 -p 223:22  -p 1523:1521 -p 5501:5500  --privileged=true lhrbest/oracle18clhr_rpm_db  /usr/sbin/init
    3# 2、进入容器2
    4docker exec -it lhr18cocp2 bash
    5# 3、启动监听和数据库,使用root命令一键启动
    6/etc/init.d/oracledb_ORCLCDB-18c start

    执行过程:

     1[root@docker35 ~]# docker images | grep 18c
    2lhrbest/oracle18clhr_rpm_db                                     latest              d99be9a3f472        11 days ago         13.1GB
    3registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle18clhr_rpm_db   latest              d99be9a3f472        11 days ago         13.1GB
    4[root@docker35 ~]# docker run -itd -h lhr18cocp --name lhr18cocp -p 222:22  -p 1522:1521 -p 5500:5500  --privileged=true lhrbest/oracle18clhr_rpm_db  /usr/sbin/init
    54bf134861d2c67faf68b1a8c42beb66821abc0fa2fc49a34beb143d218f00657
    6[root@docker35 ~]# docker exec -it lhr18cocp bash
    7
    8[root@lhr18crpm /]# cat /etc/redhat-release 
    9CentOS Linux release 7.6.1810 (Core) 
    10[root@lhr18cocp /]# ifconfig
    11eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    12        inet 172.17.0.8  netmask 255.255.0.0  broadcast 172.17.255.255
    13        ether 02:42:ac:11:00:08  txqueuelen 0  (Ethernet)
    14        RX packets 672  bytes 101230 (98.8 KiB)
    15        RX errors 0  dropped 0  overruns 0  frame 0
    16        TX packets 593  bytes 3748736 (3.5 MiB)
    17        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    18
    19[root@lhr18cocp /]# /etc/init.d/oracledb_ORCLCDB-18c start
    20Starting Oracle Net Listener.
    21Oracle Net Listener started.
    22Starting Oracle Database instance ORCLCDB.
    23Oracle Database instance ORCLCDB started.
    24
    25[root@lhr18crpm /]# su - oracle
    26Last login: Sun Jun 28 14:05:18 CST 2020 on pts/0
    27[oracle@lhr18crpm ~]$ echo $ORACLE_HOME
    28/opt/oracle/product/18c/dbhome_1
    29[oracle@lhr18crpm ~]$ echo $ORACLE_SID
    30ORCLCDB

    再创建一个新的容器,可以看到IP地址和之前的不同,容器和容器之间是互不影响的,用来做cdb和pdb的迁移再好不过了:

     1[root@docker35 ~]# docker run -itd -h lhr18cocp --name lhr18cocp2 -p 223:22  -p 1523:1521 -p 5501:5500  --privileged=true lhrbest/oracle18clhr_rpm_db  /usr/sbin/init
    268a14533f2024f33400c37ba0056456834db17ac1d6af62b05464016b137bdcc
    3[root@docker35 ~]# docker exec -it lhr18cocp2 bash
    4[root@lhr18cocp /]# ifconfig
    5eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    6        inet 172.17.0.9  netmask 255.255.0.0  broadcast 172.17.255.255
    7        ether 02:42:ac:11:00:09  txqueuelen 0  (Ethernet)
    8        RX packets 8  bytes 656 (656.0 B)
    9        RX errors 0  dropped 0  overruns 0  frame 0
    10        TX packets 0  bytes 0 (0.0 B)
    11        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    三、尽情使用吧

    3.1 数据库使用

     1[root@lhr18cocp /]# su - oracle
    2Last login: Thu Jul  9 16:57:52 CST 2020 on pts/1
    3
    4[oracle@lhr18cocp ~]$ lsnrctl status
    5
    6LSNRCTL for Linux: Version 18.0.0.0.0 - Production on 09-JUL-2020 17:02:23
    7
    8Copyright (c) 1991, 2018, Oracle.  All rights reserved.
    9
    10Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=lhr18cocp)(PORT=1521)))
    11STATUS of the LISTENER
    12------------------------
    13Alias                     LISTENER
    14Version                   TNSLSNR for Linux: Version 18.0.0.0.0 - Production
    15Start Date                09-JUL-2020 16:57:52
    16Uptime                    0 days 0 hr. 4 min. 31 sec
    17Trace Level               off
    18Security                  ONLocal OS Authentication
    19SNMP                      OFF
    20Listener Parameter File   /opt/oracle/product/18c/dbhome_1/network/admin/listener.ora
    21Listener Log File         /opt/oracle/diag/tnslsnr/lhr18cocp/listener/alert/log.xml
    22Listening Endpoints Summary...
    23  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=lhr18cocp)(PORT=1521)))
    24  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
    25  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=lhr18cocp)(PORT=5500))(Security=(my_wallet_directory=/opt/oracle/product/18c/dbhome_1/admin/ORCLCDB/xdb_wallet))(Presentation=HTTP)(Session=RAW))
    26Services Summary...
    27Service "ORCLCDB" has 1 instance(s).
    28  Instance "ORCLCDB"status READY, has 1 handler(s) for this service...
    29Service "ORCLCDBXDB" has 1 instance(s).
    30  Instance "ORCLCDB"status READY, has 1 handler(s) for this service...
    31Service "a8cb5bdeb697291fe0530f0011acfe5a" has 1 instance(s).
    32  Instance "ORCLCDB"status READY, has 1 handler(s) for this service...
    33Service "orclpdb1" has 1 instance(s).
    34  Instance "ORCLCDB"status READY, has 1 handler(s) for this service...
    35The command completed successfully
    36
    37[oracle@lhr18cocp ~]$ sas
    38
    39SQL*Plus: Release 18.0.0.0.0 - Production on Thu Jul 9 17:01:30 2020
    40Version 18.3.0.0.0
    41
    42Copyright (c) 19822018, Oracle.  All rights reserved.
    43
    44
    45Connected to:
    46Oracle Database 18Enterprise Edition Release 18.0.0.0.0 - Production
    47Version 18.3.0.0.0
    48
    49SYS@ORCLCDB> show pdbs
    50
    51    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    52---------- ------------------------------ ---------- ----------
    53         2 PDB$SEED                       READ ONLY  NO
    54         3 ORCLPDB1                       READ WRITE NO

    3.2 创建数据库

    我们也可以自己创建自己需要的数据库,如下所示,创建了一个非cdb的数据库,dbname和sid都是lhrdb:

     1[oracle@lhr18cocp ~]$ dbca -silent -ignorePreReqs  -createDatabase -templateName General_Purpose.dbc -responseFile NO_VALUE \
    2> -gdbname lhrdb  -sid lhrdb \
    3> -createAsContainerDatabase FALSE \
    4> -sysPassword lhr -systemPassword lhr -dbsnmpPassword lhr \
    5> -datafileDestination '/opt/oracle/oradata' -recoveryAreaDestination '/opt/oracle/flash_recovery_area' \
    6> -storageType FS \
    7> -characterset ZHS16GBK \
    8> -sampleSchema true \
    9> -totalMemory 1024 \
    10> -databaseType MULTIPURPOSE \
    11> -emConfiguration NONE
    12[WARNING] [DBT-06208] The 'SYS' password entered does not conform to the Oracle recommended standards.
    13   CAUSE: 
    14a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
    15b.The password entered is a keyword that Oracle does not recommend to be used as password
    16   ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
    17[WARNING] [DBT-06208] The 'SYSTEM' password entered does not conform to the Oracle recommended standards.
    18   CAUSE: 
    19a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
    20b.The password entered is a keyword that Oracle does not recommend to be used as password
    21   ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
    22Prepare for db operation
    2310complete
    24Copying database files
    2540complete
    26Creating and starting Oracle instance
    2742complete
    2846complete
    2950complete
    3054complete
    3158complete
    3260complete
    33Completing Database Creation
    3466complete
    3569complete
    3670complete
    37Executing Post Configuration Actions
    38100complete
    39Database creation complete. For details check the logfiles at:
    40 /opt/oracle/cfgtoollogs/dbca/lhrdb.
    41Database Information:
    42Global Database Name:lhrdb
    43System Identifier(SID):lhrdb
    44Look at the log file "/opt/oracle/cfgtoollogs/dbca/lhrdb/lhrdb0.log" for further details.
    45
    46[oracle@lhr18cocp ~]$ . oraenv
    47ORACLE_SID = [ORCLCDB] ? lhrdb
    48The Oracle base remains unchanged with value /opt/oracle
    49[oracle@lhr18cocp ~]$ sas
    50
    51SQL*Plus: Release 18.0.0.0.0 - Production on Thu Jul 9 17:20:47 2020
    52Version 18.3.0.0.0
    53
    54Copyright (c) 19822018, Oracle.  All rights reserved.
    55
    56
    57Connected to:
    58Oracle Database 18Enterprise Edition Release 18.0.0.0.0 - Production
    59Version 18.3.0.0.0
    60
    61SYS@lhrdb> show pdbs
    62SYS@lhrdb> 

    3.3 EMDE的使用

    这个镜像默认配置了EM,端口为5500,所以EM的访问地址为:https://192.168.1.35:5500/em

    1[oracle@lhr18cocp ~]$ lsnrctl status | grep tcps
    2  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=lhr18cocp)(PORT=5500))(Security=(my_wallet_directory=/opt/oracle/product/18c/dbhome_1/admin/ORCLCDB/xdb_wallet))(Presentation=HTTP)(Session=RAW))


    3.4 使用ssh连接到容器内

     1C:\Users\lhrxxt>ssh root@192.168.1.35 -p222
    2The authenticity of host '[192.168.1.35]:222 ([192.168.1.35]:222)' can't be established.
    3ECDSA key fingerprint is SHA256:9LX3zOgSJ7HC5MztqfJg7S46TJLZBdwV4/xIdCkExy8.
    4Are you sure you want to continue connecting (yes/no)? yes
    5Warning: Permanently added '[192.168.1.35]:222' (ECDSA) to the list of known hosts.
    6root@192.168.1.35's password:
    7Last login: Wed Jun 24 08:53:40 2020 from gateway
    8[root@lhr18cocp ~]# ps -ef|grep pmon
    9oracle     244     0  0 16:57 ?        00:00:00 ora_pmon_ORCLCDB
    10oracle    4143     0  0 17:19 ?        00:00:00 ora_pmon_lhrdb
    11root      5193  5125  0 17:31 pts/2    00:00:00 grep --color=auto pmon

    3.5 外部客户端连接容器内的数据库

    我们可以在容器外部通过sqlplus或其他工具连接容器内的数据库,注意此时的端口应该为1522:

     1C:\Users\lhrxxt>sqlplus sys/lhr@192.168.1.35:1522/ORCLCDB as sysdba
    2
    3SQL*Plus: Release 12.1.0.2.0 Production on Thu Jul 9 17:39:43 2020
    4
    5Copyright (c) 19822014, Oracle.  All rights reserved.
    6
    7
    8Connected to:
    9Oracle Database 18Enterprise Edition Release 18.0.0.0.0 - Production
    10
    11SYS@192.168.1.35:1522/ORCLCDB> show pdbs
    12
    13    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    14---------- ------------------------------ ---------- ----------
    15         2 PDB$SEED                       READ ONLY  NO
    16         3 ORCLPDB1                       READ WRITE NO

    如果使用PLSQL Developer也是可以连接的,如下:

    怎么样,是不是很爽,是不是非常方便呢,文末记得点赞哈。


    本文结束。


    • 微信公众号:DB宝,作者:小麦苗
    • 作者博客地址:http://blog.itpub.net/26736162/
    • 作者微信:db_bao

    • 作者QQ:646634621,QQ群:230161599、618766405
    • 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL DBA培训
    • 版权所有,欢迎分享本文,转载请保留出处

    • 若有侵权请联系小麦苗删除

      ★DB宝分享的IT资料:https://mp.weixin.qq.com/s/Iwsy-zkzwgs8nYkcMz29ag
      ★DB宝笔试面试详解:https://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

      长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:DB宝,学习最实用的数据库技术。




      文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论