在系统根目录创建文件夹app
root@tomhat:/home/tomhat#cd / \
root@tomhat: mkdir app
以www.china-ops.com网站为基础做列
在app下创建文件夹china-ops.com已做不同项目的区分
在china-ops.com内创建文件及文件夹,目录结构如下:
root@tomhat:/app/docker/china-ops.com# tree
.
├── assist
│ ├── jdbc.properties
│ └── start.sh
├── build.sh
├── chinaops.sql
├── Dockerfile
├── ecloud.war
说明:
[list]
[*] #build.sh 为启动docker容器的脚本
[*] #Dockerfile为创建docker容器的过程
[*] #assist/jdbc.properties 为www.china-ops.com项目启动时数据库的链接配置; 注意:此文件名称要和项目中数据链接配置文件名称相同
[*] #assist/start.sh 为docker容器启动后执行tomcat的执行脚本
[*] #ecloud.war 是项目的war包 chinaops.sql 是项目所需的数据库sql
[/list]
下面我们以启动项目的顺序来编写文件
1、build.sh
#!/bin/bash
REPOSITORY='registry.ecloud.com.cn'
NAME=china-ops
VERSION=1.0
docker build -t $REPOSITORY/$NAME:$VERSION .
#赋权build.sh
root@tomhat:/app/china-ops.com# chmod 777 build.sh | chmod +x build.sh
2、Dockerfile
#!/bin/sh
FROM registry.ecloud.com.cn/tomcat:7.0.62
MAINTAINER 维护者信息
#设置环境变量 ENV命令 DIR_WEBAPP变量名 /usr/local/tomcat/webapps变量的值
ENV DIR_WEBAPP /usr/local/tomcat/webapps
ENV DB_CONFIG_FILE jdbc.properties
#删除webapps下所有文件
RUN rm -rf $DIR_WEBAPP/*
#在webapps下添加ecloud.war并改名ROOT.war
ADD ecloud.war $DIR_WEBAPP/ROOT.war
#解压webapps下的ROOT.war到ROOT目录下
RUN unzip $DIR_WEBAPP/ROOT.war -d $DIR_WEBAPP/ROOT/
#拷贝assist下的jdbc.properties、start.sh文件到/home/目录下
#注意: COPY命令前面的参数是源地址(相对地址) 后面参数是目的地址(绝对地址)
COPY assist/ /home/
#执行/home/start.sh
ENTRYPOINT '/home/start.sh'
3、start.sh
#!/bin/bash
#设置变量:数据库所在主机的(DB_HOST)ip,(DB_NAME)数据库名,(DB_USER)用户名,(DB_PASS)密码;
#注意:配置的用户名和密码必须有远程访问数据库的权限
DB_HOST=${DB_HOST:-"172.17.0.1"}
DB_NAME=${DB_NAME:-"chinaops"}
DB_USER=${DB_USER:-"root"}
DB_PASS=${DB_PASS:-"root"}
# is a mysql database linked?
# requires that the mysql containers have exposed
# port 3306 .
if [ -n "${MYSQL_PORT_3306_TCP_ADDR}" ]; then
DB_HOST=${DB_HOST:-${MYSQL_PORT_3306_TCP_ADDR}}
DB_PORT=${DB_PORT:-${MYSQL_PORT_3306_TCP_PORT}}
[i] # support for linked sameersbn/mysql image[/i]
DB_USER=${DB_USER:-${MYSQL_ENV_DB_USER}}
DB_PASS=${DB_PASS:-${MYSQL_ENV_DB_PASS}}
DB_NAME=${DB_NAME:-${MYSQL_ENV_DB_NAME}}
fi
if [ -z "${DB_HOST}" ]; then
echo "ERROR: "
echo " Please configure the database connection."
echo " Cannot continue without a database. Aborting..."
exit 1
fi
#以上是验证数据库主机的过程
#下面拷贝/home/jdbc.properties到$DIR_WEBAPP/ROOT/WEB-INF/classes/ 替换原来项目中的数据库配置文件
cp /home/$DB_CONFIG_FILE $DIR_WEBAPP/ROOT/WEB-INF/classes/
#下面是用上面定义好的数据库所在主机的(DB_HOST)ip,(DB_NAME)数据库名,(DB_USER)用户名,(DB_PASS)密码
sed 's/{{DB_HOST}}/'"${DB_HOST}"'/' -i $DIR_WEBAPP/ROOT/WEB-INF/classes/$DB_CONFIG_FILE
sed 's/{{DB_NAME}}/'"${DB_NAME}"'/' -i $DIR_WEBAPP/ROOT/WEB-INF/classes/$DB_CONFIG_FILE
sed 's/{{DB_USER}}/'"${DB_USER}"'/' -i $DIR_WEBAPP/ROOT/WEB-INF/classes/$DB_CONFIG_FILE
sed 's/{{DB_PASS}}/'"${DB_PASS}"'/' -i $DIR_WEBAPP/ROOT/WEB-INF/classes/$DB_CONFIG_FILE
#执行运行tomcat的脚本
exec /usr/local/tomcat/bin/catalina.sh run
#赋权start.sh
root@tomhat:/app/china-ops.com/assist# chmod 777 start.sh | chmod +x start.sh
4、jdbc.properties
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://{{DB_HOST}}:3306/{{DB_NAME}}?useUnicode=true&characterEncoding=utf-8
jdbc.username={{DB_USER}}
jdbc.password={{DB_PASS}}
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=false
#注意:{{DB_HOST}} 等变量必须和start.sh文件中最后替换的变量一致
5、执行build.sh
root@tomhat:/app/china-ops.com# ./build.sh
6、启动容器
sudo docker run -i -t -p 8080:8080 china-ops:1.0.1 /bin/bash