Docker安装Oracle19C

# 如果使用-v 映射到本地文件,为了确保Docker容器内运行的Oracle数据库进程可以有权限读写数据到映射的目录。 执行: chmod -R 777 你需要映射的文件夹
mkdir -p /data/oracle/oradata
chmod -R 777 /data/oracle/oradata
# 启动命令
docker run -d \
 --name oracle19c \
 -p 1521:1521 \
 -p 5500:5500 \
 -e TZ=Asia/Shanghai \
 -e ORACLE_SID=orcl \
 -e ORACLE_PDB=orclpdb \
 -e ENABLE_ARCHIVELOG=false \
 -e ORACLE_PWD=Ora20240419 \
 -e ORACLE_BASE=/opt/oracle \
 -e ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 \
 -v /data/oracle/oradata/:/opt/oracle/oradata \
 registry.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee

# 查看启动日志
docker logs oracle19c --follow

创建实例的过程也会比较长
注意日志信息,有错解决错即可。通常保证内存和磁盘空间够即可

出现如下消息表示安装完成

The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
ORCLPDB(3):ALTER DATABASE DEFAULT TABLESPACE "USERS"
ORCLPDB(3):Completed: ALTER DATABASE DEFAULT TABLESPACE "USERS"
2024-04-19T13:34:46.444537+00:00
ALTER SYSTEM SET control_files='/opt/oracle/oradata/ORCL/control01.ctl' SCOPE=SPFILE;
2024-04-19T13:34:46.453712+00:00
ALTER SYSTEM SET local_listener='' SCOPE=BOTH;
   ALTER PLUGGABLE DATABASE ORCLPDB SAVE STATE
Completed:    ALTER PLUGGABLE DATABASE ORCLPDB SAVE STATE

XDB initialized.
2024-04-19T13:44:30.384776+00:00
2024-04-19T14:04:30.590662+00:00leted for file# 10, old size 327680K, new size 337920K
Resize operation completed for file# 3, old size 522240K, new size 532480K

安装完成,连接测试

默认用户名为system密码是创建容器时设置的密码,这里密码为Ora20240419

image-20240419221824107

======================== 分隔符 ==========================

Docker配置Oracle19C镜像

一、搭建Docker

CentOS Docker 安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

Ubuntu/Debian Docker 安装

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh --dry-run

二、下载官方docker-images仓库源码

地址如下:下载地址

image-20240419205823124

image-20240419210322209

访问不了Github可以从我的网盘下载,地址如下:

docker-image源码链接:https://pan.baidu.com/s/1dFi1mqKmiV4FCEgeJtbM9w
提取码:5429

三、将代码上传到服务器

[root@ecs-1 docker-images-main]# pwd
/opt/oracle/docker-images-main

建议服务器磁盘至少30G,空闲内存4G以上

四、官网下载Oracle19C安装包

地址如下:下载地址

image-20240419213642932

这里会涉及到登录Oracle,如果没有账号可以从我的网盘下载,地址如下:

Linux x86-64 Oracle19C安装包链接:https://pan.baidu.com/s/1KUa4qMEyJYgjTTT6V6dqeQ
提取码:3262

Linux ARM Oracle19C安装包链接:https://pan.baidu.com/s/14wPMOGltxlcGBQmF2ERaDA
提取码:3262

五、将下载好的安装包移动至如下位置

(具体位置视自己项目为准)

[root@ecs-1 19.3.0]# pwd
/opt/oracle/docker-images-main/OracleDatabase/SingleInstance/dockerfiles/19.3.0

Oracle19C安装文件上传到该目录
如图所示

image-20240419215230504

六、构建镜像

# 请确保磁盘空间足够
[root@ecs-1 dockerfiles]# ./buildContainerImage.sh -v 19.3.0 -e

这个过程会比较长,预计10分钟左右;出现如图消息,安装即为完成

image-20240419220130228

查看镜像

[root@ecs-1 dockerfiles]# docker images
REPOSITORY        TAG         IMAGE ID       CREATED          SIZE
oracle/database   19.3.0-ee   ef8fb2fbe1e2   14 minutes ago   6.54GB

七、在Docker上运行Oracle19C

# 如果使用-v 映射到本地文件,为了确保Docker容器内运行的Oracle数据库进程可以有权限读写数据到映射的目录。 执行: chmod -R 777 你需要映射的文件夹
mkdir -p /data/oracle/oradata
chmod -R 777 /data/oracle/oradata
# 启动命令
docker run -d \
 --name oracle19c \
 -p 1521:1521 \
 -p 5500:5500 \
 -e TZ=Asia/Shanghai \
 -e ORACLE_SID=orcl \
 -e ORACLE_PDB=orclpdb \
 -e ENABLE_ARCHIVELOG=false \
 -e ORACLE_PWD=Ora20240419 \
 -e ORACLE_BASE=/opt/oracle \
 -e ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 \
 -v /data/oracle/oradata/:/opt/oracle/oradata \
 ef8fb2fbe1e2

