一、通过docker搭建Oracle

(一)、环境准备

        CentOS 7 oracle.tar镜像包(可参考三镜像的拉去)

(二)、docker搭建

1、下载docker离线安装包

docker下载地址:Docker版本下载 

2、安装docker

将下载好docker上传到对应的服务器上并解压

sudo tar -xvf docker-26.1.4-x86_64.tgz

给docker执行文件赋予可执行权限

sudo chmod 755 -R docker

复制docker到/usr/bin/目录下,使docker命令可以执行

sudo cp docker/* /usr/bin/

复制docker到/usr/bin/目录下,使docker命令可以执行

sudo cp docker/* /usr/bin/

 清理解压后的文件(此步骤可以选择不做)

sudo rm -rf docker docker-26.1.4-x86_64.tgz

3、配置docker服务

创建docker服务配置文件docker.service

sudo vim /etc/systemd/system/docker.service

在文件中添加一下内容:

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

[Service]

Type=notify

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

TimeoutSec=0

RestartSec=2

ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT

Restart=always

TimeoutStartSec=0

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

Delegate=yes

KillMode=process

StartLimitBurst=3

StartLimitInterval=60s

[Install]

WantedBy=multi-user.target

赋予docker服务配置文件docker.service执行权限

sudo chmod +x /etc/systemd/system/docker.service

4、启动docker服务

加载systemctl配置

sudo systemctl daemon-reload

启用docker服务开机自启动

sudo systemctl enable docker.service

启动docker服务

sudo systemctl start docker

检查docker服务状态

sudo systemctl status docker

查看安装的docker版本

sudo docker -v

5、docker服务自定义配置及镜像加速配置

创建daemon.json文件
sudo mkdir -p /etc/docker

sudo vim /etc/docker/daemon.json

{

  "data-root":"/data/data/docker",

  "insecure-registries":["www.xxx.com"],

  "registry-mirrors":["https://dockerproxy.cn"]

}

sudo systemctl daemon-reload #重载systemd管理守护进程配置文件

sudo systemctl restart docker #重启 Docker 服务

保存退出

镜像加速

方法一:假如拉取原始镜像命令如下

docker pull whyour/qinglong:latest

仅需在原命令前缀加入加速镜像地址 例如:

docker pull dockerproxy.cn/whyour/qinglong:latest

方法二:

一键设置镜像加速:修改文件 /etc/docker/daemon.json(如果不存在则创建)

/etc/docker/daemon.json

修改JSON文件 更改为以下内容 然后保存

{"registry-mirrors": ["https://dockerproxy.cn"]}

保存好之后 执行以下两条命令

sudo systemctl daemon-reload #重载systemd管理守护进程配置文件

sudo systemctl restart docker #重启 Docker 服务

查看更改自定义后的docker服务信息

sudo docker info

修改docker的数据存储路径

一般docker默认的存储路径为/var/lib/docker

若要修改则在/etc/docker/daemon.json添加:

{"data-root":"/data/data/docker",}

sudo docker info//查看是否路径改变

若已经在/var/lib/docker生成了数据,需要改变存储路径,则需将/var/lib/docker中的数据全部迁移复制到

新的目录如/data/data/docker下,注意:在复制过程中一定记得带权限一起复制,例

如:cp -rp /var/lib/docker/* /data/data/docker/,再重新加载启动docker,查看docker info存储路径是否改变

二、docker-compose离线安装

(一)、下载docker-compose离线安装包

  Docker-compose版本下载

(二)、安装docker-compose

将下载好的镜像上传到服务器

复制docker-compose到/usr/local/bin/目录下 

sudo cp -f docker-compose-linux-x86_64.v2.28.1 /usr/local/bin/docker-compose

赋予docker-compose可执行权限

sudo chmod +x /usr/local/bin/docker-compose

查看docker-compose版本

sudo docker-compose -v

(三)、一键安装、卸载(参照别人)

一键安装脚本

创建docker和docker-compose一键安装脚本

#!/bin/bash  

#定义字体颜色  

RE='\033[1;31m' # Red color code  

GR='\033[1;32m' # Green color code  

BL='\033[1;34m' # Blue color code  

PU='\033[1;35m' # Purple(紫) color code  

SK='\033[1;36m' # SkyBlue(天蓝) color code  

NC='\033[0m'    # Reset color to normal     

echo '解压tar包并给与docker权限...'  

tar -xvf ./package/docker* -C ./package && chmod 777 ./package/docker/*  

echo '将docker移到/usr/bin目录下...'  

cp -r ./package/docker/* /usr/bin/  

echo '将docker.service移到/etc/systemd/system/目录并给与权限...'   

cp -r ./conf/docker.service /etc/systemd/system/ && chmod 777 /etc/systemd/system/docker.service  

echo '######################'  

echo '创建docker工作目录并创建daemon.json配置文件...'  

mkdir -p /etc/docker && mkdir -p /data/app/dockerWork  

tee /etc/docker/daemon.json <<-'EOF'  

{  

        "data-root":"/data/app/dockerWork",  

        "insecure-registries": ["ss.suwell.com"],  

        "registry-mirrors": ["https://geuj9lut.mirror.aliyuncs.com"]  

}  

EOF  

echo '重新加载配置文件并重启docker...'  

systemctl daemon-reload && systemctl restart docker  

echo '设置docker开机自启动...'  

systemctl enable docker.service  

echo '######## docker版本信息 ########'  

docker info  

echo '将docker-compose移到/usr/bin/目录...'  

cp ./conf/docker-compose* /usr/local/bin/docker-compose && chmod 777 /usr/local/bin/docker-compose     

echo -e "${PU}######## 验证docker安装结果... ########${NC}"  

if ! docker version; then  

echo -e "${RE}docker 安装失败...${NC}"  

exit -1  

fi  

echo -e "${GR}docker安装成功!!!${NC}"  

echo -e "${PU}######## 验证docker-compose安装结果... ########${NC}"  

if ! docker-compose -v; then  

echo -e "${RE}docker-compose 安装失败...${NC}"  

exit -1  

fi  

echo -e "${GR}docker-compose 安装成功!!!${NC}"     

rm -rf ./package/docker  

一键卸载脚本

创建docker和docker-compose一键卸载脚本

#/bin/bash     

echo "停止所有容器服务"  

docker stop $(docker ps -a -q)  

echo "删除所有容器"  

docker rm $(docker ps -a -q)  

echo "删除docker所有镜像"  

docker rmi -f $(docker images -q)  

echo '停止docker服务...'  

systemctl stop docker  

echo '取消开机自启...'  

systemctl disable docker  

echo '删除docker相关包...'  

cd /usr/bin/ && rm -rf containerd* ctr docker* dockerd runc  

echo '取消docker.service注册文件...'  

cd /etc/systemd/system/ && rm -rf docker.service  

echo '删除docker配置文件...'  

cd /etc/ && rm -rf docker/* && rm -rf /data/app/dockerWork  

echo 'yum方式清空docker配置文件...'  

yum remove -y docker-ce docker-ce-cli containerd.io  

rm -rf /var/lib/docker && rm -rf /var/lib/containerd  

echo '重新加载配置文件...'  

systemctl daemon-reload  

echo 'docker卸载成功!!!'    

echo '删除docker-compose...'  

rm -rf /usr/local/bin/docker-compose  

echo 'docker-compose卸载成功!!!'

一键部署包封装

按照如下目录结构组装一键部署包即可,组包架构如下所示:

备注:conf目录下可替换自己想要安装的docker-compose版本,package目录下可替换自己想要安的docker版本,但需要注意每次仅能封装一个版本的docker和docker-compose包

三、oracle镜像拉取

1、在有网的环境拉取镜像

docker pull dockerproxy.cn/truevoly/oracle-12c

2、查看镜像

docker images

3、启动oracle

docker run -d -p 8088:8080 -p 1521:1521 -v /data/data/oracle:/u01/app/oracle/

--name oracle12c dockerproxy.cn/truevoly/oracle-12c

4、查看启动镜像

docker ps -a

镜像提交

docker commit -a 'ww' ef60e33c262b oracle-12c:latest

镜像打包

docker save -o oracle-12c.tar oracle-12c

在目标主机加载导出的oracle镜像

docker load < /home/oracle/oracle-12c.tar

查看镜像

docker images

启动oracle镜像

docker run -d -p 8088:8080 -p 1521:1521 -v /data/data/oracle:/u01/app/oracle/

--name oracle12c dockerproxy.cn/truevoly/oracle-12c

查看镜像启动情况

docker ps -a

查看启动过程中的日志

docker logs -f 启动生成的编码

若上述没问题则进入oracle验证

docker exec -it 对应的启动镜像id/bin/bash

Sqlplus

会输入账号密码

内置的账号有

system,密码oracle

sys as sysdba,密码oracle(sys账号要用 as sysdba)

使用连接工具连接(这里我用navicat)

导入数据是要切换到sys账号登录账号,如无权限在oracle中执行grant sysdba to system;

默认是Default需改为SYSDBA

四、用navicat导入dmp格式数据

点击目录

新建目录

数据所在路径,以docker为例:需要经数据复制到里面,docker cp /数据在服务器的存放.DMP 对应的镜像id:/要上传的docker内部路径,例如:

docker cp /home/oracle/xxx.DMP ef60e33c262b:/u01/app/oracle

保存即可

点击数据泵,导入数据

需导入即可

五、问题解决

一、问题1

[root@localhost local]# cat /home/data/cfgtoollogs/dbca/xe/xe.log

The specified shared pool size or SGA size "292MB" does not meet the recommended minimum

size requirement "331MB". This will make database creation fail. Do you want to continue?

Unique database identifier check passed.

/u01/app/oracle/ has enough space. Required space is 6140 MB , available space is 48591 MB.

File Validations Successful.

Copying database files

DBCA_PROGRESS : 1%

DBCA_PROGRESS : 2%

ORA-00821: Specified value of sga_target 292M is too small, needs to be at least 372M

ORA-01078: failure in processing system parameters

DBCA_PROGRESS : 4%

ORA-01034: ORACLE not available

ORA-01034: ORACLE not available

DBCA_PROGRESS : DBCA Operation failed.

解决方法:

docker run --shm-size=1024MB -d -p 8088:8080 -p 1521:1521 -v /data/data/oracle:/u01/app/oracle/

--name oracle12c dockerproxy.cn/truevoly/oracle-12c

二、问题2:

解决Oracle报错ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展

解决方法参考:

解决Oracle报错ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展-CSDN博客

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