由于是单机测试,没有测试多主机的跨网络分布式请求。

项目是前后分离的,所以使用nginx作为前端服务器,后端是springboot则直接基于java8环境的容器上跑,cache用的redis,mysql单独运行一个容器不在docker-compose里面。

大概的架构图如上面所示。

没有打包过springboot也没有用docker部署过,有问题找官网。https://spring.io/guides/gs/spring-boot-docker/

按照官网给出的指南,很快就写一个Dockerfile和创建一个项目的容器。

下面是docker-compose的内容和Dockerfile的内容:

Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY myapp.jar app.jar
ENTRYPOINT [ "java","-agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar" ]

docker-compose.yml:

version: '2'
services:
proxy:
image: nginx:1.16.1
ports:
- 80:80
- 443:443
privileged: true
restart: always
networks:
webapp:
ipv4_address: 172.16.238.10
volumes:
- /opt/acme/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /opt/acme/nginx/conf/keys:/etc/nginx/keys
- /opt/acme/nginx/conf/conf.d:/etc/nginx/conf.d
- /opt/acme/nginx/www:/usr/share/nginx/html
- /opt/acme/nginx/logs:/var/log/nginx
cache:
image: redis:5.0
privileged: true
restart: always
networks:
webapp:
ipv4_address: 172.16.238.12
ports:
- 6379:6379
volumes:
- /opt/acme/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /opt/acme/redis/data:/data
cms:
build: .
restart: always
networks:
webapp:
ipv4_address: 172.16.238.13
ports:
- 8888:8888
- 8889:8889
- 8000:8000 #use for debug
networks:
webapp:
driver: bridge
ipam:
config:
- subnet: 172.16.238.0/24
gateway: 172.16.238.1

一看好像挺和谐的。问题出现在我的项目需要用到一个验证码,需要用rt包生成,不知道openjdk和sunjdk的区别在哪里,但是如果类似上面的Dockerfile跑目前的项目是出不来验证码图片。

后来添加了jvm运行调试参数,远程调试才知道验证码出来了就是不显示图片。

后来的Dockerfile换成了:

FROM java:8
VOLUME /tmp
COPY myapp.jar app.jar
ENTRYPOINT [ "java","-agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar" ]

可能到处都是知识盲区,导致只知道这样可以。具体是什么原因却不知道。

这样前端nginx直接使用容器名访问后端即可。下面是nginx的default.conf

server {
listen ;
server_name localhost; #charset koi8-r;
#access_log /var/log/nginx/host.access.log main; location / {
root /usr/share/nginx/html/dist;
index index.html index.htm;
} location /platform-plus{
proxy_pass http://cms:/platform-admin;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
#error_page /.html; # redirect server error pages to the static page /50x.html
#
error_page /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
} # proxy the PHP scripts to Apache listening on 127.0.0.1:
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

后端需要访问数据库的话就直接把mysql加入到当前网络

docker network connect acme_webapp mysql

因为docker-compose会自动添加当前文件夹的名字来当做是项目?所以最好先看清楚网络名称再加入进来

然后直接使用容器名访问即可,如:

本来是一次很简单的部署,最后因为一个验证码搞了一整天。

