服务器Docker部署springboot项目
前言:之前项目重来没有用到过Docker部署,最近的一个项目需要,从头开始整一遍Docker,记录一下所踩的坑。
1.开防火墙
腾讯云服务器,买来没开防火墙,不知道要不要紧索性就开起来吧
# 查看防火墙状态
systemctl status firewalld.service# 开启防火墙
systemctl start firewalld.service# 查看开启端口号
firewall-cmd --list-ports# 永久开启一个8082的端口号
firewall-cmd --zone=public --add-port=8082/tcp --permanent# 重启防火墙
firewall-cmd --reload
2.更换22登录端口
云服务器刚买来就有好多其他IP的登录失败记录,虽然更换22端口治标不治本。其他方式大伙可自行百度
# 修改文件
vi /etc/ssh/sshd_config 改为#Port 22 Port 23456# 向防火墙中添加修改的端口
firewall-cmd --zone=public --add-port=23456/tcp --permanent# 防火墙重启
systemctl restart firewalld.service# 查看端口是否添加成功
firewall-cmd --zone=public --list-ports# 重启ssh服务
systemctl restart sshd.service# 防火墙中移除22端口
firewall-cmd --zone=public --remove-port=22/tcp --permanent # 防火墙重启
systemctl restart firewalld.service## 特别注意
## 云服务器有控制台,记得在控制台中开启23456端口,再尝试过23456端口可以登录后再移除22端口。
## 不然可能会向我一样,重置服务器又重新搞一遍
3.Docker安装
# 设置镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 下载docker
yum -y install docker-ce# 开启docker
systemctl start docker# 重启docker
systemctl restart docker
4.配置Docker的远程访问
这个是方便后面idea远程调用
vim /lib/systemd/system/docker.service
# 修改为
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock# 重启
systemctl daemon-reload
systemctl stop docker
systemctl start docker# 查看代理端口:显示2375就标识设置成功了
netstat -nlpt # 开启2375端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent# 重启防火墙
firewall-cmd --reload# 查看端口情况
firewall-cmd --zone=public --list-ports# 测试端口是否已开启:有返回值就表示开启成功了
curl http://公网IP:2375/version
5.Docker安装mysql、redis
## redis# 拉取镜像docker pull redis# 运行redisdocker run --name myredis -p 6379:6379 -d redis --appendonly yes# --name 起名# -p 6379:6379 表示把服务器6379端口映射到docker的6379端口。这样可以通过服务器的端口访问deocker的端口# -d 以后台服务形式运行redis# redis-service --appendonly yes 标识开启持久化缓存模式,可以存到硬盘## mysql# 拉取镜像docker pull mysql:5.7.27# 运行mysql 默认utf8docker run --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 mysql:5.7.27# 如果我们要保存utf8mb4的格式docker run --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 mysql:5.7.27 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
6.Docker安装Nginx
因为我的项目用到了Nginx的静态服务器特性,这一块踩了好多坑
docker pull nginx# 启动nginx
docker run --name mynginx -p 8083:80 -d nginx 在没改配置文件的时候,nginx默认端口是80,所以先对80接口# 启动完后可以访问公网IP:8083,弹出nginx页面就证明启动成功了# 创建挂载目录
mkdir -p /home/nginx/static/modules# 将正在运行的nginx中的文件映射到我们指定的位置
docker container cp mynginx:/etc/nginx/nginx.conf /home/nginx/
docker container cp mynginx:/etc/nginx/conf.d /home/nginx/
docker container cp mynginx:/var/log/nginx/ /home/nginx/log# 删除nginx
docker stop mynginx
docker rm mynginx## 删除了过后,我们就可以配置我们的nginx.conf配置啦
因为我要用静态服务器,文件要在/home/nginx/static/modules下,所以要在/home/nginx下的nginx.conf配置路径
## 在nginx.conf中的 keepalive_timeout 65;下添加
注意我在这里改了监听端口为8083!
server {listen 8083;#写内网端口,访问时用外网端口进行映射访问server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location /modules {proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 这里为什么要指到/home/static,是因为我们是挂载到docker中nginx的容器内部地址root /home/static;index index.html index.htm;}#location / {# proxy_set_header Host $host;# proxy_set_header X-Real-IP $remote_addr;# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# root /home/static/modules;# index index.html index.htm;#}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}
}
以上两种location作用都是一样的。如果你有图片或者是其他类型文件才能查看的限制可以添加
location ~ .*\.(gif|jpg|jpeg|png|html)$ { #这里可以自定义访问配置,比如:/static表示static目录下的所有文件expires 24h; root /home/static/;#指定图片存放路径 #access_log /home/static/logs/images.log;#图片 日志路径 proxy_store on; proxy_store_access user:rw group:rw all:rw; proxy_temp_path /home/static/;#代理临时路径proxy_redirect off; proxy_set_header Host 127.0.0.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 1280k; proxy_connect_timeout 900; proxy_send_timeout 900; proxy_read_timeout 900; proxy_buffer_size 40k; proxy_buffers 40 320k; proxy_busy_buffers_size 640k; proxy_temp_file_write_size 640k; if ( !-e $request_filename) { proxy_pass http://127.0.0.1:80;#代理访问地址,和上面的端口一致 }
}
设置好nginx.conf文件后,我们重启nginx挂在对应文件就行了
## 在上面我改了nginx.conf的listen端口为8083docker run -p 8083:8083 --name mynginx -v /home/nginx/static:/home/static -v /home/nginx/logs:/var/log/nginx -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/conf.d:/etc/nginx/conf.d -d nginx
现在就可通过公网IP:8083/文件名访问到文件了。
7.Docker部署项目
1.首先将项目打包好
2.服务器上建立一个文件夹,将jar包和Dockerfile文件放在一起
Docker文件
# java:8被openjdk:8取代了
FROM openjdk:8VOLUME /tmp# 这里对应上自己的jar包名,scenedeploy.jar这个名字为简称
ADD SceneDeploySystem-1.0.0.jar scenedeploy.jar# 改成scenedeploy.jar这个简称
RUN bash -c 'touch /scenedeploy.jar'# 开发端口
EXPOSE 8082# 改成scenedeploy.jar这个简称
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/scenedeploy.jar"]
然后服务器操作
## 进入当前文件夹
cd /home/sceneDemo## 创建Docker镜像
docker build -t scenedeploy .## 启动docker镜像
docker run -d scenedeploy --name myscene -p 8082:8082
8.解决8082服务访问不了的问题
在启动容器后你可能会访问不到服务,在docker ps的时候发现你明明设置了--name,但是就是对应不上;ports的那一栏只有8082/tcp,甚至可能什么都不显示。
这是因为你可能没开启ip转发设置
# 查看是否开启了ip转发,返回1时为开启了
sysctl net.ipv4.ip_forward# 修改配置文件
vim /etc/sysctl.conf
# 修改
net.ipv4.ip_forward = 1# 重启操作
sysctl -p /etc/sysctl.conf
systemctl restart network # 重启docker!!!我在重启docker这个坑上栽了两个小时
systemctl restart docker# 重启项目
docker run -d scenedeploy --name myscene -p 8082:8082# 注意:如果下一次启动项目时又对应不上ip了,可以再重启一下
sysctl -p /etc/sysctl.conf
systemctl restart network
9.idea连接docker
1.在对应目录下添加Dockerfile文件
2.pom中添加docker配置
<dockerHost>http://公网IP:2375</dockerHost>换成自己的公网IP,本地的话localhost就行
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><!--制作docker镜像的maven插件--><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.2.0</version><configuration><dockerHost>http://公网IP:2375</dockerHost><imageName>scenedeploy</imageName><!--镜像名,注意:这里的镜像名一定要小写,如果你的应用名字是大写会报错的--><dockerDirectory>./</dockerDirectory><!--Dockerfile所在的目录--><resources><resource><!--这里配置的就是打包后jar所在的位置--><targetPath>/</targetPath><directory>${project.build.directory}</directory><!--构建的class文件路径 一般是target--><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin></plugins></build>
需要注意的是,你打包出来的名字可能是XXX.0.0.1.jar,可能没有和Dockerfile文件对应
这里要修改为 Dockerfile 中所对应的
FROM openjdk:8
VOLUME /tmp
EXPOSE 8082
ADD SceneDeploySystem-1.0.0.jar scene.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/scene.jar"]
3.添加Docker插件
tcp://公网IP:2375
4.添加docker工程
5.点击docker:builder会创建项目镜像
6.运行docker镜像
搞定!撒花!
服务器Docker部署springboot项目相关推荐
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...
- Docker 部署SpringBoot项目不香吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:流星007 链接:toutiao.com/i68433912 ...
- 又到了上云时刻啦!!!阿里云 Docker部署SpringBoot项目 方便测试的部署方式
又到了上云时刻啦!!!阿里云 Docker部署SpringBoot项目 方便测试的部署方式 部署思路: 具体步骤: 1.打成jar 2.上传到服务器 3.启动JDK容器 4.进入JDK 容器 启动 项 ...
- 使用Docker部署SpringBoot项目(避坑+超级详细版本)
使用Docker部署SpringBoot项目(避坑+超级详细版本) 首先呢,非常感谢我们一起相遇在这个地方,想必此刻的你也是在一个学习求知的过程,我们一样,我们都是在求知的路上匍匐前进!看到这篇文章, ...
- docker 挂载目录_完美解决:Docker部署SpringBoot项目后图片无法访问和上传,3招搞定!...
以前使用FTP在Linux中使用java -jar xxx.jar部署SpringBoot项目时,由于在项目中指定了主机文件存放路径映射,可以直接访问服务器的文件. 但是最近入坑Docker,将Spr ...
- 使用IDEA集成docker部署springboot项目及bug解决并连同redis、MySQL
流程介绍 安装docker(windows) 配置docker源加速 docker安装redis IDEA集成docker # IDEA连接docker 配置springboot项目 打包成docke ...
- 史上最全阿里云服务器上Docker部署Springboot项目 实战 每一步都带详细图解!!!
在学习编程的时候,我们都会想,该怎么把自己写出来的项目和创意分享给大家勒.直接给代码吗?平常人看不懂,环境还需要一大堆. 那么部署到服务器上,让人能够直接访问,我想这应该是最棒的方式了吧. 使用Doc ...
- Jenkins+Pipeline+Docker部署SpringBoot项目到远程服务器
Jenkins部署 前言 Jenkins 安装 nginx配置 jenkins配置 Docker安装 项目部署 项目添加Dockerfile文件 Jenkins新建任务 使用Pipeline部署 结果 ...
- 就几条命令,一键学会Docker部署SpringBoot项目
今天,我们使用docker的安装方式,来安装一下我们的项目,实验环境是centos 7系统上,本实验适用部署大部分Springboot项目.文末有40分钟的视频教学哈! eblog项目地址: http ...
最新文章
- 第十六章 推荐系统-机器学习老师板书-斯坦福吴恩达教授
- Hibernate总结1
- C# 繁体,简体互转
- python报“IndentationError: unexpected indent“的解决方法
- tomcat修改端口号
- MVVM框架原理浅析
- 计算机访问共享打印机无权限访问,Windows10电脑系统共享打印机无访问权限?详细解决步骤...
- 为什么我的淘宝店铺动态评分清零了?
- The nodejs-legacy package simply installs a symbolic link so that it can be executed using the node
- Protocol(一)[概述]
- 怦然心动(Flipped)-2
- ArcGIS校园3D展示图制作详细教程
- Go语言核心之美 2.4-布尔值
- oracle 11g duplicate database基于备份复制数据库(二)
- 论文笔记:Intriguing properties of neural networks
- win10怎么关闭443端口(超详细)
- 上升了百分之几怎么算_求增加百分之几的应用题
- docker 安装 postgresql
- 【Java】Java绘制UML图
- Xson:Java对象序列化和反序列化工具
热门文章
- 链上治理为何如此重要,波卡Gov 2.0又会如何引领链上治理的发展?
- 跟我学UDS(ISO14229) ———— 0x11(ECUReset)
- Unity 脚本一文通(一)
- “好奇号”选定目标即将启用激光枪
- kill mysql process_Mysql 批量 kill processlist
- linux kill 12,kill -9 ,kill -12,kill -15
- 「FVWM」- 窗口的组成 @20210122
- 【绝悟】腾讯最强策略协作型AI开放人机对战,五一节放松一下吧!
- Vue element ui用户展示页面
- 第2题小高考(test)【2019南海区小甲模拟题】