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下工程目录便实现了共享。
二. 具体操作:
- 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
- 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