使用docker-compose部署springboot项目的更多相关文章

  1. mac和linux下使用Docker,部署SpringBoot项目到docker

    主要是看一下如何在linux及mac上安装docker,创建docker镜像,部署SpringBoot项目到docker,并借助于DaoCloud进行docker镜像下载加速等. 我用的电脑是mac, ...

  2. Docker下部署springboot项目

    1.背景 如何在docker容器环境下部署一个springboot项目? 2.具体步骤 第一步:准备一个springboot项目的xxxx.jar包 jar包中用于测试的一个接口如下 第二步:编写Do ...

  3. docker Compose 部署springboot+vue前端端分离项目

    温馨提示:如果有自己的服务器最好不过了,这样部署网项目就可以上线了.没有的话,只能使用localhost 本机访问啦,记得替换 ngixn 中的ip地址.域名为localhost. (一) 准备工作 ...

  4. Gitlab-runner+Docker自动部署SpringBoot项目

    本文基于Gitlab CI/CD及Docker快速实现项目的自动部署. 注意:本文较长,浏览需要12分钟左右. 1.环境要求 以下服务器的操作系统均为Centos7 服务器A:Gitlab 服务器B: ...

  5. 使用Docker Compose部署SpringCloud项目docker-compose.yml文件示例

    注意各组件之间的依赖关系 microservice-discovery-eureka: image: reg.itmuch.com/microservice-discovery-eureka port ...

  6. docker部署springboot项目

    本文介绍一下docker如何部署springboot项目. 前提条件: 1.可以运行jar包的环境 2.机器上已经安装了docker 3.准备部署的springboot的jar包 4.Dockerfi ...

  7. Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  8. docker中部署django项目~~Dockfile方式和compose方式

    1.  背景:   本机win10上,后端django框架代码与前端vue框架代码联调通过. 2.  目的:   在centos7系统服务器上使用docker容器部署该项目. 3.  方案一:仅使用基 ...

  9. Docker快速上手之部署SpringBoot项目

    Docker是基于Go语言实现的云开源项目. Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装.分发.部署.运行等生命周期 ...

  10. Docker Compose 部署前后端分离应用

    部署前后端分离应用 容器化 Abp 应用 关于 Abp 应用的容器化,其实和普通的 ASP.NET Core 应用差不多,大家可以参考我此前的文章. 唯一需要注意的是:因为 Abp 解决方案中有多个项 ...

随机推荐

  1. Dockerfile制作镜像

    Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像, 另外,使用Dockerfile去构建镜像好比使用pom去构建m ...

  2. 如何开启MySQL慢查询日志

    一.开启慢查询日志首先需要了解四个参数: slow_query_log # 是否开启慢查询日志,默认OFF,开启则设置为 ON. slow_query_log_file # 慢查询日志文件存储位置. ...

  3. 深度好文:PHP写时拷贝与垃圾回收机制(转)

    原文地址:http://www.php100.com/9/20/87255.html 写入拷贝(Copy-on-write,简称COW)是一种计算机程序设计领域的优化策略.其核心思想是,如果有多个调用 ...

  4. Flask 教程 第十章:邮件支持

    本文翻译自The Flask Mega-Tutorial Part X: Email Support 这是Flask Mega-Tutorial系列的第十部分,在其中我将告诉你,应用如何向你的用户发送 ...

  5. 基于Maven 的 Spring MVC

    Spring MVC 他是基于MVC的设计模式做出来的,他是Spring对Servlet的进一步的封装 MVC:Model  View  Controller 如何使用Spring MVC?(Spri ...

  6. Windows下Kafka 2.3.0的下载和安装

    Kafka是由Apache软件基金会开发的一个开源流处理平台,是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据. 特性:(1)通过O(1)的磁盘数据结构提供消息的持久化 ...

  7. SecureCRT 破解安装详细教程

    SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序  跟xshell类似. 一.下载文件软件包和破解文件(64版本),我已经放在百度云,链接:https://pan.baidu.c ...

  8. python检查字典元素是否存在类似php中isset()方法

    PHP中isset()方法来检查数组元素是否存在,在Python中无对应函数,在Python中一般可以通过异常来处理数组元素不存在的情况,而无须事先检查 Python的编程理念是“包容错误”而不是“严 ...

  9. 正则表达式(Regular Expression)入门

    一.正则表达式的使用场景: 上传文件类型的判断,电子邮件的判断,电话号码的判断,文本的搜索与替换. 二.正则表达式的语法规则: 1.行定位符: ^表示行的开始,$表示行的结尾 ^tm 可以匹配  tm ...

  10. 《推送开发全面盘点当前Android后台保活方案的真实运行效果》

        登录 立即注册 TCP/IP详解 资讯 动态 社区 技术精选 首页   即时通讯网›专项技术区›推送开发全面盘点当前Android后台保活方案的真实运行效果(截止2 ...   帖子 打赏 分 ...