Docker-Mysql设置
docker pull mysql
docker run -d -p 3306:3306 -v /docker/mysql/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=LXY981203 --name mysql mysql
Docker-Tomcat设置
docker pull tomcat
docker run -d -p 8080:8080 --name tomcat -v /software/apache-tomcat-7.0.94/webapps:/usr/local/tomcat/webapps --link mysql:db --restart=always tomcat:7.0.94
Docker-Tomcat和Mysql连接
jdbc.url=jdbc:mysql://容器名:3306/数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
Docker-宿主机向容器复制文件
docker cp 宿主机目录 容器id:容器目录
//示例:
docker cp /software/apache-tomcat-7.0.94/conf/server.xml tomcat:/usr/local/tomcat/conf
docker cp /root/jssecacerts tomcat:/usr/local/openjdk-8/jre/lib/security
<Context path="/Apache/upload" docBase="/home/Images/Apache/upload" debug="0" reloadbale="true"/>
<Context path="/searchScoreByOldSystem/resources/score" docBase="/software/score" debug="0" reloadbale="true"/>
<Context path="/searchScoreByOldSystem/resources/verifyCode" docBase="/software/verifyCode" debug="0" reloadbale="true"/>
Docker-Redis
docker pull redis
docker run -p 6379:6379 -d redis:latest redis-server
Docker的坑
整体路径映射
在使用Docker开启tomcat时,使用
docker run -d -p 8080:8080 --name tomcat -v /software/apache-tomcat-7.0.94/webapps:/usr/local/tomcat/webapps --link mysql:db --restart=always tomcat:7.0.94
其中,/software/apache-tomcat-7.0.94/webapps:/usr/local/tomcat/webapp,是将本地的目录映射到容器中的对应目录,由此,可以部署好网站。
Apache文件路径映射
在访问文件路径的时候,发现 域名/项目名/xxxx 的格式访问时,就是访问到对应的文件夹目录,也就是说,我想访问项目的A目录,那么在项目里必须有一个A目录,而不是使用server.xml来映射,于是我修改了Apache的目录,把图片文件夹放进去,于是,访问某个路径,比如
那么在项目文件夹下必须有一个 /upload/item/user/product/46e0d845-b939-4e0d-84c3-bf43d0440ca5/2019042220260862173.jpg 结构。
于是
Apache的目录结构变成了这样。
searchScoreByOldSystem文件流
由于宿主机和容器之间必须有目录映射才能关联,运行在容器中的代码是无法访问宿主机上的文件的,但在运行时设置了/software/apache-tomcat-7.0.94/webapps:/usr/local/tomcat/webapps,于是在容器中操作webapps目录,也就相当于操作的是宿主机的webapps目录,我修改了程序的代码:
fileOutputStream = new FileOutputStream(new File("/usr/local/tomcat/webapps/searchScoreByOldSystem/resources/verifyCode/" + username + ".jpeg"));
将需要的验证码、成绩等图片输出在这个目录下,由于设置了目录映射,于是文件也就相应的保存到了宿主机的webapps目录。最后实现了获取验证码、成绩等操作。
如果不修改代码,则会提示找不到searchScoreByOldSystem/resources/verifyCode/这个目录,这是因为在容器中是没有这样一个路径的。
端口转发不成功
在阿里云的端口配置界面设置1/65535即可。