手把手教你如何从镜像搭建到构建容器?

作者: 瞿勋
2017-11-10
1397
原创

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。


▲作用

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


组成



▲构建镜像

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


【中间件Dockerfile镜像的构建】
本次我们仅将中间件部分转移到docker中,数据库依旧是用原来虚拟机上的数据库,所以我们的Dockerfile主要任务有:
▪ 配置中间件运行环境(依赖包及环境变量)
▪ 配置oracle即时客户端,用于连接原虚拟机的数据库
▪ 其他一些杂项配置等

Dockerfile


镜像制作
新建/qx/centos_ssh文件夹,将Dockerfile拷贝到目录下,并新建source文件夹,文件夹中存放如下资料

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

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

查看镜像列表

Dockerfile构建容器

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

然后我们创建容器时就将/home/hundsun/uf_114下的三个目录分别挂载到我们容器中的/home/hundsun/下的三个目录中

除此之外,我们还需要根据需要映射端口,如22,9002,9004等。最终,我们的命令如下

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

上面执行成功后,我们通过

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


用Dockefile安装oracle

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

手工安装oracle是一个非常麻烦的事情,需要改一堆配置,需要尝试的可以看看linux社区的Docker中安装Oracle 11.2.0.4这篇文章。在github上找到了一个写好的,但是有点问题,我们就基于此来修改并新增一些个性化的功能,fork了一个到这儿。

然后我们将上面所需要的文件都放到docker宿主机上,如下:

先看下Dockerfile


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

2.切换目录到/qx/oracle_image/下,通过构建一个名为oracle的镜像。

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

4.

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

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

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

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

9.linux用户名:root/install      密码:oracle/install。

10.数据库SERVICE_NAME = ORCL,sys密码oracle。

恒生技术之眼原创文章,未经授权禁止转载。详情见(点击)转载须知

恒生技术之眼