Mac环境SpringBoot项目Docker部署(独家完整版)

news2024/12/22 20:15:30

一、Docker 简介

Docker 是一种开源的容器化平台,允许开发人员将应用程序和所有其依赖项打包成轻量级、可移植的容器,以便在任何地方运行。Docker 的优势和劣势分析如下:

优势:

轻量级:Docker 容器仅包含应用程序及其依赖项,因此它们非常轻量级,可以非常快地启动和运行。

可移植性:Docker 容器可以在任何支持 Docker 的操作系统上运行,这使得 Docker 容器可以轻松地在不同的环境中部署和运行。

容器化应用程序:Docker 可以将应用程序及其依赖项打包成容器,这使得应用程序更加可移植、可复用和可移植。

自动化:Docker 提供了一组工具,可以帮助开发人员自动化容器的部署、管理和监控,这使得容器的生命周期管理更加简单和可靠。

高可用性:Docker 容器可以在多个主机上部署和运行,并且可以自动进行故障转移和负载均衡,从而提高了应用程序的高可用性。

劣势:

初始学习曲线较高:Docker 是一个新兴的技术,因此对于初学者来说可能存在一些学习曲线。

需要一定的配置和管理:Docker 容器需要一些配置和管理,这可能需要一些经验和技能。

需要一定的开销:Docker 容器是轻量级的,但在使用中也可能会存在一些开销,特别是在部署和运行大型应用程序时。

对 Linux 的依存度较高:Docker 主要支持 Linux 系统,因此在 Windows 或其他操作系统上部署和使用 Docker 可能需要更多的工作。

存在一些安全问题:由于 Docker 容器是轻量级的,因此它们很容易受到攻击,因此在使用 Docker 时需要格外小心安全问题。

二、Docker 与Kubernetes的区别

    Docker 和 Kubernetes(简称 K8s) 都是容器技术的代表,但它们在应用场景、实现方式和优缺点等方面存在一些区别。

应用场景:

Docker 主要用于部署、运行和交付应用程序,它可以独立运行、打包应用程序和依赖项,并提供便捷的容器编排工具,例如 Docker Compose、Docker Swarm 等。

Kubernetes 则主要用于容器集群的管理,例如容器的部署、扩展、伸缩和管理等,它可以支持多个容器编排工具,如 Docker Compose、Kubernetes Deployment、Kubernetes Service 等。

实现方式:

Docker 是通过镜像和容器实现的,其中镜像是应用程序和依赖项的打包,容器则是应用程序的运行环境。Kubernetes 则是通过 Pod、Service、Deployment、ReplicaSet 等概念实现的,其中 Pod 是容器的集合,Service 是容器间通信的工具,Deployment 是容器部署工具,ReplicaSet 是容器副本的编排工具。

优缺点:

Docker 的优点包括易于使用、可移植性强、灵活性高、管理简单等。缺点包括容器独立性强、难以扩展、缺乏集群管理等功能。

Kubernetes 的优点包括易于扩展、集群管理功能强大、可靠性高、灵活性强等。缺点包括需要一些技术背景、上手难度较大等。

总的来说,Docker 和 Kubernetes 都是容器技术的代表,它们在应用场景、实现方式和优缺点等方面存在一些不同,用户可以根据自己的需求选择适合自己的工具。

三、Docker 的安装

本教程以Mac环境为例安装Docker。

1.下载Docker Desktop 

通过https://docs.docker.com/desktop/release-notes/,下载相应的的版本。这里要注意一个问题,如果后续要启用Kubernetes,需要下载对应的版本,保证二者匹配。

 

2.docker环境检查:

docker --version

docker-compose --version

docker-machine --version

可以使用以上三个命令检查环境。

3. 尝试运行nginx

docker run -d -p 80:80 --name webserver nginx

可以看到Docker通过pull自动拉去nginx镜像,完成后在Docker Desktop中就能看到。

  

4. Docker Desktop 开启 Kubernetes

(1)为 Docker daemon 配置镜像加速

参考阿里云镜像服务 或中科大镜像加速地址https://docker.mirrors.ustc.edu.cn

{

  "builder": {

    "gc": {

      "defaultKeepStorage": "20GB",

      "enabled": true

    }

  },

  "experimental": false,

  "features": {

    "buildkit": true

  },

  "registry-mirrors": [

    "https://docker.mirrors.ustc.edu.cn"

  ]

}

  

