1.拉取tomcat镜像
docker pull tomcat # 获取tomcat 镜像
2.启动tomcat 容器 (仅用来复制配置文件,复制完即删除此容器)
docker run --name tomcat9 -d -p 8080:8080 tomcat #--name 别名
3.复制tomcat 配置文件到宿主机
docker cp tomcat9 ://usr/local/docker/tomcat9/conf /usr/local/tomcat/conf
docker cp tomcat9 : /usr/local/docker/tomcat9/webapps /usr/local/tomcat/webapps
docker cp tomcat9 :/usr/local/docker/tomcat9/logs /usr/local/tomcat/logs
docker cp:/opt/upload:/opt/upload #这个是把容器的目录复制到宿主机用于文件上传
4、移除容器
docker rm -f tomcat9
5、挂载tomcat9文件到宿主机
docker run -d --name tomcat9 -p 8080:8080 -v /usr/local/docker/tomcat9/conf:/usr/local/tomcat/conf -v /usr/local/docker/tomcat9/webapps:/usr/local/tomcat/webapps -v /usr/local/docker/tomcat9/logs/:/usr/local/tomcat/logs -v /opt/upload:/opt/upload --privileged=true --restart=always tomcat:9
#--name 给你启动的容器起个名字,以后可以使用这个名字启动或者停止容器
#-p 映射端口,将docker宿主机的8080端口和容器的8080口进行绑定
#-v 挂载文件用的,第一个-v 表示将你本地的nginx.conf覆盖你要起启动的容器的nginx.conf文件
#第二个表示将日志文件进行挂载,就是把nginx服务器的日志写到你docker宿主机的/root/docker/nginx/log/下面
#第三个-v 表示的和第一个-v意思一样的。
#-d 表示启动的是哪个镜像
6、查看docker 容器是否启动成功 有出现端口说明成功
docker ps -a
7、测试
使用curl测试端口号,通过ps 可以查出运行状态以及端口号,测试即可。可以发现出现页面404,说明可以访问了,只是路径出现问题
由于404,肯定是页面出现问题,所以就进去webapps下找
进入正在运行的tomcat9.0容器
docker exec -it tomcat9.0 /bin/bash
进入后可以发现两个重要的webapps以及webapps.dist
在自己tomcat可以发现,下面的东西时全部存在webapps文件夹下的,
点开webapps时发现为空
原来这个tomcat是被docker给阉割了,就是将原本属于webapps下面的全部东西放入到webapps.dist文件下面了
接下来就好办了,可以cp赋值过去,也可以rm移动过去,当然还可以直接删除webapps文件,再将webapps.dist重命名为webapps。这里选择复制
再切换到webapps,就能发现里面有东西了
完成以上步骤,就可以进行最终的测试了
可能需要30s左右,我们就能在浏览器上访问了。一定要用这个外网ip,而不是宿主机ip
部署web 应用
上传方法
import com.alibaba.fastjson.JSONObject;
import com.asiainfo.adshare.aop.LoginControllerChecking;
import com.asiainfo.adshare.enums.IndexType;
import com.asiainfo.adshare.util.FileUtils;
import com.asiainfo.adshare.utils.Result;
import lombok.extern.log4j.Log4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
/***
* 图片上传到阿里云
*/+
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public Result upload(@RequestParam("file") MultipartFile file) throws IOException {
if (file != null) {
String s = uploadFileALIYUN(file);
return Result.ok(s);
}
return Result.ok("文件不存在");
}
public static String uploadFileALIYUN(MultipartFile file) throws IOException {
// 获取文件名
String fileName = file.getOriginalFilename();
// 获取文件的后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
// 解决中文问题,liunx下中文路径,图片显示问题
fileName = UUID.randomUUID().toString().replace("-", "") + suffixName;
// 返回客户端 文件地址 URL
String url = "/upload/" + fileName;
// String url = "localhost:8090"+"/upload/" + fileName;
// File dest = new File("E:\\upload\\" + fileName);
//阿里云部署
File dest = new File("/opt/upload/" + fileName);
// File dest = new File(ApiConstant.DEV_UPLOAD_PATH + fileName);
// 检测是否存在目录
// log.info("sss===>{}",dest.getParentFile().exists());
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
file.transferTo(dest);
// return new ResultBuilder<>().setData(MapUtil.returnMap("url",url)).build();
log.info(url);
return url;
}
下载图片配置
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyPicConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/upload/**").addResourceLocations("file:/opt/upload/");
//registry.addResourceHandler("/upload/**").addResourceLocations("file:D:/upload/");
}
}
注意 注意 注意
1.阿里云的端口对应的端口一定要放开
2.宿主机可以现创建挂载路径