docker安装oracle

这里给出两种方式,第一种是直接使用别人已经安装并配置好oracle的镜像,第二种是已经写好安装脚本,只需指定安装包目录就能得到oracle容器。

一、oracle11gR2

1、第一种

1.1 拉取镜像

1
$ docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

该镜像由阿里云提供,比较大,可能需要下载一会,等待下载即可。

1.2 运行容器

1
2
3
4
#通过镜像运行容器
$ docker run -d -p 1521:1521 --name oracle registry.aliyuncs.com/helowin/oracle_11g
#检查容器是否运行成功
$ docker ps

1.3 配置oracle

(1)配置环境变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#进入容器
$ docker exec -it oracle bash

#切换到root用户,密码是helowin
$ su root

$ vi /etc/profile
#在文件的末尾添加以下内容
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
export ORACLE_SID=helowin
export PATH=$ORACLE_HOME/bin:$PATH

# 刷新配置文件,使得环境变量生效
$ source /etc/profile

#创建软连接
$ ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
(2)创建或修改oracle用户密码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#从root用户切换到oracle用户
$ su oracle
#使用sysdba 连接oracle
$ sqlplus /nolog
SQL> conn /as sysdba
#创建qcmoke用户,密码123456
SQL> create user qcmoke identified by 123456;
SQL> grant connect,resource to qcmoke;
SQL> commit;

#修改system的密码为system
SQL> alter user system identified by system;
#修改sys的密码为sys
SQL> alter user sys identified by sys;
#退出orcle
SQL> exit

1.4 客户端登陆

oracle客户端配置(假设oracle服务端ip为qcmoke.site):

1
2
3
4
5
6
7
8
9
helowin =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = qcmoke.site)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = helowin)
)
)

连接服务名:helowin
账号:system,密码:system
或者
账号:qcmoke,密码:123456

springboot配置

1
2
3
4
5
6
7
8
spring:
datasource:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@qcmoke.site:1521:helowin
username: system
password: system
#username: qcmoke
#password: 123456

2、第二种

2.1 下载安装包

安装包下载地址:https://www.oracle.com/database/technologies/112010-linx8664soft.html

下载两个oracle安装包:linux.x64_11gR2_database_1of2.zip 和 linux.x64_11gR2_database_2of2.zip

💁‍♂温馨提示:

如果官方下载地址失效,可到本人网盘下载:

链接:https://pan.baidu.com/s/1YwFRecm1_O3pA5efxak7iw
提取码:e5rj

2.2 运行容器

1
2
3
4
#解压安装包到/install目录
$ mkdir /install/ && unzip ~/linux.x64_11gR2_database_1of2.zip -d /install/ && unzip ~/linux.x64_11gR2_database_2of2.zip -d /install/
#拉去并运行容器
$ docker run --privileged --name oracle11g -p 1522:1521 -v /install:/install jaspeen/oracle-11g

2.3 创建或修改oracle用户密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#进入oracle11g容器
$ docker exec -it oracle11g /bin/bash
#切换到image的oracle用户
$ su - oracle
#进入oracle数据库
$ sqlplus / as sysdba
#创建qcmoke用户,密码123456
SQL> create user qcmoke identified by 123456;
SQL> grant connect,resource to qcmoke;
SQL> commit;

#解锁scott用户
SQL> alter user scott account unlock;
User altered.
SQL> commit;
Commit complete.
SQL> conn scott/tiger
ERROR:
ORA-28001: the password has expired
Changing password for scott
#输入tiger即可
New password:
#在此输入tiger即可
Retype new password:
Password changed
Connected.
SQL>

2.4 客户端登录

oracle客户端配置(假设oracle服务端ip为39.108.102.215):

1
2
3
4
5
6
7
8
9
orcl =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 39.108.102.215)(PORT = 1522))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)

连接服务名:orcl
账号:scott,密码:tiger
或者
账号:qcmoke,密码:123456

springboot配置

1
2
3
4
5
6
7
8
spring:
datasource:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@39.108.102.215:1522:orcl
username: scott
password: tiger
#username: qcmoke
#password: 123456

二、oracle19c

有时候为了试验,需要安装Oracle新版本数据库,由于安装比较繁琐耗时,所以可通过docker快速安装部署。