配置完成后点击右下角的Apply&restart。

(2)下载kubernetes

git clone GitHub - AliyunContainerService/k8s-for-docker-desktop: 为Docker Desktop for Mac/Windows开启Kubernetes和Istio。

切换到对应的分支,需要与Docker Desktop支持的kubernetes版本相一致。

git checkout v1.25.2

(3)执行脚本

进入下载的目:cd k8s-for-docker-desktop

执行:./load_images.sh

(4)启动kubernetes

 

(5)使用Kubectl连接k8s

查看kubernetes状态:kubectl cluster-info

查看kubernetes运行的应用:kubectl get nodes:

查看kubernetes运行的服务:kubectl get pods

(6)配置Kubernetes 控制台

cd k8s-for-docker-desktop

部署 Kubernetes dashboard:kubectl create -f kubernetes-dashboard.yaml

检查 kubernetes-dashboard应用状态:kubectl get pod -n kubernetes-dashboard

开启 API Server 访问代理:kubectl proxy

访问 Kubernetes dashboard:

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

配置控制台访问令牌:

kubectl apply -f kube-system-default.yaml

对于Mac环境:

TOKEN=$(kubectl -n kube-system describe secret default| awk '$1=="token:"{print $2}')

kubectl config set-credentials docker-desktop --token="${TOKEN}"

echo $TOKEN

登录dashboard:

选择令牌,输入上面控制台输出的内容。

四、安装和启动mysql

1.查询 mysql最新的镜像:docker search mysql

2.拉取最新的mysql版本:docker pull mysql:latest

3.创建容器内在本地的映射文件夹

mkdir -p /xxxe/docker-mysql/data /xxx/docker-mysql/logs /xxx/docker-mysql/conf

初始化mysql的配置文件*.cnf,在 /xxx/docker-mysql/conf下

touch /xxx/docker-mysql/conf//my.cnf

4.创建docker容器并启动,将数据,日志,配置文件映射到本机:

docker run -p 3306:3306 --name mysql -v  /xxx/docker-mysql/conf:/etc/mysql/conf.d -v  /xxx/docker-mysql/logs:/var/log/mysql -v  /xxx/docker-mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

5. 进入mysql容器

输入:docker exec -it mysql /bin/bash 

6. 登录mysql并设置权限

(1)输入:mysql -uroot -p ,然后再输入密码即可

选择数据库:

show databases;

use mysql;

(2)查看用户连接情况

select host, user, plugin,  authentication_string, password_expired from user;

(3)修改密码和权限

如果对应的host是localhost就需要将其改为 % ,不然会远程连接失败。

修改密码认证方式:ALTER USER root@'%' IDENTIFIED WITH mysql_native_password BY '123456';

ALTER USER root@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

由于mysql中root执行绑定在了localhost,因此需要对root进行授权:grant all on *.* to root@'%';// 允许所有终端访问。

刷新权限:FLUSH PRIVILEGES;

(4)远程连接mysql

通过以上设置,我们可以使用navicat或其他数据库管理工具远程连接mysql。

五、安装和启动mysql

1.创建挂载目录以及获取 redis.conf 配置文件

(1)创建挂载目录

mkdir -p /xxx/docker-redis

mkdir -p /xxx/docker-redis/data

2. 进入挂载目录

cd /xxx/docker-redis

3. 下载 redis.conf 文件

http://download.redis.io/redis-stable/redis.conf

4. 更改 redis.conf 文件的权限

chmod 777 redis.conf

修改默认的 redis.conf 配置文件

vi redis.conf

# 这行要注释掉,解除本地连接限制

bind 127.0.0.1    --> 需要注释掉

# 默认 yes,如果设置为 yes,则只允许在本机的回环连接,其他机器无法连接。

protected-mode no

# 默认 no 为不守护进程模式,docker 部署不需要改为 yes,docker run -d 本身就是后台启动,不然会冲突

daemonize no

# 设置密码

requirepass 123456

# 持久化

appendonly yes

5.docker run 运行 redis 镜像

docker run --name redis -p 6380:6379 --privileged=true -v /xxx/docker-redis/redis.conf:/etc/redis/redis.conf -v /xxx/docker-redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

