远程服务器Docker部署SpringBoot +MySql【真保姆级教程】

1.前言

历时几个小时,终于磕磕绊绊的在解决了一些很没智商的错误以后,成功的将springboot项目以及mysql数据库部署到docker了,使用的远程服务器,没使用过docker的童鞋看过来,跟着我走,包你成功部署。

2.项目

我使用的Java17,正常的三层架构项目。

3.打jar包

我用的版本管理是Maven,在此便只用Maven演示。

3.1修改配置文件

在打jar包之前,将自己配置文件中的数据库账号,密码,ip地址和端口号改成与服务器匹配的

如图:

包括但不限于数据库,任何与本地相关的地方都要进行修改;

现在服务器上并还没有安装数据库,先预设即将部署到服务器数据库上的账号,密码,ip地址和端口号,服务器上设置mysql数据库时,就按照你打jar包时的配置。

同时,你还要记住项目的端口号是什么,后面部署时需要用到,例如我当前项目端口为8083。

3.2打包

先执行clean操作

注:这里仅为了演示打包,后续还有Dockerfile文件要创建,这一步可以先跳过,等到创建完Dockerfile文件后再打包。

clean完成后如下图:

现在执行package

出现如下界面就是打包成功

jar包就存在target文件中

4.docker安装

由于我这里用的是远程服务器,便不再演示与远程服务器的连接,无论是远程服务器还是虚拟机,操作都是大同小异,所以我们跳过这一步骤,接下来的演示是在连接上服务器以后(注:此时的操作在cmd黑窗口中)。

Linux服务器安装docker,依次执行下面的语句:

# 1、yum 包更新到最新 
yum update
# 2、安装需要的软件包 
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都按 y 
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v 

执行完语句后如果出现版本号信息,就是成功了。

5.安装mysql

将本地和服务器中数据库版本保持一致

5.1搜索mysql镜像
docker search mysql
5.2拉取mysql镜像
docker pull mysql:8.0.31
5.3 创建容器,设置端口映射、目录映射
# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
docker run -i -d \
--name=c_mysql \
-p 3307:3306 \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=1234 \
mysql:8.0.31
  • docker run:Docker 运行命令,用于创建并启动一个新的容器。

  • -id:让 Docker 在后台运行容器,并为容器分配一个唯一的 ID。通常这两个选项是分开的 -i 表示交互式,-d 表示后台运行。但在这里,它们连在一起可能是一个错误,正确的应该是 -i -d

  • -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口,这样您可以通过宿主机的 3307 端口访问 MySQL 服务。

  • --name=c_mysql:为容器指定一个名称,这里是 c_mysql

  • -v $PWD/conf:/etc/mysql/conf.d:将当前目录下的 conf 文件夹挂载到容器中的 /etc/mysql/conf.d,用于存放 MySQL 的配置文件。

  • -v $PWD/logs:/logs:将当前目录下的 logs 文件夹挂载到容器中的 /logs,用于存放日志文件。

  • -v $PWD/data:/var/lib/mysql:将当前目录下的 data 文件夹挂载到容器中的 /var/lib/mysql,这是 MySQL 数据文件存放的位置。

  • -e MYSQL_ROOT_PASSWORD=1234:设置环境变量,为 MySQL root 用户设置密码。这里密码被设置为 1234

  • mysql:8.0.31:指定使用的镜像是 mysql,标签为 8.0.31

5.5 使用本地管理数据库的软件机器连接服务器容器中的mysql

这里推荐使用navicat,一款非常好用的数据库可视化工具(随便哪种工具都可以)

6.导入数据库及数据

这里同样使用navicat

6.1连接自己本地数据库

6.2有了sql文件后,在连接的远程服务器数据库中先创建一个数据库,创建完成后选择运行sql文件

7.部署springboot

7.1把jar包使用xftp传输软件,传到服务器的目录。

链接:百度网盘 请输入提取码 提取码:fawe

Xshell工具:操作docker面板

Xftp工具:linux可视化工具

打开Xftp后,连接

将jar包直接CV即可

8.编写Dockerfile文件

8.1在idea当前项目新建

与src、main平级

重要:文件名一定只能是Dockerfile!!!

重要:文件名一定只能是Dockerfile!!!

