前言

之前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下来的目录结构

docker 构建 oracle数据库 镜像_docker


我们需要打包的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 的数据库就可以测试连接一下。

连接参数如下

docker 构建 oracle数据库 镜像_linux_02


即可连接成功,剩下的如何使用,自由发挥咯……