使用docker搭建高并发网站架构实践4–NFS文件共享搭建

释放双眼,带上耳机,听听看~!

NFS****文件共享系统搭建

 

一. 整体结构示意:

如图所示:安装NFS-server,新建/data/testfile/nfs作为分享目录,设置配置文件/etc/exports; 在tomcat1和tomcat2的主机上安装NFS-client,将服务器共享目录挂载到tomcat1的/data/tomcat1-temp目录下,将服务器共享目录挂载到tomcat2的/data/tomcat2-temp目录下;在通过docker启动tomcat1时,将/data/tomcat1-temp挂载到tomcat1的webapps工程目录下,tomcat2同理。此时,tomcat1和tomcat2的webapps下工程目录便实现了共享。

二. 具体操作:

  1. nfs服务器端配置

apt-get install nfs-kernel-server

在服务器端建立文件共享目录

mkdir /data/testfile/nfs

vim /etc/exports

chmod –R 777 /data/testfile/nfs

#chmod –R 777 * :

参数-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)

*:通配符,指当前目录下的所有文件及目录

将当前目录下的所有文件及子目录的文件拥有者权限设置为读、写、可执行,文件拥有者所在的用户组成员具备读、写、可执行权限,其它用户也具备读、写、可执行权限

/etc/init.d/nfs-kernel-server start

showmount -e

 

  1. nfs客户端的配置:

安装nfs-common

apt-get install nfs-common

新建目录

mkdir /data/tomcat1-temp

mkdir /data/tomcat2-temp

挂载服务器端目录到上述目录

mount 10.104.15.62:/data/testfile/nfs /data/tomcat1-temp

mount 10.104.15.62:/data/testfile/nfs /data/tomcat2-temp

此时,下面三个目录便实现了文件共享:

 

启动tomcat1,并将/data/tomcat1-temp挂载到容器中tomcat1 webapps相应工程目录下:

docker run –p 18080:8080 –name tomcat-nfs1 –v /data/tomcat1-temp/:/data/tomcat/webapps/ROOT –d iyangcong/tomcat7 /data/start.sh

进入tomcat1容器中,工程目录已和服务器端共享目录同步

 

启动tomcat2,并将/data/tomcat2-temp挂载到容器中tomcat2 webapps相应工程目录下:

docker run –p 28080:8080 –name tomcat-nfs2 –v /data/tomcat2-test/:/data/tomcat/webapps/ROOT –d

iyangcong/tomcat7 /data/start.sh

进入tomcat2容器中,可知工程目录已经和服务器端同步。

 

在tomcat2的目录下,新建文件testtest,整体目录如下所示:

进入toncat1工程目录下:可知tomcat1中也发生了变化

依次观察以下目录:

可知这5个目录实现了同步,从而实现了不同tomcat的关联工程目录下文件共享。

说明:

       这是测试阶段实现的文件共享,当文件量很小时,可以实现nfs服务器目录,宿主机目录以及容器目录三者同步,然而具体的生产环境却不能实现这种同步,具体来说nfs服务器目录可以和宿主机目录同步,宿主机目录和容器内部目录使用目录挂载来同步,却无法直接同步nfs目录,当时nfs共享目录大小约20G.这个问题直到今天还是没能弄明白。具体的实现是在容器内部安装nfs客户端,直接在容器内部执行目录挂载到nfs服务器目录,而不经过宿主机目录中间同步,然而这种挂载方式也给以后的版本升级带来了极大的麻烦,umount命令有时不能立即解挂,删除容器会导致服务器目录也随之丢失。

具体在制作tomcat基础镜像时,进行nfs客户端的安装以及打包:

Tomcat7-NFS基本镜像制作

利用ubuntu镜像,制作tomcat7镜像,安装jdk,vim,nfs等基本功能,便于web应用的部署和管理

寻找ubuntu镜像

docker search ubuntu

拉取ubuntu官方镜像

docker pull ubuntu

新建software目录,准备jdk1.7和tomcat7

mkdir /home/azuresuer/software/

jdk-7u79-linux-x64.tar.gz

apache-tomcat-7.0.75.tar.gz

制作tomcat7-nfs镜像

docker run –i –t –v

/home/azureuser/software/:/data/software/

–name tomcat7-nfs 

ubuntu /bin/bash

cd /data/software主机文件已经挂载到容器/data/software/目录下:

安装jdk和tomcat:

tar -zxvf jdk-7u79-linux-x64.tar.gz -C /data/

mv jdk1.7.0_79  jdk

tar apache-tomcat-7.0.75.tar.gz -C /data/

mv apache-tomcat-7.0.75  tomcat

配置环境变量:

vi /etc/profile

#set java environment   

export JAVA_HOME=/data/jdk  

export JRE_HOME=${JAVA_HOME}/jre  

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  

export PATH=${JAVA_HOME}/bin:$PATH 

export CATALINA_HOME=/data/tomcat 

export CATALINA_BASE=/data/tomcat

保存并退出,设置立即生效

source /etc/profile

编写启动脚本

vi /data/start.sh

#!/bin/bash

# Export environment variable

source /etc/profile

# Start tomcat

bash /data/tomcat/bin/catalina.sh run

添加可执行权限

chmod u+x /data/start.sh

修改/data/tomcat/conf/server.xml ,使tomcat URI支持utf8编码。

<Connector

port="8080"

URIEncoding="UTF-8"

redirectPort="8443"

protocol="HTTP/1.1"

connectionTimeout="20000"/>

编辑/data/tomcat/bin/catalina.sh,依据内存大小,修改JVM等参数。

JAVA_OPTS="

-Xms1024m

-Xmx1024m

-XX:PermSize=1024M

-XX:MaxPermSize=1024m

-XX:+HeapDumpOnOutOfMemoryError

    -Duser.timezone=GMT+08"

升级源索引

apt-get update

安装vim

apt-get install vim

安装nfs,用于文件挂载

apt-get install nfs-common

保存设置,为新镜像 tomcat7-nfs

docker commit tomcat7-nfs tomcat7-nfs

修改标签,便于与私有仓库进行传递

docker tag tomcat7-nfs 192.168.0.101:5000/tomcat7-nfs:v1

把该镜像push到私有仓库,便于其余docker节点pull使用

docker push 192.168.0.101:5000/tomcat7-nfs:v1

查看push结果:

curl http://192.168.0.101:5000/v2/_catalog

{"repositories":["tomcat7-nfs"]}

制作tomcat7-nfs-uft8镜像,支持容器本身编码utf-8,防止访问图片等资源时中文乱码,用于管理后台tomcat镜像的基本制作。

编辑/home/azureuser/docker-build/Dockerfile

FROM tomcat7-nfs:lastest

ENV LANG C.UTF-8

ENV LC_ALL C.UTF-8

#RUN apt-get install tomcat7

CMD ["/data/start.sh"]

依据dockerfile文件创建新镜像

docker build –t tomcat7-nfs-utf8:v1 .

修改标签,便于执行push到私有仓库

docker tag tomcat7-nfs-utf8:v1 192.168.0.101:5000/tomcat7-nfs-utf8:v1

push该镜像到私有仓库

docker push 192.168.0.101:5000/tomcat7-nfs-utf8:v1

 

给TA打赏
共{{data.count}}人
人已打赏
安全经验

3天学会Jenkins_3_Jenkins Github&Gitlab集成之安装Git插件

2021-10-11 16:36:11

安全经验

安全咨询服务

2022-1-12 14:11:49

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索