需要提前下载好oracle19c的安装包:https://www.oracle.com/database/technologies/oracle-database-software-downloads.html#19c,下载Linux x86-64的ZIP包即可,下载后得到LINUX.X64_193000_db_home.zip。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
$ git clone https://github.com/oracle/docker-images.git
#把下载好的LINUX.X64_193000_db_home.zip压缩包放到docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0里
$ cd docker-images/OracleDatabase/SingleInstance/dockerfiles/
#生成docker镜像(注意构件的过程中依赖oraclelinux:7-slim镜像,如果服务器可连接互联网,那么构建的过程会自动下载该镜像,如果是内网环境构建的话,可以通过离线导入镜像的方式得到)
$ sh buildContainerImage.sh -v 19.3.0 -e

#查看生成的镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
oracle/database 19.3.0-ee 2f97d020b76a 3 hours ago 6.53GB
oraclelinux 7-slim 0a28ba78f4c9 4 weeks ago 132MB

#假设将oracle的数据文件挂载到宿主机上,注意:目录权限一定要正确,在容器中oracle用户的uid是54321,所以要保证容器内的oracle用户有权限读写该目录。所以需要创建oracle用户且uid是54321,并给挂载的目录设置权限。
$ groupadd -g 54321 oinstall
$ groupadd -g 54322 dba
$ groupadd -g 54323 oper
$ groupadd -g 54324 backupdba
$ groupadd -g 54325 dgdba
$ groupadd -g 54326 kmdba
$ groupadd -g 54330 racdba
$ useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle
echo "123456" | passwd --stdin oracle

$ mkdir -p /data1/oracle/oradata
$ chown oracle:oinstall /data1/oracle/oradata


#通过镜像创建并运行oracle docker容器实例,设置数据库的sid为xtcrm;pdb名称为pdb;并且设置sys、system、pdbadmin用户密码为123456
$ docker run --name oracle-19c \
-d \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_SID=xtcrm \
-e ORACLE_PDB=pdb \
-e ORACLE_PWD=123456 \
-v /data1/oracle/oradata:/opt/oracle/oradata \
oracle/database:19.3.0-ee

#查看日志
$ docker logs -f oracle-19c
#注意要等日志到看到如下提示,才说明启动并且创建数据库实例成功,这个时间有点长,需要耐心等待。
#########################
DATABASE IS READY TO USE!
#########################


#进入oracle docker容器执行sql
$ docker exec -it oracle-19c /bin/bash
$ export ORACLE_SID=XTCRM #注意每次进入容器都执行以下这个命令
$ sqlplus / as sysdba
SQL> show pdbs;


#创建普通用户
$ docker exec -it oracle-19c /bin/bash
$ export ORACLE_SID=XTCRM #注意每次进入容器都执行以下这个命令
$ sqlplus / as sysdba
SQL> alter session set "_ORACLE_SCRIPT"=true;
SQL> create user qcmoke identified by 123456;
SQL> grant connect,resource to qcmoke;
#SQL> grant connect,resource,dba to qcmoke;

#查看字符编码
SQL> select userenv('language') from dual;

可以分享镜像给其他服务器使用

1
2
3
4
5
6
#镜像导出
$ docker save -o oracle_database_19.3.0-ee.tar 2f97d020b76a
#镜像导入
$ docker load -i oracle_database_19.3.0-ee.tar
#如果已经是<none>得名称了,也可以通过以下命令重命名镜像名称
$ docker tag 2f97d020b76a oracle/database:19.3.0-ee

Oracle Enterprise Manage
访问地址:https://10.223.117.106:5500/em
Username:sys
Password:123456
Container Name:pdb

时间同步问题:

1
2
#在宿主机上复制时间文件到容器中即可
$ docker cp /usr/share/zoneinfo/Asia/Shanghai oracle-19c:/etc/localtime

参考:

https://www.jianshu.com/p/4ede7dcc1d86

https://hub.docker.com/r/jaspeen/oracle-11g

https://github.com/oracle/docker-images/tree/main/OracleDatabase/SingleInstance

https://www.jianshu.com/p/b683640677c9



----------- 本文结束 -----------




如果你觉得我的文章对你有帮助,你可以打赏我哦~
0%