docker部署springboot项目(ubuntu16)

本文介绍如何将SpringBoot项目打包并创建Docker镜像,同时详细讲解MySQL容器的搭建与配置,包括中文乱码问题解决及数据库的导入与导出操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

springboot项目部分

 

 

1 将springboot项目打成jar包通过xftp复制到宿主机目录下,再同目录下创建Dockerfile
内容如下:
FROM java:8
VOLUME /tmp
ADD logistics-0.0.1-SNAPSHOTs.jar webapp.jar
ENTRYPOINT ["java","-jar","/webapp.jar"]

进入到Dockerfile文件所在位置(如Dockerfile在/usr/java下)
cd /usr/java

2创建项目镜像(注意加上.)
docker build -t springboot .

3 docker images查看镜像是否创建成功


 

mysql部分

 

下载mysql:运行命令  docker pull mysql:5.6

 启动mysql容器:通过mysql镜像(本次测试mysql镜像是5.6版,直接docker pull mysql:5.6即可)创建mysql容器,命令如下:
 docker run -p 3307:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=a -d mysql:5.6 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
(--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci用来设置mysql编码)

注意:我之前是-p 3306:3306出现以下错误,于是将宿主机端口改为3307
Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use.


命令说明:
-p 3307:3306:将容器的3306端口映射到宿主机的3307端口
-v -v $PWD/conf:/etc/mysql/conf.d:将宿主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf
-v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs
-v $PWD/data:/mysql_data:将主机当前目录下的data目录挂载到容器的/mysql_data

-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码

 

 


二  sql脚本数据导入
要求:将logistics.sql文件导入docker中mysql的logistics数据库


1 运行docker ps,查看启动的容器


2 将宿主机上的sql文件复制到容器的文件下  --因为是-v 启动  文件结构目录保持一致(注意:宿主机/opt目录下存在logistics.sql脚本)
docker cp /opt/logistics.sql  mymysql(即容器名称或者容器id) :/opt/logistics.sql


3 进入容器,docker exec -it mymysql(即容器名称或者容器id) bash


4 登录数据库  mysql -uroot -pa


5 创建logistics数据库  create database logistics;(数据库执行语句记得加;结尾 表示结束)


6 查看创建的数据库 show databases;


7 进入logistics数据库  use logistics;


8 导入sql脚本   source /opt/logistics.sql


9 退出 exit;

三  导出数据库
需求:将docker容器中的mysql的logistics数据库导出到宿主机/opt目录下
docker exec -it mymysql(容器名称) mysqldump -uroot -pa logistics >/opt/copy.sql

 

 

 

 

 

 

springboot项目与mysql容器互联部分

通过以上mysql部分已经完成了数据库创建以及数据的插入,可以通过以下命令运行springboot项目容器连接到mysql容器
docker run -d -p 8080:80 --name web --link mymysql:localhost springboot
命令解释:
--name web  给启动的springboot项目命名为web
--link mymysql(启动的数据库容器名称):localhost(别名)  容器互联(最好别名为localhost,因为项目jdbc配置为localhost,这样不用再去修改) 
springboot  创建容器的镜像

 

 

 

 

 

 

 

 

至此,可以通过外网ip:8080访问项目

 

 

 

 

遇到的问题:mysql中文乱码

进入mysql容器发现编码格式并不是utf-8,如何查看自己mysql容器编码:

前提条件,如果有则跳过: 将宿主机上的sql文件复制到容器的文件下  --因为是-v 启动  文件结构目录保持一致(注意:宿主机/opt目录下存在logistics.sql脚本)
docker cp /opt/logistics.sql  mymysql(即容器名称或者容器id) :/opt/logistics.sql
 

1.进入docker中的mysql容器

docker exec -it  mymysql(mysql容器的名称) bash

2 进入数据库

mysql -uroot -pa

3查看编码

show variables like 'char%';

show variables like 'coll%';

发现不是utf-8

SET NAMES 'utf8';

它相当于 SET character_set_client = utf8;SET character_set_results = utf8;SET character_set_connection = utf8;

4 创建数据库

create database logistics;

5 查看数据库

show databases;

6进入数据库

use logistics;

7 执行sql脚本

source /opt/logistics.sql;

8 执行show variables like 'char%' 发现不是utf-8

9 再执行SET NAMES 'utf8';

10 再执行source /opt/logistics.sql;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

### 如何在 Ubuntu 22.04 上部署 Spring Boot 项目 #### 准备工作环境 为了成功部署 Spring Boot 应用程序,在服务器上安装必要的依赖项至关重要。对于基于 Java 的应用程序,确保已安装 JDK 和 Docker。 Java 开发工具包 (JDK) 是运行任何 Java 或者 Kotlin 编写的软件所必需的基础组件之一。可以通过以下命令来安装 OpenJDK: ```bash sudo apt update && sudo apt install openjdk-17-jdk -y ``` 确认安装版本: ```bash java -version ``` 这会显示当前使用的 Java 版本信息[^3]。 #### 构建并打包 Spring Boot 应用 通常情况下,Spring Boot 应用会被打包成一个可执行 JAR 文件。如果还没有准备好这个文件,则需要先通过 Maven 或 Gradle 来编译源代码并创建发布版的 jar/war 文件。 假设已经有一个名为 `myapp.jar` 的 Spring Boot 可执行 JAR 文件准备就绪。 #### 使用 Docker 打包应用 Dockerfile 是定义容器化环境中所需配置的关键文本文件。下面是一个简单的例子用于构建包含 Spring Boot 应用的服务镜像: ```dockerfile FROM eclipse-temurin:17-alpine WORKDIR /app COPY myapp.jar app.jar ENTRYPOINT ["java","-jar","/app/app.jar"] EXPOSE 8080 ``` 上述脚本指定了基础映像、设置了工作目录、复制了应用程序二进制文件以及声明了启动命令和服务监听端口。 #### 创建自定义 Docker 映像 有了合适的 Dockerfile 后就可以利用它来制作自己的 Docker 映像了。进入放置有 Dockerfile 的路径下执行如下指令完成映像建立过程: ```bash docker build -t springboot-app . ``` 此操作将会读取本地磁盘上的 Dockerfile 并按照其中指示逐步组装最终产物——即带有特定标签 (`springboot-app`) 的新映像。 #### 运行容器实例 最后一步就是实际启动服务啦!借助之前生成好的映像,只需简单调用 docker run 命令就能让一切运转起来: ```bash docker run -d -p 8080:8080 --name myspringbootapp springboot-app ``` 这条语句表示以后台模式开启一个新的进程 (-d 参数),并将主机的 8080 端口号转发给容器内部相同编号的位置(-p 参数),同时指定容器名称(--name参数)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值