前言:之前项目重来没有用到过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项目相关推荐

  1. Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

    Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...

  2. Docker 部署SpringBoot项目不香吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:流星007 链接:toutiao.com/i68433912 ...

  3. 又到了上云时刻啦!!!阿里云 Docker部署SpringBoot项目 方便测试的部署方式

    又到了上云时刻啦!!!阿里云 Docker部署SpringBoot项目 方便测试的部署方式 部署思路: 具体步骤: 1.打成jar 2.上传到服务器 3.启动JDK容器 4.进入JDK 容器 启动 项 ...

  4. 使用Docker部署SpringBoot项目(避坑+超级详细版本)

    使用Docker部署SpringBoot项目(避坑+超级详细版本) 首先呢,非常感谢我们一起相遇在这个地方,想必此刻的你也是在一个学习求知的过程,我们一样,我们都是在求知的路上匍匐前进!看到这篇文章, ...

  5. docker 挂载目录_完美解决:Docker部署SpringBoot项目后图片无法访问和上传,3招搞定!...

    以前使用FTP在Linux中使用java -jar xxx.jar部署SpringBoot项目时,由于在项目中指定了主机文件存放路径映射,可以直接访问服务器的文件. 但是最近入坑Docker,将Spr ...

  6. 使用IDEA集成docker部署springboot项目及bug解决并连同redis、MySQL

    流程介绍 安装docker(windows) 配置docker源加速 docker安装redis IDEA集成docker # IDEA连接docker 配置springboot项目 打包成docke ...

  7. 史上最全阿里云服务器上Docker部署Springboot项目 实战 每一步都带详细图解!!!

    在学习编程的时候,我们都会想,该怎么把自己写出来的项目和创意分享给大家勒.直接给代码吗?平常人看不懂,环境还需要一大堆. 那么部署到服务器上,让人能够直接访问,我想这应该是最棒的方式了吧. 使用Doc ...

  8. Jenkins+Pipeline+Docker部署SpringBoot项目到远程服务器

    Jenkins部署 前言 Jenkins 安装 nginx配置 jenkins配置 Docker安装 项目部署 项目添加Dockerfile文件 Jenkins新建任务 使用Pipeline部署 结果 ...

  9. 就几条命令,一键学会Docker部署SpringBoot项目

    今天,我们使用docker的安装方式,来安装一下我们的项目,实验环境是centos 7系统上,本实验适用部署大部分Springboot项目.文末有40分钟的视频教学哈! eblog项目地址: http ...

最新文章

  1. 提高大数据量并发访问时效率
  2. js html保存json,如何在json文件中存储jQuery或javascript变量?
  3. 分配服务器证书在哪,手把手教你如何申请安装ssl服务器证书
  4. 浏览器的referer是服务器修改的吗,利用浏览器调整http的referer
  5. Linux系统VIM编辑器管理(2)
  6. 新书速递 | 《知识图谱:方法、实践与应用》
  7. github-markdown-css 使用简解,markdown文案格式优化(笔记)
  8. java处理超大csv文件_比较 csv 文件中数据差异
  9. Java窗口之文本框、按钮、菜单
  10. 用python代码制作视频
  11. 完全查杀VIKING(威金蠕虫)病毒与免疫补丁
  12. MAC快捷键还原最小化的(cmd+M)程序窗口
  13. Python dict字典keys()、values()和items()方法
  14. 基于DRGs的医保控费方案
  15. 成就更好的自己,就是不停地做减法
  16. 动态规划java实现数塔问题_动态规划入门_数塔问题
  17. 互联网程序员普遍都是年薪百万嘛?
  18. MTCNN中的重叠度IOU和非极大值抑制NMS原理及Python实现
  19. safari 浏览器输入框不能输入
  20. SpringBoot整合JavaMail通过阿里云企业邮箱发送邮件

热门文章

  1. ChatGPT处理Excel Word PPT
  2. 【图像分割】基于meanshift实现色盲图像分割含Matlab源码
  3. Inno Setup 密码获取器 v0.01 by 风铃夜思雨
  4. 你好,链表(^.^)
  5. 2011年度总结报告
  6. 【imessage苹果相册推】物态分配和动态分配ExplicitAppID:独一的AppID
  7. HIT计算机系统大作业程序人生
  8. java 游戏开发项目教程 赛尔号
  9. 关于DNS DHCP FTP TFTP HTTP WEB
  10. Databus 深入学习