Docker部署Springboot项目(含MySQL+Redis)

news2024/9/23 15:25:17

使用Docker部署之前写的一个博客项目,主要用到了MySQL和Redis,Redis作网站访问量统计。下面会对具体的部署方式作详细讲解

一、服务器安装Docker

1、删除docker旧版本

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、设置镜像仓库

sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 阿里云的

3、安装Docker

# 安装docker 相关 docker-ce 社区版 docker-ee企业版
yum install docker-ce docker-ce-cli containerd.io

这时报错

- Status code: 404 for https://mirrors.aliyun.com/docker-ce/linux/centos/2/x86_64/stable/repodata/repomd.xml

查询os版本
可以看到当前服务器版本是Huawei Cloud EulerOS 的2.0版本

[hqf@ecs-337729 ~]$ cat /etc/os-release

NAME="Huawei Cloud EulerOS"
VERSION="2.0 (x86_64)"
ID="hce"
VERSION_ID="2.0"
PRETTY_NAME="Huawei Cloud EulerOS 2.0 (x86_64)"
ANSI_COLOR="0;31"

找到mirrors.aliyun.com/docker-ce/linux/centos路径下发现并没有版本为2的路径,只有7-8。所以只需要修改该路径就行了

[hqf@ecs-337729 ~]$ sudo vim /etc/yum.repos.d/docker-ce.repo

[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

将$releaserver改成8
之后再次执行

yum install docker-ce docker-ce-cli containerd.io

安装成功!

二、安装MySQL

1、拉取MySQL镜像

[hqf@ecs-337729 ~]$ docker pull mysql:8.0
8.0: Pulling from library/mysql
197c1adcd755: Pull complete 
45f2e353f7d2: Pull complete 
68ec6ece42ef: Pull complete 
cfa4d9a7b88e: Pull complete 
64cab5858b1d: Pull complete 
92fcd248d982: Pull complete

2、查看镜像

[hqf@ecs-337729 ~]$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
mysql         8.0       57da161f45ac   2 weeks ago     517MB
hello-world   latest    feb5d9fea6a5   17 months ago   13.3kB

3、运行镜像

[hqf@ecs-337729 ~]$ docker run -d -p 3306:3306 -v mysql_conf:/etc/mysql/conf.d -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:8.0
00afe560d1c93a750f9b021da46f9a8544cd466e6263b2574980152885daf5bb

4、查询运行中的容器

[hqf@ecs-337729 ~]$ docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                               NAMES
00afe560d1c9   mysql:8.0   "docker-entrypoint.s…"   6 seconds ago   Up 6 seconds   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql01

5、查看容器IP

[hqf@ecs-337729 ~]$ docker inspect mysql01
... ...
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "8131aa939ac0e34ca9e00641ed5d0f21b138815d765c2d36e8e7f1882a3cef32",
                    "EndpointID": "38041eab55f2643c750c77235195cd7aaea1b6a16049498259d32da93f547b8e",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }

“IPAddress”: “172.17.0.2”
记录下来之后会用到

6、查询卷挂载目录

[hqf@ecs-337729 ~]$ docker volume ls
DRIVER    VOLUME NAME
local     mysql_conf
local     mysql_data

[hqf@ecs-337729 ~]$ docker volume inspect mysql_data
[
    {
        "CreatedAt": "2023-02-23T14:56:07+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/mysql_data/_data",
        "Name": "mysql_data",
        "Options": null,
        "Scope": "local"
    }
]

7、上传.sql文件

到卷挂载目录下上传.sql文件
在这里插入图片描述

8、将数据导入数据库

进入容器

[hqf@ecs-337729 ~]$ docker exec -it mysql01 /bin/bash

创建数据库

mysql> create database blog;

进入数据库

mysql> use blog;

导入数据

mysql> source /var/lib/mysql/blog.sql;

查看导入数据

mysql> show tables;

在这里插入图片描述
导入成功!

9、修改新密码并设置远程连接

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'xxxxxx';

mysql> flush privileges; // 刷新权限

使用navicate连接,成功!

在这里插入图片描述

三、 安装Redis

1、拉取redis镜像

docker pull redis

在这里插入图片描述

2、启动redis容器

docker run -p 6379:6379 --name myredis -v /home/www/redis/redis.conf:/etc/redis/redis.conf -v /home/www/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

3、查看容器进程

如果启动失败,需要将配置文件中的daemonize的参数值改为no
再次启动后成功!
在这里插入图片描述

4、查看redis容器IP

