前言
之前docker 部署的 oracle 镜像,突然从 dockerhub 下架了。所以没办法,只能自己打包一个oracle 数据库的镜像。
找来找去,其实oracle 自身就提供了oracle 的产品 docker 构建脚本。所以直接按照oracle 官方的docker 构建仓库的说明打包。
文章目录
- 前言
- oracle 官方 docker image
- 支持的oracle database 版本
- 我们以12.2.0.1版本作为例子
- 准备oracle 12.2.0.1 的安装包
- 构建
- 运行容器
oracle 官方 docker image
官方提供了一个开源仓库,里面有所有的oracle产品的docker image构建的脚本。
地址:https://github.com/oracle/docker-images
将上述的仓库clone 到本地。
docker images clone下来的目录结构
我们需要打包的oracle 数据库,在 OracleDatabase 这个目录中。
进入到OracleDatabase 可以看到两个文件夹,其实比较关键。
一个RAC,一个SingleInstance。
看名字就可以很明白,如果做集群镜像,就打包RAC的 ,如果要是做单节点的就打包SingleInstance的。
我们这边仅需要一个单节点数据库,所以就打包SingleInstance。
支持的oracle database 版本
版本号 |
11.2.0.2 |
12.1.0.2 |
12.2.0.1 |
18.3.0 |
18.4.0 |
19.3.0 |
我们以12.2.0.1版本作为例子
docker-images这个仓库只有build的脚本,并不携带任何oracle database 的安装包。所以我们还得去下载oracle database 对应版本的安装包。
准备oracle 12.2.0.1 的安装包
全版本的下载地址 https://www.oracle.com/cn/database/technologies/enterprise-edition/documentation/database.html
我们需要的12.2.0.1 版本 https://www.oracle.com/database/technologies/oracle12c-linux-12201-downloads.html
下载12.2.0.1 版本的linux 版本安装包。下载好后,将压缩包文件放到
docker-images/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1
目录下即可。
构建
cd docker-images/OracleDatabase/SingleInstance/dockerfiles
执行该目录下的 buildDockerImage.sh
Usage: buildDockerImage.sh -v [version] [-e | -s | -x] [-i] [-o] [Docker build o ption]
Builds a Docker Image for Oracle Database.
Parameters:
-v: version to build
Choose one of: 11.2.0.2 12.1.0.2 12.2.0.1 18.3.0 18.4.0 19.3.0
-e: creates image based on 'Enterprise Edition'
-s: creates image based on 'Standard Edition 2'
-x: creates image based on 'Express Edition'
-i: ignores the MD5 checksums
-o: passes on Docker build option
* select one edition only: -e, -s, or -x
LICENSE UPL 1.0
Copyright (c) 2014-2019 Oracle and/or its affiliates. All rights reserved.
该脚本的帮助文档 还是比较全面的 ,所以按照提示执行编译即可。
我这边的build 参数
./buildDockerImage.sh -v 12.2.0.1 -e
打包成功后,会在docker images 下生成 oracle/database:12.2.0.1-ee 这个镜像。
运行容器
docker run --name <container name> \
--shm-size=1g \
-p 1521:1521 -p 8080:8080 \
-e ORACLE_PWD=<your database passwords> \
-v [<host mount point>:]/u01/app/oracle/oradata \
-d \
oracle/database:12.2.0.1-ee
可以设置的参数如下
Parameters:
--name: The name of the container (default: auto generated)
--shm-size: Amount of Linux shared memory
-p: The port mapping of the host port to the container port.
Two ports are exposed: 1521 (Oracle Listener), 8080 (APEX)
-e ORACLE_PWD: The Oracle Database SYS, SYSTEM and PDB_ADMIN password (default: auto generated)
-v /u01/app/oracle/oradata
The data volume to use for the database.
Has to be writable by the Unix "oracle" (uid: 1000) user inside the container!
If omitted the database will not be persisted over container recreation.
-v /u01/app/oracle/scripts/startup | /docker-entrypoint-initdb.d/startup
Optional: A volume with custom scripts to be run after database startup.
For further details see the "Running scripts after setup and on startup" section below.
-v /u01/app/oracle/scripts/setup | /docker-entrypoint-initdb.d/setup
Optional: A volume with custom scripts to be run after database setup.
For further details see the "Running scripts after setup and on startup" section below.
大概看一下就明白了,其他的也没啥特别的参数。
这个容器启动成功后,实例名为ORCLPDB1 的数据库就可以测试连接一下。
连接参数如下
即可连接成功,剩下的如何使用,自由发挥咯……