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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云服务器怎么样?谈谈阿里云服务器的使用感受
阿里云服务器怎么样是网络上经常问到的问题,我使用ECS云服务器也有几年时间了,经常听到朋友抱怨说不知道如何选择云服务器?有选择就有比较,阿里云在国内云计算市场的占有率是第一名的,针对不同领域也有成熟的云计算解决方案,下面说下使用阿里云服务器的感受。 一、飞天架构 ECS云服务器基于飞天系统的底层架构,飞天(Apsara)是阿里云自主研发的底层系统。 阿里云使用的飞天架构,多年来承受住了火车购票的高峰压力、双11、双12的抢购压力,而你购买的ECS云服务器与天猫、支付宝使用的为同一架构。阿里云能够抗住双十一,就能抗住你的业务。 二、CPU 阿里云服务器的CPU不会超卖,保证了服务器的稳定运行。 阿里云突发性能t5实例的特点是价格便宜,而且限制CPU使用率(因为限制使用率所以便宜)。t5实例适合哪些用户呢?适合长期CPU使用率低于20%的用户,据统计在实际使用中,这样的用户很多。所使用的云服务器CPU平时处于大量资源剩余的状态,这是阿里云推出突发性能t5实例的原因。节约服务器资源就是节约了电能,节约成本。对于CPU使用率偶尔超过20%的情况,可以开启无性能约束功能。而对云服务器性能要求较高...
- 下一篇
阿里云服务器安全组问题及解决方法汇总
阿里云服务器的安全组类似于一个服务器级别的防火墙,可以有效保护服务器不受恶意侵入。同时因为对安全组的了解不够,这方面也出现了很多操作上的问题,本文分享这类问题和解决办法。 1、安全组未设置任何自定义放行规则 添加安全组规则 阿里云ECS服务器新买的时候都没有配置安全规则,当你对服务器操作时可能会提示:“安全组未设置任何自定义放行规则,会导致无法访问实例端口,若需访问请添加安全组规则”,如何解决?去添加自定义安全组规则! 一般来讲,阿里云ECS服务器,需要添加安全组规则开启自定义端口,常见的端口为8080、8888、21等端口。 如何自定义安全组规则?如下图: 2、购买阿里云ECS云服务器会有提示“请确保此安全组开放包含 22(Linux)或者 3389(Windows)端口,否则无法远程登录ECS。”什么意思? 为了获取更高的安全性,阿里云服务器初始需要选择安全组,默认安全组会开放22号和3389号端口,这两个端口是用来远程登录ECS服务器的,如果默认没有打开则无法远程登录。 3、如何查看 22(Linux)或者 3389(Windows)端口已经开启? 请确保此安全组开放包含 22(...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Hadoop3单机部署,实现最简伪集群
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker快速安装Oracle11G,搭建oracle11g学习环境