docker inspect myredis

在这里插入图片描述
记录下该地址之后项目配置会用到

5、使用连接工具连接redis

在这里插入图片描述
连接成功!

四、项目部署

1、项目打包

将项目数据库连接IP改成上述MySQL容器IP
在这里插入图片描述
将redis连接IP改成上述Redis容器IP
在这里插入图片描述

2、编写Dockerfile

FROM java:8

VOLUME /tmp

ADD boot-blog-0.0.1-SNAPSHOT.jar app.jar

EXPOSE 80

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

3、将Dockerfile和jar包上传至服务器

在这里插入图片描述

4、构建Dockerfile

docker build -t boot-blog:1.0 .

报错

Error response from daemon: manifest for java:8 not found: manifest unknown: manifest unknown

解决
将Dockerfile中FROM java:8 改成 FROM openjdk:8
在这里插入图片描述
然后再次执行构建,成功!

5、查看构建成功的镜像

在这里插入图片描述

6、运行镜像

docker run -d -p 80:80 --name boot-blog boot-blog:1.0

在这里插入图片描述

7、容器启动后停止

查看容器运行日志

docker logs <container-id>

在这里插入图片描述
在数据库连接url后添加allowPublicKeyRetrieval=true
在这里插入图片描述
重新打包上传并运行

8、运行成功

浏览器访问服务器IP
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(三十五)大白话MySQL一个事务多次查询一条数据读到的都是不同的值,这就是不可重复读?

上一讲我们说完了多个事务并发执行时候&#xff0c;对MySQL的缓存页里的同一行数据同时进行更新或者查询的时候&#xff0c;可能发生的脏写和脏读的问题 我们也都理解了&#xff0c;之所以会发生脏写和脏读&#xff0c;最关键的&#xff0c;其实是因为你一个事务写或者查的是人…

黑盒测试的常用方法

这里我们先设置一个示例,后面的文章中会根据示例来进行讲解 假设有一个程序是判断一个整形数字是否属于1-100 目录 1.等价类法 2.边界值法 3.判定表法 4.场景设计法 5.错误猜测法 6.正交法 1.等价类法 概念:系统性的确定要输入的测试条件的方法可以看出概念非常抽象,那…

命令执行漏洞 | iwebsec

文章目录1 靶场环境2 命令执行漏洞介绍3 靶场练习01-命令执行漏洞02-命令执行漏洞空格绕过03-命令执行漏洞关键命令绕过04-命令执行漏洞通配符绕过05-命令执行漏洞base64编码绕过4 命令执行漏洞危害01-读写系统文件02-执行系统命令03-种植恶意木马04-反弹shellpython反弹shellp…

Android 基础知识4-3.4 ImageView(图像视图)详解

一、ImageView简介 ImageView是Android开发中最常用的组件之一&#xff0c;主要用于显示图片&#xff0c;但是它不只是能显示图片&#xff0c;任何Drawable对象都可以使用它来显示。 二、ImageView 的继承关系 ImageView的继承关系 如下&#xff1a; java.lang.Object 《-- …

生成式语言大模型压缩技术思考——以ChatGPT为例

ChatGPT引领了生成式语言大模型的应用与技术热潮&#xff0c;首先简单回顾ChatGPT应用范式&#xff1a;将其应用于指定的下游任务时&#xff08;如知识问答、翻译、编码&#xff09;&#xff0c;ChatGPT需要经历三个阶段的训练&#xff08;增强人类语境的猜想&#xff09;&…

基于nodejs+vue的平面设计课程管理系统vscode

后台由管理员&#xff0c;教师和学生三个角色&#xff0c;其主要功能包括首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;课程类型管理&#xff0c;课程学习管理&#xff0c;试题讲解管理&#xff0c;作业信息管理&#xff0c;作业提交管理&…

Flutter3引用原生播放器-IOS(Swift)篇

前言由于Flutter项目中需要使用到播放器功能&#xff0c;因此对flutter中各种播放器解决方案进行了一番研究和比对&#xff0c;最后决定还是自己通过Plugin的方法去引用原生播放器符合自己的需求&#xff0c;本篇文章会对各种解决方案做一个简单的比较&#xff0c;以及讲解一下…

STM32—DMA

什么是DMA&#xff1f; DMA(Direct Memory Access&#xff0c;直接存储器访问) 提供在外设与内存、存储器和存储器、外设与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于CPU&#xff0c;在这个时间中&#xff0c;CPU对于内存的工作来…

