docker oracle创建实例

阅读: 评论:0

docker oracle创建实例

docker oracle创建实例

1、Dockerfile简介

Dockerfile是由一些列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

作用

1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;3、对于运维人员:在部署时,可以实现应用的无缝移植。

组成命令作用FROM image_name:tag定义了使用哪个基础镜像启动构建流程

MAINTAINER user_name声明镜像的创建者

ENV key value设置环境变量 (可以写多条)

RUN command是Dockerfile的核心部分(可以写多条)

ADD source_dir/file dest_dir/file将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压

CPOY source_dir/file dest_dir/file和ADD相似,但是如果有压缩文件并不能解压

WORKDIR path_dir设置工作目录

EXPOSE port1 prot2用来指定端口,使容器内的应用可以通过端口和外界交互

CMD argument在构建容器时使用,会被docker run 后的argument覆盖

ENTRYPOINT argument和CMD相似,但是并不会被docker run指定的参数覆盖

VOLUME将本地文件夹或者其他容器的文件挂载到容器中

构建镜像

创建完一个Dockerfile文件之后并在其当前目录下运行docker build -t new_image_name:tag .命令生成一个新的镜像

2、中间件Dockerfile等相关文件及镜像的构建

本次我们仅将中间件部分转移到docker中,数据库依旧是用原来虚拟机上的数据库,所以我们的Dockerfile主要任务有:配置中间件运行环境(依赖包及环境变量)

配置oracle即时客户端,用于连接原虚拟机的数据库

其他一些杂项配置等

Dockerfile# 选择一个已有的os镜像作为基础

FROM centos:latest

# 镜像的作者

MAINTAINER quxun "quxun10433@hundsun"

# 设置环境变量

ENV LANG zh_CN.UTF-8

ENV NLS_LANG "AMERICAN_AMERICA.ZHS16GBK"

ENV ORACLE_HOME /opt/oracle/instantclient_10_2

ENV TNS_ADMIN /opt/oracle/instantclient_10_2

ENV FBASE_HOME /home/hundsun/linux.i386

ENV LD_LIBRARY_PATH $LD_LIBRARY_PATH:/opt/oracle/instantclient_10_2:/home/hundsun/linux.i386/lib:/home/hundsun/appcom

ENV PATH $PATH:/opt/oracle/instantclient_10_2:/home/hundsun/linux.i386/bin:.

ENV TERM $TERM:dumb

# 拷贝oracle即时客户端,用于连接数据库

ADD ./source/basic-10.2.0.5.0-linux.zip /opt/oracle/

ADD ./source/sqlplus-10.2.0.5.0-linux.zip /opt/oracle/

ADD ./source/profile /opt/oracle/

ADD ./a /opt/oracle/

# 安装设置ssh,新增hundsun,oracle用户,设置环境变量,配置oracle即时客户端,安装中间件依赖的包

RUN yum install -y openssh-server && 

yum -y install openssh-clients && 

sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config && 

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" && 

ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" && 

ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" && 

echo "root:hundsun" | chpasswd && 

yum install -y unzip && 

unzip /opt/oracle/basic-10.2.0.5.0-linux.zip -d /opt/oracle/ && 

unzip /opt/oracle/sqlplus-10.2.0.5.0-linux.zip -d /opt/oracle/ && 

ln -s /opt/oracle/instantclient_10_2/libclntsh.so.10.1 /opt/oracle/instantclient_10_2/libclntsh.so && 

ln -s /opt/oracle/instantclient_10_2/libocci.so.10.1 /opt/oracle/instantclient_10_2/libocci.so && 

yum install -y  glibc.i686 && 

yum install -y libaio && 

yum install -y libstdc++-4.8.5-16.el7.i686 &&

yum install -y libxml2-2.9.1-6.el7_2.3.i686 &&

yum install -y psmisc && 

ln -s /usr/lib/libcurl.so.4 /usr/lib/libcurl.so.3 && 

cat  /opt/a >> /opt/oracle/instantclient_10_a && 

cat /opt/oracle/profile >> /root/.bash_profile && 

useradd hundsun && 

echo "hundsun:hundsun" | chpasswd && 

cat /opt/oracle/profile >> /home/hundsun/.bash_profile && 

useradd oracle && 

echo "oracle:hundsun" | chpasswd && 

cat /opt/oracle/profile >> /home/oracle/.bash_profile

