最新的docker desktop不适合,只能用 dockerToolbox
下载地址:https://github.com/docker-archive/toolbox/releases
下载下来一直下一步安装即可,然后桌面上会出现docker的快速启动Docker Quickstart和虚拟机VirtualBox的启动图标,运行docker的启动。
这时候会提示要下载一个.iso文件,直接把安装包下的复制到这目录下就行了,拉起来太慢了
然后重新启动就可以看到docker启动成功。
现在已经安装完成了。
开始装oracle11g镜像:
自己做的话,官方github提供的dockerfile只有 11g xe版本(Express Edition 是 Oracle 数据库的免费版本,专为开发、测试和小型生产部署而设计,提供了一些基本的数据库功能。它支持最多使用 1GB 的内存和最多 1 CPU 核心,数据库存储限制为 11GB)
偷懒借助大佬开发的镜像环境直接安装了。
使用镜像 jaspeen/oracle-11g,直接pull拉取就行。
镜像dockerhub地址: https://hub.docker.com/r/jaspeen/oracle-11g 。
安装步骤
1.先在VirtualBox中创建共享文件夹关联到windows本地磁盘目录上(设置里面有共享文件夹,点击加号添加就行了,勾选自动挂载),然后把oracle11g安装包解压到该目录下。
2,运行docker命令安装就行了。
docker run --privileged --name oracle11g -p 1521:1521 -v /OracleMetaData:/install jaspeen/oracle-11g
这里的OracleMetaData写你刚才虚拟机和windows本地目录关联的文件夹名称,我这里关联的目录名称是OracleMetaData。
3.安装完以后,可以commit提交成新的镜像。
docker commit oracle11g oracle11g:1.0.0
4.然后启动镜像,这时候你可以再加个共享文件夹或者在刚才的共享文件夹中新建数据卷的目录,然后容器启动的时候挂载出来做导出文件的持久化。
docker run -d --name oracle11g -p 1521:1521 -v /OracleMetaData:/install -v xxx:/opt/oracle/dpdump oracle-11g:1.0.0
5.进入容器,配置监听文件。
docker exec -it xxxx /bin/bash
cd /opt/oracle/app/product/11.2.0/dbhome_1/network/admin 当前这底下应该没有监听文件创建文件,有的话可以略过了。
这里的端口写0.0.0.0 让任意ip可以访问我们
#listener.ora文件配置
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(SID_NAME = orcl)
)
)
ADR_BASE_LISTENER = /opt/oracle/app
配置完这个,应该在当前windwos服务器上已经可以在客户端通过ip+端口去连接了。
但是oracle标准的配置文件还有tnsnames.ora和sqlnet.ora
listener.ora是关于监听程序(Listener)的配置文件,用于设置监听程序的名称、协议地址以及服务等信息,是监听程序的启动和工作的配置基础。
tnsnames.ora类似于DNS的作用,它将一个方便记忆的数据库别名映射为一个网络服务名地址,用户通过这个别名就可以连接到远程的数据库,而不用关心具体的网络地址和端口号等信息。
sqlnet.ora设置了数据库服务端和客户端之间通信的方式,比如在进行分布式事务时,允许进行的最大事务数,接受连接请求的超时时间,连接后的超时无操作断开时间以及是否进行连接验证等
可以再创建tnsnames.ora和sqlnet.ora
#sqlnet.ora 文件配置
configuration tools. NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
ADR_BASE = /opt/oracle/app
# tnsnames.ora文件配置
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
以上全部配置完,可以查看下当前虚拟机ip,或者在docker启动的窗口里也能看到,现在可以通过虚拟机ip连接了。
我这边不想通过虚拟机ip去连接,又在虚拟机里面映射了端口。
在虚拟机设置窗口中,选择 "网络" 选项卡。
如果你的虚拟机的网络连接模式是 NAT 模式,选择 "高级",然后点击 "端口转发"。
在端口转发规则列表中,点击 "+ 添加新的端口转发规则"。
在弹出的对话框中,填写以下信息:
名称:可以随意命名,例如 "Oracle 1521"。
协议:选择 TCP。
主机 IP:留空或填写 127.0.0.1(表示本地主机)。
主机端口:填写要映射到本地主机的端口,例如 1521。
客户端 IP:留空或填写要映射到虚拟机的 IP 地址。
客户端端口:填写要映射到虚拟机的端口,例如 1521。
点击 "确定" 保存设置。
因为docker容器启动的时候已经把端口1521映射到了 虚拟机的1521上,现在在虚拟机里面设置1521映射到windows服务器的1521端口就行了。
接下来可以通过windows服务器ip+端口直接访问了。