Docker实战部署JavaWeb项目-基于SpringBoot
最近在滴滴云上看到服务器很便宜,1核2G,1年只需要68块钱。下面是我基于Docker部署Javaweb服务的过程。目前我见过的最便宜的服务器,阿里云打折的时候都没有这么便宜啊,果断入手。有需要的话可以通过下面链接购买。
滴滴云全线标准型云服务器限时特惠,新购云服务包1个月5折,包3个月4折,包6个月低至3折。注册即送2200元新手大礼包,速度上车。点击查看:https://i.didiyun.com/280pWTzUktG
Java项目说明
Java项目是基于SpringBoot,使用Maven构建的项目,就是普通的springbtoo的web项目,不需要什么特别的配置。
包括了配置nginx请求和ssl证书。
域名是在阿里云申请的,证书也是在阿里云申请的,服务器是在滴滴云购买的。
安装docker
安装并配置权限
- 在使用普通用户操作docker的时候会报错,每次都需要切root用户,实在是麻烦,所以这里设置一下权限,使得普通用户就可以使用docker,原理就是将当前的用户添加到docker组,然后刷新一下权限,再重启一下docker就可以使用。
# 安装docker
sudo apt-get install docker.io
# 查看权限问题
ll /var/run/docker.sock
# 将当前用户添加到docker组中
sudo usermod -aG docker ${USER}
# 更新docker组
sudo newgrp docker
# 重启服务,然后重新登录下用户即可
sudo systemctl restart docker
设置镜像阿里云加速
- 这个可以根据需要配置,不配置不会影响,配置了阿里云的镜像,下载镜像(docker pull)的时候会更快。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://d3jht7al.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
基于mysql创建docker容器
- 进入Mysql容器的时候需要注意加上参数LANG=C.UTF-8,否则在查询数据的时候会出现乱码。
docker pull mysql
# 创建基于mysql的docker容器,密码默认为password
docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 -d mysql:5.7
# 进入Mysql容器
docker exec -it mysql env LANG=C.UTF-8 /bin/bash
# 进入mysql控制台
mysql -uroot -ppassword
基于maven创建docker容器
- 创建容器的时候记得加上--rm参数,这样在maven构建项目之后会自动删除该容器,不会占空间,构建完后根本不需要这个容器了。
docker pull maven
# 创建路径,存在java项目
mkdir -p $HOME/projects
# 项目所在目录 /home/dc2-user/projects/x-lidaoyuan
# 创建数据卷,用于共享maven数据
docker volume create --name maven-repo
# 查看数据卷
docker volume ls
# 创建基于maven的容器,使用数据卷maven-repo,编译项目,在项目目录下生成jar包
docker run -it --rm --name my-maven -v maven-repo:/root/.m2 -v "$HOME/projects/x-lidaoyuan":/usr/src/mymaven -w /usr/src/mymaven maven:3.6.3-jdk-8 mvn clean package
基于Java创建docker容器
- 说明一下我的java项目的端口号是7878,容器的对外开放端口也需要设置为7878。
- java命令启动项目的时候,记得在最后面加上&符号,使得项目可以在后台运行。
docker pull java:8
# 创建容器,端口设置为7878
docker run -it --name liaoliaoba -p 7878:7878 -v "$HOME/projects":/root/projects java:8
# 进入容器(首次创建会自动进入,不需要这行命令)
docker exec -it liaoliaoba env LANG=C.UTF-8 /bin/bash
# 并启动项目
java -Dfile.encoding=UTF-8 -jar /root/liaoliaoba/liaoliaoba-api/target/liaoliaoba-api-0.0.1-SNAPSHOT.jar &
基于nginx创建docker容器
- 我的所有配置都是放在项目目录liaoliaoba/config下面
- 监听http的80端口和https的443端口
docker pull nginx
# 创建基于nginx的docker容器,conf.d目录下放置的是配置文件
docker run -it --name nginx -p 80:80 -p 443:443 -v "$HOME/projects/x-lidaoyuan/x-liaoliaoba/config/nginx/html":/usr/share/nginx/html -v "$HOME/projects/x-lidaoyuan/x-liaoliaoba/config/nginx/conf.d":/etc/nginx/conf.d -v "$HOME/projects/x-lidaoyuan/x-liaoliaoba/config/nginx/cert":/etc/nginx/cert -d nginx
conf.d下的配置文件
文件llba.xxx.top-ssl.conf
- 端口号7878是我java项目的启动端口,这个端口也需要在java容器中开启,通过该端口访问到java项目
- 172.17.0.3为java容器的内部ip地址,通过
docker inspect liaoliaoba可以查看到该IP地址 - .pem和.key这个两个证书是通过阿里云申请的免费的证书,有效期只有一年
- 其他的配置基本都是默认的
upstream tomcat_llba {
server 172.17.0.3:7878;
}
server {
listen 443 ssl;
server_name llba.xxx.top;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
ssl_certificate /etc/nginx/cert/3320062_llba.xxx.top.pem; #将domain name.pem替换成您证书的文件名。
ssl_certificate_key /etc/nginx/cert/3320062_llba.xxx.top.key; #将domain name.key替换成您证书的密钥文件名。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用该协议进行配置。
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /llba/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_llba;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# 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;
#}
}
创建基于Redis的Docker容器
docker pull redis
docker run -itd --name redis -p 6379:6379 redis
最后整理脚本
- 说明一下,通过git拉取项目的时候可以配置一下密钥,这样每次拉取的时候就不需要每次输入用户名和密码了。
创建Java程序启动脚本start.sh
java -Dfile.encoding=UTF-8 -Duser.timezone=GMT+08 -jar /root/projects/x-lidaoyuan/x-liaoliaoba/target/x-liaoliaoba-1.0.0-SNAPSHOT.jar &
创建Java程序停止stop.sh
kill `jps -l | grep x-liaoliaoba | awk '{print $1}'`
重启脚本restart.sh
/root/stop.sh
/root/start.sh
在宿主机创建公私钥
# 连续回车三次,就剩生成公私钥,然后将公钥`id_rsa.pub`放在GitHub上。
ssh-keygen -t rsa -C "example@163.com"
git config --global user.name "examplePC"
git config --global user.email "example@163.com"
# 查看配置是否生效
git config -l
宿主机脚本into_liaoliaoba.sh
# 切换到目录下
cd /home/dc2-user/projects/liaoliaoba
# 拉取镜像
git pull
# 构建项目
docker run -it --rm --name my-maven -v maven-repo:/root/.m2 -v "$HOME/projects/x-lidaoyuan":/usr/src/mymaven -w /usr/src/mymaven maven:3.6.3-jdk-8 mvn clean package
# 进入java容器,并重启项目
docker exec -it liaoliaoba env LANG=C.UTF-8 /bin/bash
如果喜欢的话可以关注下个人公众号