# 创建挂载点,注意在run时需用-v实际指定具体的宿主机目录

VOLUME ["/home/hundsun/workspace","/home/hundsun/appcom","/home/hundsun/linux.i386"]

# 暴漏22 9002 9004端口

EXPOSE 22 9002 9004

# 启动sshd服务

CMD ["/usr/sbin/sshd", "-D"]

镜像制作

新建/qx/centos_ssh文件夹,将Dockerfile拷贝到目录下,并新建source文件夹,文件夹中存放如下资料[root@localhost centos_ssh]# pwd

/qx/centos_ssh[root@localhost centos_ssh]# ll

-rw-rr. 1 root root 2520 Oct 10 13:54 Dockerfile

drwxr-xr-x. 2 root root  189 Oct 10 10:43 source[root@localhost source]# ll

-rw-rr. 1 root root 34813238 Oct  9 14:30 basic-10.2.0.5.0-linux.zip

-rw-rr. 1 root root      432 Oct 10 10:12 profile

-rw-rr. 1 root root   747944 Oct  9 14:43 sqlplus-10.2.0.5.0-linux.zip

-rw-rr. 1 root root     1797 Oct 10 10:40 a

上面basic-10.2.0.5.0-linux.zip、sqlplus-10.2.0.5.0-linux.zip为oracle即时客户端,profile中是环境变量&#a是我们需要连接的tns配置,可以直接从待迁移机器上拷过来即可。切换到/qx/centos_ssh目录下,执行docker build -t centos_mid .

等待镜像构建完成,可能需要一会儿完成之后,执行docker images

查看镜像列表

3、通过上面构建出来的镜像创建容器

Dockerfile中我们说过创建挂载点,注意在run时需用-v实际指定具体的宿主机目录我们先将hundsun下的三个目录,包括appcom,linux.i386,workspace拷贝到宿主机器上,例如放在[root@localhost uf_114]# pwd

/home/hundsun/uf_114

[root@localhost uf_114]# ll

drwxrwxr-x.  2 hundsun hundsun 36864 Oct 10 09:49 appcom

drwxrwxr-x.  4 hundsun hundsun    28 Oct 10 09:47 linux.i386

drwxrwxr-x. 10 hundsun hundsun  4096 Oct 10 11:00 workspace

然后我们创建容器时就将/home/hundsun/uf_114下的三个目录分别挂载到我们容器中的/home/hundsun/下的三个目录中[hundsun@d64e4b7c1af2 ~]$ pwd

/home/hundsun

[hundsun@d64e4b7c1af2 ~]$ ll

drwxrwxr-x.  2 hundsun hundsun 36864 Oct 10 09:49 appcom

drwxrwxr-x.  4 hundsun hundsun    28 Oct 10 09:47 linux.i386

drwxrwxr-x. 10 hundsun hundsun  4096 Oct 10 11:00 workspace

除此之外,我们还需要根据需要映射端口,如22,9002,9004等。最终,我们的命令如下docker run -d -p 2225:22 -p 9002:9002 -p 9004:9004 privileged shm-size=4G

-v /home/hundsun/uf_114/workspace/:/home/hundsun/workspace

-v /home/hundsun/uf_114/appcom/:/home/hundsun/appcom

-v /home/hundsun/uf_114/linux.i386/:/home/hundsun/linux.i386/ name centos_mid_uf centos_mid:latest

由于我们Dockerfile中最后有一条启动ssh的cmd,所以这里我们不用docker run -it xxx /bin/bash,而是用-d后台运行,因为如果有docker run -it xxx /bin/bash,就会覆盖Dockerfile中的最后一条cmd命令,导致ssh不能正常启动上面执行成功后,我们通过docker exec -it centos_mid_uf bash

进入容器,后面就是与原来虚拟机操作一样的了。由于上面我们上面映射了2225端口到22端口上,所以我们可以直接通过宿主机ip:2225连接到容器中,可通过xshell,xftp等工具直接连接。还有9002和9004端口,也可以通过hsadmin,客户端等直接连接宿主机,即可连接到容器内。而我们挂载的三个文件夹,则可以直接连接宿主机进行升级操作,会同步更新到容器内。

4、通过Dockefile安装oracle11.2.0.4

