linux(centos)基于docker搭建的oracle服务器,并上传到私有仓库

本文详细介绍了如何在Docker中安装Oracle数据库,并提供了从安装基础镜像到配置环境变量、安装Oracle软件、创建数据库的完整步骤。此外还涉及了如何通过Navicat连接数据库以及如何打包整个过程为Docker镜像。
  1. 安装docker
  1. 首先通过上面的步骤安装linux系统;
  2. 更新yum -y update ;
  3. 安装yum install docker -y;
  4. 配置镜像加速器vi /etc/docker/daemon.json
  5. {
  6. "registry-mirrors": ["https://hub-mirror.c.163.com"]
  7. };
  8. docker -v 测试安装成功;
  9. https://hub.docker.com注册账号;创建仓库;
  10. docker login ;
  1. 搭建docker基础镜像
  1. 首先拉取基础镜像:如centos镜像,docker pull centos:7;
  2. 拉取之后:docker images 查看本地所有镜像;
  3. 启动该容器:docker run -d -it --privileged centos:7 /usr/sbin/init
  4. 启动后:docker ps -a 查看所有启动的容器;
  5. 进入该容器:docker exec -it 容器id /bin/bash;
  6. 进入之后:就相当于进入到一个新的centos系统,然后就可以在里面安装所需要的环境jdk,redis等;
  7. 把宿主机的文件如:jdk,redis,复制到容器内的方法如下:

在宿主机: docker cp /home/ftptest/xxx.tar.gz 镜像id:/usr/local/java/xxx.tar.gz,

/home/ftptest/xxx.tar.gz宿主机的文件路径 ,/usr/local/java/xxx.tar.gz容器里的存储路径;

例如:docker cp /home/ftptest/linux.x64_11gR2_database_1of2.zip 0b55d25d3c5c:/usr/local/java/linux.x64_11gR2_database_1of2.zip

  1. 容器环境配置好后,exit退到宿主机,然后:docker commit 容器id mycentos:7(自己的镜像名称),相当于把环境加到centos基础镜像上面,这样一个拥有项目运行环境的镜像就搭好了;
  2. yum install -y unzip zip;提示没有unzip命令。
  1. 安装redis(jdk和这类似)
  1. 进入容器的目录:tar xzf redis-5.0.5.tar.gz
  2. cd redis-5.0.5
  3. make
  4. 进入到解压后的 src 目录,通过如下命令启动Redis:
  5. ./redis-server
  1. centos7安装oracle数据库

可参考:https://www.cnblogs.com/zydev/p/5827207.html,大部分相同,注意标红部分就可以,可以把这个和博客结合起来看。

查看主机名:hostname

hostnamectl 如果没有这个那就是没有用—privilege进入容器,查看主机名相关配置

