docker oracle创建实例_[Oracle]Docker通过Dockerfile搭建中间件及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.com"

# 设置环境变量

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 ./source/tnsnames.ora /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/oracle/tnsnames.ora >> /opt/oracle/instantclient_10_2/tnsnames.ora && \

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 tnsnames.ora

上面basic-10.2.0.5.0-linux.zip、sqlplus-10.2.0.5.0-linux.zip为oracle即时客户端,profile中是环境变量,tnsnames.ora是我们需要连接的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:39 CentOS-Base.repo

-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:14 limits.conf

-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:14 sysctl.conf数据库安装包放在/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

#基于https://github.com/jaspeen/oracle-11g

#https://github.com/quxiaozha/oracle-11g/tree/master/assets

MAINTAINER quxun

ADD assets /assets

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

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

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

&& mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \

&& curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值