前言:之前项目重来没有用到过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. Hibernate总结1
  3. C# 繁体,简体互转
  4. python报“IndentationError: unexpected indent“的解决方法
  5. tomcat修改端口号
  6. MVVM框架原理浅析
  7. 计算机访问共享打印机无权限访问,Windows10电脑系统共享打印机无访问权限?详细解决步骤...
  8. 为什么我的淘宝店铺动态评分清零了?
  9. The nodejs-legacy package simply installs a symbolic link so that it can be executed using the node
  10. Protocol(一)[概述]
  11. 怦然心动(Flipped)-2
  12. ArcGIS校园3D展示图制作详细教程
  13. Go语言核心之美 2.4-布尔值
  14. oracle 11g duplicate database基于备份复制数据库(二)
  15. 论文笔记:Intriguing properties of neural networks
  16. win10怎么关闭443端口(超详细)
  17. 上升了百分之几怎么算_求增加百分之几的应用题
  18. docker 安装 postgresql
  19. 【Java】Java绘制UML图
  20. Xson:Java对象序列化和反序列化工具

热门文章

  1. 链上治理为何如此重要,波卡Gov 2.0又会如何引领链上治理的发展?
  2. 跟我学UDS(ISO14229) ———— 0x11(ECUReset)
  3. Unity 脚本一文通(一)
  4. “好奇号”选定目标即将启用激光枪
  5. kill mysql process_Mysql 批量 kill processlist
  6. linux kill 12,kill -9 ,kill -12,kill -15
  7. 「FVWM」- 窗口的组成 @20210122
  8. 【绝悟】腾讯最强策略协作型AI开放人机对战,五一节放松一下吧!
  9. Vue element ui用户展示页面
  10. 第2题小高考(test)【2019南海区小甲模拟题】