六、SpringBoot项目Docker打包部署

关于SpringBoot项目的搭建,之前的文章已经做过介绍,这里默认已经具备完整的SpringBoot的项目,且使用到了redis和mysql,并且能够在本地环境通过java -jar命令启动。

1.Docker查看容器的ip地址

查看ip地址的目的在于,通常我们会在SpringBoot项目的yml配置文件中配置redis、mysql等参数,因此需要获取到它们在容器内的ip地址。

输入:docker inspect xxx| grep IPAddress  

xxx为redis或mysql的容器名称。

2.springboot项目docker打包部署

(1)pom添加docker依赖。

(2)通过idea的maven工具打出jar包或war包。

(3)制作Dockerfile

在项目目录下创建Dockerfile文件,文件内容为:

FROM openjdk:8

EXPOSE 8081

VOLUME /tmp

ADD springbootdocker-0.0.1-SNAPSHOT.jar app.jar

ENTRYPOINT ["java","-jar","/app.jar"]

(4)把打好的jar包移动到和Dockerfile同级目录

(5)制作镜像

下载jdk镜像:docker pull openjdk:8

编译:docker build -f Dockerfile -t app:1.0 .

执行完毕后直接就在docker images中看到app这个SpringBoot的镜像。

(5)创建容器并启动

docker run --name app -p 8081:8081 -d app:2.0,也可以在Docker Desktop客户端启动。

运行或停止容器:

docker start app

docker stop app

(6)查看日志

访问SpringBoot项目的服务,如需查看接口日志可以通过如下方式:

docker logs -f -t --tail 50 app

至此,Mac环境SpringBoot项目Docker部署就完成了,非常详细,供大家参考。

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

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

相关文章

家庭智能吸顶灯一Homekit智能