重要:文件名一定只能是Dockerfile!!!

下面是我的Dockerfile

# 使用官方Java镜像作为基础镜像
FROM eclipse-temurin:17-jdk
​
# 设置工作目录为容器内部的 /root/emsys
WORKDIR /root/emsys
​
# 将当前目录下的jar文件复制到容器内部的 /root/emsys 目录
COPY emsys-0.0.1-SNAPSHOT.jar .
​
# 暴露容器运行时需要用到的端口,这里假设您的应用程序使用8083端口
EXPOSE 8083
​
# 定义环境变量,如果需要的话
ENV JAVA_OPTS="-Xms512m -Xmx512m"
​
# 运行jar文件,这里使用了 exec 形式的 CMD,以便可以对运行的容器发送停止信号
CMD ["sh", "-c", "java $JAVA_OPTS -jar emsys-0.0.1-SNAPSHOT.jar"]
8.2Dockerfile构建镜像

此时已创建好Dockerfile文件,先把项目打包

将Dockerfile和jar包使用Xftp放进同一目录中

使用cd命令进入emsys中

cd /root/emsys

构建镜像

docker build -f ./Dockerfile -t emsys .
  • docker build:Docker 构建命令,用于根据 Dockerfile 创建一个新的镜像。

  • -f ./Dockerfile:指定 Dockerfile 的位置。-f 参数后面跟的是 Dockerfile 文件的路径。在这个例子中,./Dockerfile 表示 Dockerfile 位于当前目录。

  • -t emsys:为构建的镜像指定一个名称。在这个例子中,镜像的名称被指定为 emsys-t 参数后面可以跟一个名称(如 emsys)和一个可选的标签(如 latest),格式为 -t name:tag

  • .:表示构建上下文的路径,即 Docker 在构建过程中需要的文件和目录的来源路径。在这个例子中,. 表示当前目录。

9.docker端口映射

基本概念
  • 容器端口:容器内部服务监听的端口,比如 Web 服务器通常监听在端口 80。

  • 宿主机端口:Docker 宿主机上的端口,可以是任何未被占用的端口。

  • 端口映射格式-p 宿主机端口:容器端口--publish=宿主机端口:容器端口:协议

示例
  1. 基本端口映射: 将容器的端口 80 映射到宿主机的端口 8080:

    docker run -p 8080:80 my_image
  2. 映射多个端口: 同时映射容器的两个端口到宿主机:

    docker run -p 8080:80 -p 3000:3001 my_image
  3. 随机映射宿主机端口: 让 Docker 为每个容器端口分配一个随机的宿主机端口:

    docker run -p 8080 -p 3000 my_image
  4. 映射到特定的宿主机接口: 将容器端口映射到宿主机的特定网络接口上的端口:

    docker run -p 127.0.0.1:8080:80 my_image
  5. 使用 UDP 协议: 映射容器端口到宿主机端口,并指定 UDP 协议:

    docker run -p 12345:1234/udp my_image
  6. 映射到具有特定参数的宿主机端口: 使用 --publish 参数映射容器端口到宿主机端口,并指定额外的参数,如 host(宿主机端口)、container(容器端口)和 protocol(协议,可以是 tcpudp):

    docker run --publish host=8080,container=80 my_image
注意事项
  • 确保宿主机上映射的端口没有被其他服务占用。

  • 如果您在 Docker Compose 或 Kubernetes 等编排工具中工作,端口映射的语法可能会有所不同。

  • 出于安全考虑,避免将容器端口直接映射到宿主机的知名端口(如 80, 443),除非您确实需要这样做。

端口映射是 Docker 网络功能的重要组成部分,使得容器内部服务可以被外部访问,对于开发、测试和生产部署都是非常重要的。

创建容器
docker run -id -p 9527:8083 emsys
  • docker run:Docker 运行命令,用于创建并启动一个新的容器。

  • -id:这两个参数组合起来是 -i -d 的简写,其中 -i 表示交互式运行容器,允许您与容器的标准输入进行交互;-d 表示以 detached 模式运行容器,在后台运行容器。

  • -p 9527:8083:将容器内部的端口 8083 映射到宿主机的端口 9527。这样,您可以通过宿主机的 9527 端口访问容器中运行的应用程序。

  • emsys:指定要运行的 Docker 镜像的名称。