Docker实战部署JavaWeb项目-基于SpringBoot的更多相关文章
- docker实战部署Javaweb项目
一.部署环境说明 docker服务版本:version 18.09.0nginx服务版本:version: nginx/1.15.10redis服务版本:version: redis/5.0.3tom ...
- ubuntu16.04环境下在docker上部署javaweb项目简单案例
因为一些原因,接触到了docker,经过一番研究,总算是有了一些自己的看法,有什么不对的地方,希望多多指教. 废话不多说,首先我这里使用的虚拟机安装的是ubuntu16.04版本,其他版本应该也可以. ...
- 记基于docker+gunicorn部署sanic项目遇到的很多很多坑
前言: 最近有个项目需要上线,是python中sanic网络异步框架写的,并且要求使用docker+nginx来部署项目实现负载均衡,于是乎百度了sanic项目部署,基本上都是基于docker+gun ...
- docker自动化部署前端项目实战一
docker自动化部署前端项目实战一 本文适用于个人项目,如博客.静态文档,不涉及后台数据交互,以部署文档为例. 思路 利用服务器node脚本,监听github仓库webhook push事件触发po ...
- Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包
Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包 >>>>>>>>>>>& ...
- redhat7学习笔记之从零到部署javaweb项目
REDHAT7学习笔记 1. 安装vmware10 安装过程略,下载地址:链接: https://pan.baidu.com/s/16odKKkRYBxGWDVo1cz_wxA 注意,10以上版本不在 ...
- centos7+tomcat部署JavaWeb项目超详细步骤
我们平时访问的网站大多都是发布在云服务器上的,比如阿里云.腾讯云等.对于新手,尤其是没有接触过linux系统的人而言是比较有困难的,而且至今使用云服务器也是有成本的,很多时候我们可以通过虚拟机自己搭建 ...
- centos7部署JavaWeb项目
centos7部署JavaWeb项目共有三步 1.配置java环境 2.配置tomcat环境. 3.部署JavaWeb项目 一.配置java环境 1.1安装java 参考我的另一篇博文:https:/ ...
- 【转载】centos7+tomcat部署JavaWeb项目超详细步骤
我们平时访问的网站大多都是发布在云服务器上的,比如阿里云.腾讯云等.对于新手,尤其是没有接触过linux系统的人而言是比较有困难的,而且至今使用云服务器也是有成本的,很多时候我们可以通过虚拟机自己搭建 ...
随机推荐
- python day02练习和作业
# 1.请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li=[‘alex’, ‘eric’, ‘rain’]# li=['alex','eric','rain']# print('_'.jo ...
- C语言的体系结构--main函数存在的必然性(听杨力祥老师的课)
注:不是原创,课堂上听来的,防止遗忘,所以记下来! C语言包括两个部分:数据和函数,当然最终这两个部分都是要进入到计算机的内存中去. 函数在编译后生成可执行代码,存放在代码区:数据分为几种:局部与全局 ...
- 教你5分钟做个手机APP[视频]
天天宅在家里,没什么事做,录个教学视频吧! 发到了视频网站上去根本没人看,伤心ing啊! 不知cnblogs上面是否让我发! 先上一张效果图看看哈: 如果播放不正常请点这里:https://www.b ...
- HYSBZ_1854_并查集
http://www.lydsy.com/JudgeOnline/problem.php?id=1854 每次判断每组两个数的根,若不等,则小的遍历1,大的为根,若相等,则说明前面的小的都遍历过,根遍 ...
- HDU6446 Tree and Permutation(树、推公式)
题意: 给一棵N个点的树,对应于一个长为N的全排列,对于排列的每个相邻数字a和b,他们的贡献是对应树上顶点a和b的路径长,求所有排列的贡献和 思路: 对每一条边,边左边有x个点,右边有y个点,x+y= ...
- 批处理(BAT) Ping监控, 结果记录入日志文件
::执行效果 @echo off ::等待用户输入需要监控IP set /p ip=Input the IP required to monitor: echo executing...... :st ...
- num10---适配器模式
1.类适配器 Adapter类,通过继承 被适配的类,实现目标类的接口,完成适配. 分析: java 单继承,所以适配器类 需要继承 被适配类,这就要求目标类必须是接口,有一定局限性. 被适配类的方法 ...
- Apache 日志记录相关设置
小编最近在配置Apache 服务器啊 就把遇到的信息给记录下来 Apache 自动生成的日志会给系统带来很大的损耗.关闭日志以后,甚至最高可以提高整体性能近40%(粗略估计) 那么如何关闭日志呢? 可 ...
- k8s系列---dns部署
1:首先创建kube-dns和dnsmasq这两个yaml,然后生成相应的pod.svc等. 2:然后在去创建其他的验证pod和svc 3:验证nslookup解析的是其他pod的svc的name,而 ...
- ZYNQ入门实例——三种GPIO应用、中断系统及软硬件交叉触发调试
一.前言 Xlinx的ZYNQ系列SOC集成了APU.各种专用外设资源和传统的FPGA逻辑,为ARM+FPGA的应用提供助力,降低功耗和硬件设计难度的同时极大提高两者间传输的带宽.之前在研究生课题中使 ...