安装前准备:

  1. 修改主机名(我修改了没用,可不管这个

#sed -i "s/HOSTNAME=localhost.localdomain/HOSTNAME=oracledb.01/" /etc/sysconfig/network

  1. 添加主机名与IP对应记录

# vim /etc/hosts 重启可能失效,可不管这个

192.168.0.71 oracledb.01

  1. 关闭Selinux没这个可以不管

#sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config 

# setenforce 0 

安装软件包:

yum -y install binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33*i686 compat-libstdc++-33*.devel compat-libstdc++-33 compat-libstdc++-33*.devel gcc gcc-c++ glibc glibc*.i686 glibc-devel glibc-devel*.i686 ksh libaio libaio*.i686 libaio-devel libaio-devel*.devel libgcc libgcc*.i686 libstdc++ libstdc++*.i686 libstdc++-devel libstdc++-devel*.devel libXi libXi*.i686 libXtst libXtst*.i686 make sysstat unixODBC unixODBC*.i686 unixODBC-devel unixODBC-devel*.i686

创建相关文件:(均在root用户的/根路径 执行cd 即可)

创建oinstall和dba组

/usr/sbin/groupadd oinstall /usr/sbin/groupadd dba

创建oracle用户

/usr/sbin/useradd -g oinstall -G dba oracle

设置oracle用户密码

passwd oracle

验证创建是否正确

[root@docker ~]# id oracle

uid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1002(dba)

 修改用户限制(均在root用户的/根路径 执行cd 即可)

vi /etc/security/limits.conf

#在末尾添加

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 1024

oracle hard nofile 65536

oracle soft stack 10240

oracle hard stack 10240

vi /etc/pam.d/login 

#在末尾添加

session required /lib64/security/pam_limits.so

session required pam_limits.so

vi /etc/profile

#添加

if [ $USER = "oracle" ]; then

if [ $SHELL = "/bin/ksh" ]; then

ulimit -p 16384

ulimit -n 65536

else

ulimit -u 16384 -n 65536

fi

fi

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

export ORACLE_SID=dbsrv2

export PATH=$PATH:$ORACLE_HOME/bin

 

退出执行:source /etc/profile

ln -s /u01/app/oracle/product/11.2.0/db_1/bin/sqlplus /usr/bin

创建安装目录:(均在root用户的/根路径 执行cd 即可)

mkdir -p /u01/app/

chown -R oracle:oinstall /u01/app/

chmod -R 775 /u01/app/

创建解压目录(均在root用户的/根路径 执行cd 即可)(博客没有这一步,加这个是因为可能会报错说空间不够)

mkdir -p /u02

chown -R oracle:oinstall /u02

chmod -R 775 /u02

配置环境变量:(在Oracle用户的/根路径 执行cd 即可)

切换用户 su oracle

vi ~/.bash_profile

export ORACLE_BASE=/u01/app/oracle

export ORACLE_SID=dbsrv2

source ~/.bash_profile

解压软件:

cd 到zib所在目录

unzip linux.x64_11gR2_database_1of2.zip -d /u02

unzip linux.x64_11gR2_database_2of2.zip -d /u02

yum install -y unzip zip;若提示没有unzip命令

复制响应文件模板:(在Oracle用户的/根路径 执行cd 即可)

su oracle

mkdir etc

cp /usr/local/src/database/response/* /home/oracle/etc/

ls etc

dbca.rsp db_install.rsp netca.rsp

设置响应文件权限(在Oracle用户的/根路径 执行cd 即可)

su oracle

chmod 700 /home/oracle/etc/*.rsp

修改安装Oracle软件的响应文件(在Oracle用户的/根路径 执行cd 即可)

su oracle

vi /home/oracle/etc/db_install.rsp

 

oracle.install.option=INSTALL_DB_SWONLY // 安装类型

ORACLE_HOSTNAME=xxx // 主机名称(hostname查询)

UNIX_GROUP_NAME=oinstall // 安装组

INVENTORY_LOCATION=/u01/app/oraInventory //INVENTORY目录(不填就是默认值)

SELECTED_LANGUAGES=en,zh_CN // 选择语言

ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 //oracle_home

ORACLE_BASE=/u01/app/oracle //oracle_base

oracle.install.db.InstallEdition=EE     // oracle版本

oracle.install.db.isCustomInstall=false   //自定义安装,否,使用默认组件

oracle.install.db.DBA_GROUP=dba /  / dba用户组

oracle.install.db.OPER_GROUP=oinstall // oper用户组

oracle.install.db.config.starterdb.type=GENERAL_PURPOSE //数据库类型

oracle.install.db.config.starterdb.globalDBName=orcl //globalDBName

oracle.install.db.config.starterdb.SID=dbsrv2 //SID

oracle.install.db.config.starterdb.memoryLimit=81920 //自动管理内存的内存(M)

oracle.install.db.config.starterdb.password.ALL=oracle //设定所有数据库用户使用同一个密码

SECURITY_UPDATES_VIA_MYORACLESUPPORT=false //(手动写了false)

DECLINE_SECURITY_UPDATES=true   //设置安全更新(貌似是有bug,这个一定要选true,否则会无限提醒邮件地址有问题,终止安装。PS:不管地址对不对)

开始安装:

cd /u02/databases

./runInstaller -silent -ignorePrereq -responseFile /home/oracle/etc/db_install.rsp

然后等待一段时间,大概十分钟左右,这时候就等着就可以,红色部分一定加上,否则报错

出现类似如下提示表示安装完成:

------------------------------------------------------------------------

The following configuration scripts need to be executed as the "root" user. 

#!/bin/sh 

#Root scripts to run

/u01/app/oraInventory/orainstRoot.sh

/u01/app/oracle/product/11.2.0/db_1/root.sh

To execute the configuration scripts:

1. Open a terminal window 

2. Log in as "root" 

3. Run the scripts 

4. Return to this window and hit "Enter" key to continue

Successfully Setup Software.

-----------------------------------------------------------------------------

按enter继续

执行脚本:(均在root用户的/根路径 执行cd 即可)

su root

/u01/app/oraInventory/orainstRoot.sh

/u01/app/oracle/product/11.2.0/db_1/root.sh

修改oracle的环境变量(均在oracle用户的/根路径 执行cd 即可)

su oracle

vi ~/.bash_profile

export ORACLE_BASE=/u01/app/oracle

export ORACLE_SID=dbsrv2

export ROACLE_PID=ora11g

#export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

export PATH=$PATH:$ORACLE_HOME/bin

export LANG="zh_CN.UTF-8"

export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"

export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'

source ~/.bash_profile(很重要,否则下面无法执行:lsnrctl: command not found 或者netca: command not found)

配置监听程序(均在oracle用户的/根路径 执行cd 即可)

netca /silent /responsefile /home/oracle/etc/netca.rsp

然后等待会出现如下:

 

启动监控程序(均在oracle用户的/根路径 执行cd 即可)

lsnrctl start

 

编辑应答文件(均在oracle用户的/根路径 执行cd 即可)

vi etc/dbca.rsp

 

建库(均在oracle用户的/根路径 执行cd 即可)(一定要在虚拟机执行 不可用putty或者其他连接工具 否则 执行出错)

dbca -silent -responseFile etc/dbca.rsp

 

到这里就安装成功了。

导入数据(通过navicat导入,当然可以通过命令导入,这里介绍的是怎么连接navicat)

sqlplus / as sysdba  登录

startup 启动数据库

创建表空间(如果有可跳过)

cd /u01/app/oracle/oradata

mkdir table_space

create tablespace WBPPS datafile '/u01/app/oracle/oradata/table_space/WBPPS.dbf' size 300M autoextend on next 100M maxsize unlimited;

退出保存提交镜像:然后编写dockerfile 和start_orcl.sh

  1. start_orcl.sh文件

#!/bin/bash

echo '172.17.0.2 15d5a6f3221d' >>/etc/hosts     //15d5a6f3221d  这是安装oracle时的主机名,但是你删除容器,然后重新打开再进入容器,这个主机名会变化,所以你要修改这个,不然无法启动。

source /etc/profile

lsnrctl start

su - oracle -c "/u01/app/oracle/product/11.2.0/db_1/bin/sqlplus -S / as sysdba << EOF

startup

EOF

"

  1. Dockerfile文件

FROM mycentos:7.1

COPY springboot.jar app.jar   //加一个测试项目,因为只启动oracle服务,容器会自动关闭因为没有守护进程,加入这个就可以

COPY start_orcl.sh /usr/bin/start_orcl.sh

RUN chmod 777 /usr/bin/start_orcl.sh

RUN su oracle

CMD sh -c "start_orcl.sh && java -jar app.jar "

 

启动容器,暴露1521端口,然后navicat连接就可以了。连接之后就可以导数据了。导入数据之后记得保存镜像。

可参考:http://blog.itpub.net/29485627/viewspace-1277018/

https://blog.youkuaiyun.com/weixin_44407691/article/details/103223102?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

  1. 创建docker镜像
  1. 将java jar包上传到linux /user/local/路径下,然后在该路径下创建Dockerfile文件;
  2. 启动jar包:vi Dockerfile:

FROM mycentos:7 #(就是刚才配置的centos基础镜像名称);

ADD springboot.jar app.jar

EXPOSE 8080

CMD ["java","-jar","app.jar"]

 

  1. 启动nginx: vi Dockerfile:

FROM mycentos:7

WORKDIR /usr/local/nginx

EXPOSE 80

CMD ["./sbin/nginx","-g","daemon off;"]

  1. 执行:docker build -t springboot:1.0 .(注意后面的点),创建后docker images查看刚创建的镜像;
  2. 启动无误后即可访问:docker run -it -d -p 8080:8080 springboot:1.0;
  3. docker logs -f -t --tail 200 容器ID ,可查看启动日志
  4. docker里面的oracle启动:(进入容器里面的操作)

echo '172.17.0.2 15d5a6f3221d' >>/etc/hosts

su oracle

source ~/.bash_profile

lsnrctl start

sqlplus / as sysdba

startup

  1. start_orcl.sh文件(通过dockerfile在宿主机操作)

#!/bin/bash

echo '172.17.0.2 15d5a6f3221d' >>/etc/hosts

source /etc/profile

lsnrctl start

su - oracle -c "/u01/app/oracle/product/11.2.0/db_1/bin/sqlplus -S / as sysdba << EOF

startup

EOF

"

  1. Dockerfile文件

FROM mycentos:7.1

COPY springboot.jar app.jar

COPY start_orcl.sh /usr/bin/start_orcl.sh

RUN chmod 777 /usr/bin/start_orcl.sh

RUN su oracle

CMD sh -c "start_orcl.sh && java -jar app.jar "

  1. docker 部署多个jar包,或者开启多个服务

可参考:https://blog.youkuaiyun.com/lwy572039941/article/details/101272017

  1. 同上,将jar包、shell脚本、Dockerfile三个放在同一目录下;
  2. 编写shell脚本start.sh:如下启动nginx

#!/bin/sh

java -jar app1.jar &

java -jar app2.jar &

java -jar app2.jar &

cd /usr/local/nginx

./sbin/nginx

  1. 编写Dockerfile:

FROM mycentos:7

ADD springboot1.jar app1.jar

ADD springboot2.jar app2.jar

ADD springboot3.jar app3.jar

COPY start.sh /usr/bin/start.sh #放在这个目录下,是因为/usr/bin下面的文件是可以直接执行的

RUN chmod 777 /usr/bin/start.sh

CMD sh -c "start.sh && java -jar app1.jar "

  1. 其他步骤同上。
  1. 镜像管理及容器管理
  1. 生成镜像:docker build +参数
  2. 运行该镜像:docker run +参数
  3. 查找镜像:docker search +name
  4. 查看所有镜像:docker image (-a)
  5. 删除镜像:docker rmi -f tomcat:8.0
  6. 删除所有镜像:docker rmi $(docker images -q)
  7. 修改镜像:docker tag tomcat:8.0 mytomcat:8.0
  8. 进入容器:docker exec -it 加容器id /bin/bash
  9. 修改容器:docker commit,对容器做了修改后,把改动后的容器,再次转换为镜像
  10. 容器生命周期:start stop pause unpause,启动容器:docker start 容器id
  11. 查看所有容器:docker ps (-a)
  12. 删除容器:docker -rm -f 容器id
  13. 删除所有容器:docker rm `docker ps -a -q` -f
  14. df -h查看磁盘容量
  15. 运行参数解释:docker run -dit --privileged -p21:21 -p80:80 -p8080:8080 --name mytomcat tomcat:8.0 /usr/sbin/init

-dit 是 -d -i -t 的缩写。 -d ,表示 detach,即在后台运行。 -i 表示提供交互接口,这样才可以通过 docker 和 跑起来的操作系统交互。 -t 表示提供一个 tty (伪终端),与 -i 配合就可以通过 ssh 工具连接到 这个容器里面去了;

--privileged 启动容器的时候,把权限带进去, 这样才可以在容器里进行完整的操作;

-p21:21 第一个21,表示在CentOS 上开放21端口。 第二个21 表示在容器里开放21端口。 这样当访问CentOS 的21端口的时候,就会间接地访问到容器里了

--name 给容器取了个名字,叫做 mytomcat。

  1. 删除docker(可不看)

yum list installed | grep docker

yum remove docker-ce.x86_64 ddocker-ce-cli.x86_64 -y

rm -rf /var/lib/docker

  1. docker中的报错

docker run之后状态是退出的原因:可能需要守护进程 ,可以和jar包一起启动测试

尽量将sh文件先执行,

No chain/target/match by that name:打开宿主机防火墙

  1. 搭建私库
  1. docker pull registry
  2. docker run -d -p 5000:5000 -v /date/volume/registry:/var/lib/registry registry
  3. curl -X GET http://127.0.0.1:5000/v2/_catalog
  4. 浏览器 http://192.168.141.133:5000/v2/_catalog
  5. docker tag orcltest:1.2 192.168.141.133:5000/centos:7
  6. vi /etc/docker/daemon.json ,"insecure-registries": ["192.168.141.133:5000"]
  7. systemctl restart docker.service
  8. docker start 私库id
  9. setenforce 0
  10. getenforce Permissive
  11. docker push 192.168.141.133:5000/centos:7
  12. curl -X GET http://127.0.0.1:5000/v2/centos/tags/list {"name":"centos","tags":["7"]}
  13. docker pull <私有库ip>:<端口>/ < 镜像repository> :<镜像tag>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值