买灯要看什么因素 好灯具的灯光可以说是家居的“魔术师”,除了实用的照明功能外,对细节的把控也非常到位。那么该如何选到一款各方面合适的灯呢? 照度 可以简单理解为清晰度,复杂点套公式来说照度光通量(亮度&#x…

【社区图书馆】二、LED子系统——硬件驱动层

个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、gpio_led_probe分析1.1 相关数据结构1.1.1 gpio_led_platform_data1.1.2 gpio_leds_priv 1.2 实…

Nextjs 处理 css3 前缀兼容

Nextjs 处理 css3 前缀兼容 虽然css3现在浏览器支持率已经很高了, 但有时候需要兼容一些低版本浏览器,需要给css3加前缀,可以借助插件来自动加前缀, postcss-loader就是来给css3加浏览器前缀的,安装依赖: npm i postcss-loader autoprefixer -Dpostcss-loader&…

前端使用国密SM4进行加密、解密

目录 需求【方法1】 - 使用 sm4util 依赖【方法2】sm4.js引入1. /public/sm4.js2. body 标签上引入该文件3. 使用 - ECB 模式加密 【方法3】1. 本地写 js 文件2. 使用 - ECB 模式加解密 需求 前端/后端使用 国密SM4 进行加密/解密, 【注意】前后端配合加解密时&…

06期:使用 OPTIMIZER_TRACE 窥探 MySQL 索引选择的秘密

这里记录的是学习分享内容,文章维护在 Github:studeyang/leanrning-share。 优化查询语句的性能是 MySQL 数据库管理中的一个重要方面。在优化查询性能时,选择正确的索引对于减少查询的响应时间和提高系统性能至关重要。但是,如何…

scrapy框架爬取某壁纸网站美女壁纸 + MySQL持久化存储

文章目录 准备工作创建项目:设置(settings) 主程序入口meinv.py思路源代码 items 配置管道pipelines源代码 效果图总结 准备工作 创建项目: scraoy startproject bizhi cd bizhi scrapy genspider meinv bizhi360.com 设置&#…

ROS学习第二十九节——URDF之joint

此处留疑问,link,joint的origin子标签到底是怎么样的一种位置关系??? https://download.csdn.net/download/qq_45685327/87717336 urdf 中的 joint 标签用于描述机器人关节的运动学和动力学属性,还可以指定关节运动的…

大数据-玩转数据-IDEA创建Maven工程

一、 IDEA集成Maven插件 打开IDEA,进入主界面后点击 file,然后点击 settings,在上面的快捷查找框中输入maven,查找与maven相关的设置,然后点击maven 修改maven的路径(使用本地的Maven),以及修…

【流畅的Python学习笔记】2023.4.22

此栏目记录我学习《流畅的Python》一书的学习笔记,这是一个自用笔记,所以写的比较随意 元组 元组其实是对数据的记录:元组中的每个元素都存放了记录中一个字段的数据,外加这个字段的位置。简单试试元组的特性: char…

kong(1):Kong介绍

Kong是一款基于OpenResty(Nginx Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,…

复旦大学郁喆隽:网络制造出人的“幻象”,深度思考如何可能?

“人是什么?”这是亘古以来人们反复追问的一个古老命题。从元宇宙到ChatGPT,这个人人都在讨论、理解和实践互联网的时代,对“人”的自我定义和认知产生了哪些影响?    在3月12日复旦大学-华盛顿大学EMBA项目主办的“复调艺文沙龙”上&am…

计算长方形、三角形、圆形的面积和周长

系统设计框图: 图形模块的 概要设计(设计数据结构和接口): 数据结构: float 表示面积和周长 长方形的数据(一般typedef都是定义在对应模块的头文件中) typedef struct{ float width; float he…

三菱GX Works2梯形图程序分段显示设置的具体方法示例

三菱GX Works2梯形图程序分段显示设置的具体方法示例 大家平时在使用GX Works2进行梯形图程序编辑时,默认是一整段在一起,程序步数较多时查看起来不是那么方便,下面就和大家分享如何通过声明编辑来实现程序分段显示。 具体方法可参考以下内容: 如下图所示,打开GX Works2编…

数据结构与算法(一):基础数据结构 算法概念、数组、链表、栈、队列

判断一个数是否是2的N次方? N & (N-1) 0 (N > 0)算题: 力扣 https://leetcode.cn/POJ http://poj.org/ 算法 算法概念 算法代表: 高效率和低存储 内存占用小、CPU占用小、运算速度快 算法的高效率与低存储:内存 C…

Oracle 定时任务job实际应用

Oracle 定时任务job实际应用 一、Oracle定时任务简介二、dbms_job涉及到的知识点三、初始化相关参数job_queue_processes四、实际创建一个定时任务(一分钟执行一次),实现定时一分钟往表中插入数据4.1 创建需要定时插入数据的目标表4.2 创建定…

如何为Google Play的应用制作宣传视频

在用户打开我们的应用页面时,最先看到的是宣传视频,这是吸引潜在用户注意力的绝好机会,所以这对于 Google Play 来说是一件大事。 宣传视频和屏幕截图一起,都是引导用户去使用我们应用程序的第一步,能够让他们一打开应…

sibelius西贝柳斯2023中文版是什么打谱软件?如何下载

Sibelius是一款专业的音乐制谱软件,被广泛用于各类音乐创作、教育、表演等领域。通过Sibelius,用户可以快速、准确地制作各种类型的音乐谱面,同时支持多种音乐符号和效果的编辑、自定义和输出,可谓是音乐领域的必备工具之一。Sibe…

SQL Server tempdb 闩锁争用

当你反复创建和删除 TempDb 对象(临时表、表变量等)时,你可能会在 tempdb 中看到页面的闩锁争用。当你注意到tempdb 上的 PAGELATCH_* 争用(sysprocesses 中的等待资源以 2: 开头)时,请检查闩锁等待是否在 …

【语音之家】AI产业沙龙 —— 三星语言智能团队ICASSP2023论文分享会

由CCF语音对话与听觉专委会 、中国人工智能产业发展联盟(AIIA)评估组、三星电子中国研究院、语音之家、希尔贝壳共同主办的【语音之家】AI产业沙龙——三星语言智能团队ICASSP2023论文分享会,将于2023年4月25日18:30-20:20线上直播。 沙龙简介…

ERP系统有哪些功能模块?

一、ERP系统是什么 现在市面上的管理软件有很多,不少企业都会去选择一些操作简单便捷的软件,优化工作流程,提高工作效率,其中ERP系统就是常见的一种,ERP是企业资源计划(Enterprise Resource Planning)的简称&#xff…