docker 部署web项目

修改docker容器的hosts
例如: --add-host puppetmaster:192.168.0.3 ,如果想添加多条,就用多个--add-host就OK了

在系统根目录创建文件夹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

猜你喜欢

转载自tomhat.iteye.com/blog/2281726