NFS文件共享系统搭建

 

一. 整体结构示意:

docker run多个共享文件 docker共享文件系统_docker

如图所示:安装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

docker run多个共享文件 docker共享文件系统_docker run多个共享文件_02

docker run多个共享文件 docker共享文件系统_docker_03

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

mkdir /data/testfile/nfs

docker run多个共享文件 docker共享文件系统_tomcat_04

vim /etc/exports

docker run多个共享文件 docker共享文件系统_docker run多个共享文件_05

chmod –R 777 /data/testfile/nfs
#chmod –R 777 * :

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

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

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

docker run多个共享文件 docker共享文件系统_服务器_06

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

docker run多个共享文件 docker共享文件系统_tomcat_07

showmount -e

docker run多个共享文件 docker共享文件系统_服务器_08

 

2. 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

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

docker run多个共享文件 docker共享文件系统_docker run多个共享文件_09

 

启动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

docker run多个共享文件 docker共享文件系统_服务器_10

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

docker run多个共享文件 docker共享文件系统_tomcat_11

 

启动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

docker run多个共享文件 docker共享文件系统_docker run多个共享文件_12

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

docker run多个共享文件 docker共享文件系统_tomcat_13

 

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

docker run多个共享文件 docker共享文件系统_docker run多个共享文件_14

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

docker run多个共享文件 docker共享文件系统_docker run多个共享文件_15

依次观察以下目录:

docker run多个共享文件 docker共享文件系统_tomcat_16

可知这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