10.查看正在运行的容器

docker ps

出现如图效果,恭喜你部署成功

11.运行

docker run -p 9527:8083 emsys

终于见到熟悉的画面。至此项目部署完成!

12.Docker常用命令

  1. docker run:运行一个容器。

    docker run -d --name my_container my_image

    -d 表示以 detached 模式运行,--name 为容器指定一个名称,my_image 是镜像的名称。

  2. docker ps:列出当前正在运行的容器。

    docker ps

  3. docker stop:停止一个或多个正在运行的容器。

    docker stop my_container

  4. docker start:启动一个或多个已经被停止的容器。

    docker start my_container

  5. docker rm:删除一个或多个容器。

    docker rm my_container

  6. docker rmi:删除一个或多个镜像。

    docker rmi my_image

  7. docker images:列出本地主机上的镜像。

    docker images

  8. docker build:根据 Dockerfile 创建一个镜像。

    docker build -t my_image .

    -t 为镜像指定一个标签,. 表示当前目录作为上下文路径。

  9. docker pull:从镜像仓库拉取或者更新指定的镜像。

    docker pull my_image

  10. docker push:将一个镜像推送到镜像仓库。

    docker push my_image

  11. docker exec:在运行的容器中执行命令。

    docker exec -it my_container /bin/bash

    -it 参数让 Docker 提供一个交互式终端。

  12. docker logs:获取容器的日志。

    docker logs my_container

  13. docker inspect:获取容器或镜像的详细信息。

    docker inspect my_container

  14. docker network:管理 Docker 网络设置。

    docker network ls

  15. docker volume:管理 Docker 数据卷。

    docker volume create my_volume

  16. docker-compose:使用 Docker Compose 工具管理多容器 Docker 应用程序。

    docker-compose up

12.更新jar包

当本地环境添加或修改代码以后,需要重新部署

首先再次执行打包操作,在此不多赘述

进入之前存放jar包的目录,删掉旧的jar包,将新的jar包粘贴进去

打开xshell,进入存放jar包和Dockerfile的文件:

进入目录

cd /root/emsys

构建新镜像

docker build -f ./Dockerfile -t emsysv1 .

查看镜像

docker ps

此时情况如下:

可以看到正在运行的有emsys和mysql,先停止emsys

docker stop 210c5e7d2361 #替换为自己的id

再次查看所有使用镜像的容器

docker ps -a --filter ancestor=emsys

效果如下:

删除旧的emsys容器

docker rm id #替换为自己的id

 删除镜像


docker rmi emsys

运行

docker run -p 9527:8083 emsysv1

 

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用docker部署springboot+MySQL项目,可以按照以下步骤进行操作: 1. 编写Dockerfile文件,指定基础镜像、安装JDK和MySQL等依赖,将项目打包成jar包并复制到镜像中。 ```dockerfile FROM openjdk:11-jdk-slim VOLUME /tmp ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar RUN mkdir -p /var/lib/mysql RUN apt-get update && apt-get install -y mysql-server RUN echo "bind-address = 0.0.0.0" >> /etc/mysql/mysql.conf.d/mysqld.cnf RUN service mysql start && \ mysql -uroot -e "CREATE DATABASE db_name" && \ mysql -uroot -e "CREATE USER 'username'@'%' IDENTIFIED BY 'password'" && \ mysql -uroot -e "GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'%';" EXPOSE 8080 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` 2. 构建镜像 在Dockerfile的目录下执行以下命令: ```shell docker build -t springboot-mysql . ``` 这里将镜像命名为springboot-mysql。 3. 运行容器 执行以下命令运行容器: ```shell docker run -d -p 8080:8080 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=db_name -e MYSQL_USER=username -e MYSQL_PASSWORD=password springboot-mysql ``` 这里将容器的8080端口映射到主机的8080端口,3306端口映射到主机的3306端口,并指定MySQL的root密码、数据库名、用户名和密码。 4. 访问应用 在浏览器中访问http://localhost:8080,即可访问应用。 注意:如果使用docker-compose进行部署,可以在docker-compose.yml文件中指定MySQL的配置,更加方便和灵活。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值