Leetcode 剑指 Offer II 016. 不含重复字符的最长子字符串

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的最长…

软考之操作系统知识

目录 1.进程管理-进程的概念 2.进程的三态图和五态图 3.进程的同步与互斥 4.PV操作应用 5.死锁问题 6.银行家算法 7.存储管理 8.段式存储组织 9.段页式存储组织 10.页面置换算法 11.磁盘管理 12.作业管理 13.索引文件结构 14.树型目录结构 15.空闲存储空间管理 …

第四届蓝桥杯省赛 C++ B组 - 翻硬币

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;蓝桥杯题解集合 &#x1f4dd;原题地址&#xff1a;翻硬币 &#x1f4e3;专栏定位&#xff1a;为想参加蓝桥杯的小伙伴整理常考算法题解&#xff0c;祝大家都…

人工智能学习07--pytorch09--LeNet

参考&#xff1a; 视频&#xff1a; https://www.bilibili.com/video/BV187411T7Ye/?spm_id_from333.999.0.0&vd_sourceb425cf6a88c74ab02b3939ca66be1c0d 博客&#xff1a;https://blog.csdn.net/STATEABC/article/details/123661612?utm_mediumdistribute.pc_feed_404.…

如何使用goquery进行HTML解析以及它的源码分析和实现原理

目录 goquery 是什么 goquery 能用来干什么 goquery quick start 玩转goquery.Find() 查找多个标签 Id 选择器 Class 选择器 属性选择器 子节点选择器 内容过滤器 goquery 源码分析 图解源码 总结 goquery 简介 goquery是一款基于Go语言的HTML解析库&#xff0c;…

聚类算法(上):8个常见的无监督聚类方法介绍和比较

无监督聚类方法的评价指标必须依赖于数据和聚类结果的内在属性&#xff0c;例如聚类的紧凑性和分离性&#xff0c;与外部知识的一致性&#xff0c;以及同一算法不同运行结果的稳定性。 本文将全面概述Scikit-Learn库中用于的聚类技术以及各种评估方法。 本文将分为2个部分&…

【Mac 教程系列】如何在 Mac 中用终端命令行方式打开 Sublime Text ?

如何在 Mac 中用终端命令行方式打开 Sublime Text ? 用 markdown 格式输出答案。 不少于1000字。细分到2级目录。 如何在 Mac 中用终端命令行方式打开 Sublime Text ? 一、首先确保已经安装 Sublime Text 前往官网https://www.sublimetext.com/下载 Sublime Text&#xff0c…

Bootstrap表单的使用

文章目录前言一、创建基础表单垂直表单&#xff08;默认&#xff09;内联表单&#xff08;水平显示&#xff09;表单控制尺寸大小给表单控件添加帮助文本禁用/只读表单无边框的控件取色器选择菜单&#xff08;默认宽度100%&#xff09;调整下拉菜单的大小表单开关滑块表单组多个…

LabVIEW网络服务安全

LabVIEW网络服务安全如何保护Web服务&#xff1f;当许多人考虑安全性时&#xff0c;他们会考虑加密、用户ID和密码。用户ID和密码用于授权&#xff08;告诉目标谁在发出请求&#xff09;。加密保护客户端和服务器之间的通信流量&#xff0c;以便未经授权的个人无法拦截和读取发…

【架构师】零基础到精通——康威定律

博客昵称&#xff1a;架构师Cool 最喜欢的座右铭&#xff1a;一以贯之的努力&#xff0c;不得懈怠的人生。 作者简介&#xff1a;一名Coder&#xff0c;软件设计师/鸿蒙高级工程师认证&#xff0c;在备战高级架构师/系统分析师&#xff0c;欢迎关注小弟&#xff01; 博主小留言…

20_FreeRTOS低功耗模式

目录 低功耗模式简介 STM32低功耗模式 Tickless模式详解 Tickless模式相关配置 实验源码 低功耗模式简介 很多应用场合对于功耗的要求很严格,比如可穿戴低功耗产品、物联网低功耗产品等。 一般MCU都有相应的低功耗模式,裸机开发时可以使用MCU的低功耗模式。 FreeRTOS也…

Linux学习(8.7)命令与文件的搜寻

目录 命令与文件的搜寻 which 文件档名的搜寻&#xff1a; whereis (寻找特定文件) locate find 以下内容转载自鸟哥的Linux私房菜 命令与文件的搜寻 which 这个命令是根据『PATH』这个环境变量所规范的路径&#xff0c;去搜寻『运行档』的档名&#xff5e; 所以&am…