在ubuntu上从零安装docker打包部署springboot项目【操(傻)作(瓜)脚(教)本(程)】

文章目录

  • 在ubuntu中安装docker
  • 连接finalshell
  • 将springboot项目打包成docker镜像并运行
  • 在docker中安装mysql
  • 将外部数据表复制进docker内的数据库
  • 容器或服务出现异常
    • 有可能出现的bug
    • 锦囊妙计
  • 一些常用的其他docker命令

在ubuntu中安装docker

  1. 更新软件源
sudo apt update
  1. 安装依赖包
sudo apt install apt-transport-https ca-certificates curl software-properties-common
  1. 添加docker官方GPG密钥
sudo -i 
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-ce.gpg
  1. 验证
sudo apt-key fingerprint 0EBFCD88
  1. 添加docker阿里稳定版软件源
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
  1. 更新软件源列表
sudo apt update 
  1. 安装默认最新版
sudo apt install docker-ce docker-ce-cli containerd.io
  1. 测试,安装好默认启动
sudo docker run hello-world

(延伸知识:手动启动命令)

systemctl start docker
  1. 查看有哪些镜像
sudo docker images

#配置用户组(docker使用权限问题,视情况操作)
#sudo usermod -aG docker galaxfy su -galaxfy #刷新shell状态
#docker images #验证

连接finalshell

  1. 查看当前ip地址,之后使用finalshell连接
ip addr show
  1. 在finalshell中找一个文件夹,将项目jar包放入其中(finalshell默认不开启root用户,所以注意finalshell连接虚拟机的用户是谁,我配置的用户是router,只能在当前用户有操作权限的文件夹下操作)
cd /home/router

将springboot项目打包成docker镜像并运行

  1. 建立要打包的仓库(docker打包要求仓库名必须小写!!!)
mkdir publicservice
  1. 手动将jar包拖入router文件夹之后再用命令移入publicserive文件夹
mv PublicService.jar publicservice/PublicService.jar
  1. 创建Dockerfile
cd publicserive/
vi Dockerfile
  1. 编辑Dockerfile内容
#拉取一个jdk1.8版本的docker镜像
FROM openjdk:8-jdk
#将项目jar包添加到容器
ADD PublicService.jar test.jar
#ENTRYPOINT 执行项目test.jar及外部配置文件
ENTRYPOINT ["java", "-jar", "test.jar"]
  1. Docker打包镜像
/**千万注意最后有个空格和“.”!!!*/
docker build -t publicservice .
  1. 运行项目容器
    我的SpringBoot项目的配置文件中配置的时9092端口
    我需要将这个docker服务开在18080端口
docker run -d -p 18080:9092 --name PublicService publicservice

查看dockerIP地址

docker inspect 容器名|容器ID | grep IPAddress

在docker中安装mysql

  1. docker拉取mysql镜像
    这里可以自行选择选择你需要的mysql版本
docker pull mysql:8.4.0
  1. 查看一下mysql镜像是否已获取
docker images
  1. 配置运行mysql的容器
docker run -d --name myMysql -p 3306:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.4.0
#指令解析
#-d: 后台运行容器,并返回容器 ID
#–name myMysql: 为容器指定一个名称
#-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
#-v: 绑定一个卷,容器的 /var/lib/mysql 映射到 主机的目录 /data/mysql
#-e MYSQL_ROOT_PASSWORD=123456: 设置环境变量,密码设置为 123456
#mysql:8.4.0:使用镜像 mysql:8.4.0
  1. 查看运行的容器里有没有mysql
docker ps

将外部数据表复制进docker内的数据库

  1. 将数据表转存为sql文件
  2. 将sql文件拖入ubuntu
  3. 复制文件到docker中
docker cp /home/ubuntu/node_structure.sql  myMysql:/tmp/node_structure.sql
  1. 进入docker中的mysql
docker exec -it myMysql bash
mysql -u root -p
  1. 输入mysql密码
  2. 新建一个库
create database public_service;
  1. 选中数据库use public_service;选中导入路径source D:/Demo.sql;
use public_service;
source /tmp/node_structure.sql;
  1. 查看表show tables;
show tables;

容器或服务出现异常

查看docker容器日志

docker logs [OPTIONS] CONTAINER

有可能出现的bug

"Access denied for user ‘root’@‘localhost’ (using password: YES)"
错误表示你的Java应用程序尝试使用用户名 ‘root’ 和提供的密码连接到MySQL数据库,但由于身份验证失败,连接被拒绝了。要解决这个问题,你可以采取以下步骤:

  1. 确认用户名和密码:首先,确保你提供的用户名和密码是正确的。检查MySQL数据库中 ‘root’
    用户的凭据,包括用户名和密码是否正确。如果你不确定密码,可以在MySQL数据库中重置 ‘root’ 用户的密码。
  2. 检查主机:确保你的Java应用程序正在从正确的主机(‘localhost’)连接到MySQL服务器。如果应用程序不是在本地主机上运行,你需要使用正确的主机名或IP地址来建立连接。
  3. 检查权限:确保 ‘root’ 用户具有足够的权限来连接到MySQL服务器。
    排查措施引用自此

类似的,mysql会默认只允许IP地址为“localhost”或“127.0.0.1”来登录root用户,其他IP登录root用户可能会被拒绝,所以在mysql中执行以下代码来赋予所有IP登录root用户的权限

update mysql.user set host='%' where user='root';

锦囊妙计

  1. 停止容器
docker stop ***(容器名|容器ID)
  1. 删除容器
docker rm ***(容器名|容器ID)
  1. 删除镜像(与拉取时的镜像名一致,带有版本号)
docker rmi ***(镜像名)
  1. 重装docker镜像和docker容器(上文有)

一些常用的其他docker命令

启动所有容器

docker start 'docker ps -qa'
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值