# 查看启动日志
docker logs oracle19c --follow

创建实例的过程也会比较长
注意日志信息,有错解决错即可。通常保证内存和磁盘空间够即可

出现如下消息表示安装完成

The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
ORCLPDB(3):ALTER DATABASE DEFAULT TABLESPACE "USERS"
ORCLPDB(3):Completed: ALTER DATABASE DEFAULT TABLESPACE "USERS"
2024-04-19T13:34:46.444537+00:00
ALTER SYSTEM SET control_files='/opt/oracle/oradata/ORCL/control01.ctl' SCOPE=SPFILE;
2024-04-19T13:34:46.453712+00:00
ALTER SYSTEM SET local_listener='' SCOPE=BOTH;
   ALTER PLUGGABLE DATABASE ORCLPDB SAVE STATE
Completed:    ALTER PLUGGABLE DATABASE ORCLPDB SAVE STATE

XDB initialized.
2024-04-19T13:44:30.384776+00:00
2024-04-19T14:04:30.590662+00:00leted for file# 10, old size 327680K, new size 337920K
Resize operation completed for file# 3, old size 522240K, new size 532480K

八、连接测试

默认用户名为system密码是创建容器时设置的密码,这里密码为Ora20240419

image-20240419221824107

九、上传镜像到镜像仓库

示例:推送到阿里云Docker Registry

1. 登录阿里云Docker Registry

docker login --username=阿里云账号全名 registry.cn-guangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

2. 从Registry中拉取镜像

docker pull registry.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee

3. 将镜像推送到Registry

docker login --username=阿里云账号全名 registry.cn-guangzhou.aliyuncs.com
docker tag ef8fb2fbe1e2 registry.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee
docker push registry.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

4. 选择合适的镜像仓库地址

从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-guangzhou.aliyuncs.com 作为Registry的域名登录。

5. 示例

使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。

$ docker images
  REPOSITORY        TAG         IMAGE ID       CREATED       SIZE
  oracle/database   19.3.0-ee   ef8fb2fbe1e2   2 hours ago   6.54GB
$ docker tag ef8fb2fbe1e2 registry-vpc.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee

使用 "docker push" 命令将该镜像推送至远程。

$ docker push registry-vpc.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee

十、多架构镜像

示例:推送到Docker Hub

1. 启用Docker CLI的实验特性

确保Docker CLI的实验特性被启用:

export DOCKER_CLI_EXPERIMENTAL=enabled

2.准备x86-64和Arm架构镜像

按照上述步骤在Arm架构服务器再执行一遍构建Oracle镜像步骤,再下载x86-64架构的镜像,得到如下:

$ docker login 
$ docker tag ef8fb2fbe1e2 hjdyzy/oracle:19.3.0-ee
$ docker tag b2bc6ba0dd80 hjdyzy/oracle:19.3.0-ee-arm
$ 
$ docker images
  REPOSITORY      TAG             IMAGE ID       CREATED       SIZE
  hjdyzy/oracle   19.3.0-ee-arm   b2bc6ba0dd80   2 hours ago   5.52GB
  hjdyzy/oracle   19.3.0-ee       ef8fb2fbe1e2   4 hours ago   6.54GB

3.创建并推送Manifest列表

使用 docker manifest create 命令来创建一个新的manifest列表,该列表包含多个架构特定的镜像。

docker manifest create hjdyzy/oracle:19.3.0-ee \
  --amend hjdyzy/oracle:19.3.0-ee-arm \
  --amend hjdyzy/oracle:19.3.0-ee

这里,hjdyzy/oracle:19.3.0-ee 是manifest列表的名称,它“指向”两个已经存在的镜像:hjdyzy/oracle:19.3.0-ee-armhjdyzy/oracle:19.3.0-ee

接下来,为manifest列表中的每个镜像设置特定的架构信息:

docker manifest annotate hjdyzy/oracle:19.3.0-ee hjdyzy/oracle:19.3.0-ee-arm --os linux --arch arm64
docker manifest annotate hjdyzy/oracle:19.3.0-ee hjdyzy/oracle:19.3.0-ee --os linux --arch amd64

这里,我们使用 docker manifest annotate 命令为每个镜像指定操作系统和架构。

最后,推送你创建的manifest列表到Docker Hub:

docker manifest push hjdyzy/oracle:19.3.0-ee

4.验证

你可以使用下面的命令来验证新的manifest列表是否正确推送并包含了所有相关架构的镜像:

docker manifest inspect hjdyzy/oracle:19.3.0-ee

这将显示manifest列表的详细信息,包括所有关联的镜像及其架构。

通过这种方式,当用户执行 docker pull hjdyzy/oracle:19.3.0-ee 时,Docker将会根据用户的平台自动选择合适的镜像版本进行拉取,无论是ARM还是x86架构。这使得镜像的分发和使用变得更加灵活和便捷。