上面主要是完成了中间件环境Dockerfile的编写及构建,数据库依旧采用的是虚拟机管理,那么接下来我们写一个安装oracle的Dockerfile,由于有了上面的基础,这里就大概的介绍一下流程。

手工安装oracle是一个非常麻烦的事情,需要改一堆配置,需要尝试的可以看看这篇文章。

在上找到了一个写好的,但是有点问题,我们就是基于此来修改并新增一些个性化的功能,fork了一个到。

然后我们将上面所需要的文件都放到docker宿主机上,如下Dockerfile及所需脚本文件放在/qx/oracle_image下:

[root@localhost oracle_image]# pwd

/qx/oracle_image

[root@localhost oracle_image]# ll

total 4

drwxr-xr-x. 2 root root 245 Oct 17 14:10 assets

-rw-rr. 1 root root 637 Oct 17 15:53 Dockerfile/qx/oracle_image/assets中的文件为:

[root@localhost assets]# pwd

/qx/oracle_image/assets

[root@localhost assets]# ll

total 144

-rw-rr. 1 root root  2573 Oct 16 17:po

-rw-rr. 1 root root   255 Oct 13 15:14 colorecho

-rw-rr. 1 root root 74826 Oct 17 13:35 dbca.rsp

-rw-rr. 1 root root 25242 Oct 13 15:14 db_install.rsp

-rw-rr. 1 root root  2531 Oct 17 14:55 entrypoint_oracle.sh

-rw-rr. 1 root root   239 Oct 13 15:14 entrypoint.sh

-rw-rr. 1 root root   604 Oct 13 15:14 install.sh

-rw-rr. 1 root root   119 Oct 13 15:f

-rw-rr. 1 root root   461 Oct 13 15:14 profile

-rw-rr. 1 root root   129 Oct 13 15:14 run_installer.sh

-rw-rr. 1 root root  1833 Oct 17 16:10 setup.sh

-rw-rr. 1 root root   301 Oct 13 15:f数据库安装包放在/qx/database下:

[root@localhost database]# pwd

/qx/database

[root@localhost database]# ll

total 44

drwxr-xr-x.  4 root root   248 Aug 27  2013 install

-rw-rr.  1 root root 30016 Aug 27  2013 readme.html

drwxr-xr-x.  2 root root    61 Aug 27  2013 response

drwxr-xr-x.  2 root root    34 Aug 27  2013 rpm

-rwxr-xr-x.  1 root root  3267 Aug 27  2013 runInstaller

drwxr-xr-x.  2 root root    29 Aug 27  2013 sshsetup

drwxr-xr-x. 14 root root  4096 Aug 27  2013 stage

-rw-rr.  1 root root   500 Aug 27  2013 welcome.html

先看下Dockerfile[root@localhost oracle_image]# cat Dockerfile

FROM centos:7

#基于

#

MAINTAINER quxun

ADD assets /assets

#设置时区 设置yum源为阿里云 执行oracle安装前置脚本

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

&& echo 'Asia/Shanghai' >/etc/timezone

&& mv /pos.po /pos.po.backup

&& curl -o /pos.po .repo

&& yum clean all

&& chmod -R 755 /assets

&& /assets/setup.sh

EXPOSE 22 1521 8080

CMD ["/assets/entrypoint.sh"]

其实主要的几个步骤是:/assets/setup.sh脚本中主要是安装oracle所需依赖、oracle用户组、以及修改一些系统文件以满足oracle安装检查,新增了安装ssh服务

切换目录到/qx/oracle_image/下,通过docker bulid -t oracle .构建一个名为oracle的镜像

构建完镜像,Dockerfile的任务已经完成,接着创建并启动容器

docker run privileged shm-size=4G name oracle-container -p 1521:1521 -p 2222:22

-v /qx/database:/install/database oracle

/assets/entrypoint.sh是在创建容器时执行的,里面主要安装oracle,通过调用/assets/install.sh安装

安装完或者已经安装(比如第二次启动时),继续执行/assets/entrypoint_oracle.sh脚本

/assets/entrypoint_oracle.sh这个脚本主要时建库以及启动数据库

至此,数据库已经安装完毕,建库完毕,启动完毕。

linux用户名/密码:root/install

oracle/install

数据库SERVICE_NAME = ORCL,sys密码oracle

本文发布于:2024-02-01 00:48:08,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170671968832617.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实例   docker   oracle
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23