SpringCloud微服务学习笔记(二)_Docker

文章目录

  • docker
    • 拆封原则
    • docker在linux上的安装
    • 部署mysql
      • 部署mysql命令解读
    • 常见命令
    • 数据卷挂载
    • 以宿主目录自定义挂载
    • Dockerfile语法
    • 自定义镜像
    • 容器网络互联
    • 部署java应用,后端
    • 部署前端
    • DockerCompose(快速部署)

docker

简化环境配置流程
单体架构

  • 架构简单
  • 部署成本低
  • 团队协作成本高
  • 系统发布效率低
  • 系统可用性差
    单体架构适合开发功能相对简单,规模较小的项目

微服务架构

  • 颗粒度小
  • 团队自治
  • 服务自治
  • 但是开发(有些功能是需要跨模块的)和运维的复杂度直线上升

拆封原则

  • 高内聚
  • 低耦合
  • 纵向拆分,按照业务模块拆分
  • 横向拆分,抽取公共服务(比如短信模块\登录模块,在很多模块中都用的到的),提高复用性

docker在linux上的安装

步骤参考
https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBkShcucLZbrn2d
飞书云文档

部署mysql

绿色软件,下载只需要拷贝流程的软件
一般的软件安装,还需要写入一些动态连接库(DLL),向系统注册表中写入相应的设置项等等
而docker的安装就类似绿色软件的安装,没那么多杂七杂八的步骤

  • 应用镜像,包含应用运行所需的环境\配置\系统函数库
  • 容器,运行镜像时,创建一个隔离环境
  • docker安装,相当从镜像仓库直接安装一个绿色包
  • 镜像仓库,存储和管理镜像的平台,dockerHub

部署mysql命令解读

docker run -d \                //创建并运行一个容器  -d让容器后台运行--name mysql \				//容器起名-p 3306:3306 \				//设置端口映射,一个容器有端口有ip但对外不可访问,可以通过当前宿主机映射访问3306(宿主端口):3306(容器端口)-e TZ=Asia/Shanghai \			//设置配置文件-e MYSQL_ROOT_PASSWORD=123 \	mysql			//运行镜像的名字

常见命令

在这里插入图片描述容器内部可以模拟一整套系统.甚至可以在linux中容器运行容器,无限套娃
镜像和容器的命令操作是不一样的,比如docker rm nginx是删除了容器,但是这个镜像仍然存在在系统上
基础命令

# 启动Docker服务
systemctl start docker# 停止Docker服务
systemctl stop docker# 重启Docker服务
systemctl restart docker# 设置Docker服务开机自启
systemctl enable docker# 查看Docker服务运行状态
systemctl status docker# 查看Docker版本信息
docker version
docker info

镜像命令

# 查看本地所有Docker镜像
docker images# 从Docker Hub搜索镜像
docker search mysql# 拉取Docker镜像
docker pull mysql
docker pull mysql:5.7.40# 删除本地Docker镜像
docker rmi mysql
docker rmi -f mysql:5.7.40

容器命令

# 列出所有运行中的容器
docker ps# 列出所有容器,包括未运行的
docker ps -a# 停止运行中的容器
docker stop container_id# 强制停止容器
docker kill container_id# 启动已停止的容器
docker start container_id# 查看容器的详细信息
docker inspect container_id# 查看容器日志
docker container logs container_id# 进入运行中的容器
docker exec -it container_id /bin/bash# 删除已停止的容器
docker rm container_id
docker rm -f container_id

数据卷命令

# 列出所有数据卷
docker volume ls# 创建新的数据卷
docker volume create volume_name# 删除指定的数据卷
docker volume rm volume_name# 查看数据卷的详细信息
docker volume inspect volume_name

数据卷挂载

是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁

docker run -d --name nginx -p 80:80 -v \
> html:/usr/share/nginx/html nginx      //数据卷:容器内目录

数据卷将容器中的nginx的/usr/share/nginx/html映射到宿主机的/var/lib/docker/volumes/html/_data

以宿主目录自定义挂载

docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \-v ./mysql/data:/var/lib/mysql \          //本地目录:容器内目录-v ./mysql/conf:/etc/mysql/conf.d \-v ./mysql/init:/docker-entrypoint-initdb.d \mysql

Dockerfile语法

自己制作自己项目的docker镜像
从0部署java应用的流程:

  • 准备一个linux系统
  • 安装并配置jdk
  • 上传jar包
  • 运行jar包
    所以镜像制作也应该是这样做
    但是从零开始构建镜像太麻烦了,所以docker官方给我们制作了基础镜像(包含linux运行环境的)
    也有提供基础环境加jdk环境的镜像只需要从此基础上制作java镜像就可以了
    所以镜像的制作是分层制作的
// 基础镜像
FROM openjdk:11.0-jre-buster
// 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
// 拷贝jar包
COPY docker-demo.jar /app.jar
// 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

所以我们只需要设定与jar包相关的环境变量的镜像,jar包镜像,程序运行入口的镜像

自定义镜像

通过dockerfile构建镜像(在dockerfile同级目录下要有jar包)
docker build -t docker-demo:1.0 /root/demo// /root/demo是jar包和dockerfile的路径

容器网络互联

因为每一个容器都有一个ip地址,然后就可以通过网桥连接不同的容器,在一个容器的内部就可以访问另一个容器
网桥的概念还是不懂,要了解一下

# 1.用基本命令,寻找Networks.bridge.IPAddress属性
docker inspect mysql
# 也可以使用format过滤结果
docker inspect --format='{{range .NetworkSettings.Networks}}{{println .IPAddress}}{{end}}' mysql
# 得到IP地址如下:
172.17.0.2# 2.然后通过命令进入dd容器
docker exec -it dd bash# 3.在容器内,通过ping命令测试网络
ping 172.17.0.2
# 结果
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.053 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.059 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.058 ms

但是ip地址容易变化,所以还是要通过名称去访问

# 1.首先通过命令创建一个网络
docker network create hmall# 2.然后查看网络
docker network ls
# 结果:
NETWORK ID     NAME      DRIVER    SCOPE
639bc44d0a87   bridge    bridge    local
403f16ec62a2   hmall     bridge    local
0dc0f72a0fbb   host      host      local
cd8d3e8df47b   none      null      local
# 其中,除了hmall以外,其它都是默认的网络# 3.让dd和mysql都加入该网络,注意,在加入网络时可以通过--alias给容器起别名
# 这样该网络内的其它容器可以用别名互相访问!
# 3.1.mysql容器,指定别名为db,另外每一个容器都有一个别名是容器名
docker network connect hmall mysql --alias db
# 3.2.db容器,也就是我们的java项目
docker network connect hmall dd# 4.进入dd容器,尝试利用别名访问db
# 4.1.进入容器
docker exec -it dd bash
# 4.2.用db别名访问
ping db
# 结果
PING db (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=2 ttl=64 time=0.056 ms
# 4.3.用容器名访问
ping mysql
# 结果:
PING mysql (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=1 ttl=64 time=0.044 ms
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=2 ttl=64 time=0.054 ms

常用网络命令

创建网络
docker network create <network_name>
列出网络
docker network ls
查看网络详情
docker network inspect <network_name>
连接容器到网络
docker network connect <network_name> <container_name>
断开容器与网络的连接
docker network disconnect <network_name> <container_name>
删除网络
docker network rm <network_name>

部署java应用,后端

# 1.构建项目镜像,不指定tag,则默认为latest
docker build -t hmall .# 2.查看镜像
docker images
# 结果
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
hmall         latest    0bb07b2c34b9   43 seconds ago   362MB
docker-demo   1.0       49743484da68   24 hours ago     327MB
nginx         latest    605c77e624dd   16 months ago    141MB
mysql         latest    3218b38490ce   17 months ago    516MB# 3.创建并运行容器,并通过--network将其加入hmall网络,这样才能通过容器名访问mysql
docker run -d --name hmall --network hmall -p 8080:8080 hmall

部署前端

docker run -d \--name nginx \-p 18080:18080 \-p 18081:18081 \-v /root/nginx/html:/usr/share/nginx/html \-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \--network hmall \nginx

DockerCompose(快速部署)

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

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

相关文章

02.ABAP工作台介绍

总学习目录请点击下面连接 SAP ABAP开发从0到入职&#xff0c;冷冬备战-CSDN博客 目录 1.知识库和对象浏览器 目的&#xff1a; 知识库有那些对象 知识库对象结构 如何去知识库查找对象 第一个是知识库信息系统 2.知识库和对象浏览器操作 3.开发abap程序 创建新的AB…

【Axure视频教程】中继器表格——筛选后的条件判断

今天教大家在Axure制作中继器表格筛选以及筛选后条件交互的原型模板&#xff0c;我们可以在输入框里输入员工姓名&#xff0c;点击查询按钮后可以筛选出对应的数据&#xff0c;筛选后会进行条件判断&#xff0c;如果筛选不到任何数据&#xff0c;就会显示提示弹窗。这个原型模板…

华为ensp中nat server 公网访问内网服务器

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月15日17点30分 &#x1f4af;趣站推荐&#x1f4af; 前些天发现了一个巨牛的&#x1f916;人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

Redis 可以代替 MySQL 作为数据库吗?

当使用Redis作为数据库时&#xff0c;以下是一些基本的代码示例 展示了如何使用Redis进行数据存储、读取和更新&#xff1a; 1.连接到Redis服务器&#xff1a; import redis# 创建Redis连接 r redis.Redis(hostlocalhost, port6379, db0)2.存储和获取数据&#xff1a; # 存…

C语言(一维数组练习)

键盘录入一组数列&#xff0c;利用冒泡排序将数据由大到小排序 #include <stdio.h>int main(int argc,char *argv[]) {int i,j,tmep;int arr[10];printf("请输入10个测试整数&#xff1a;\n");int lensizeof(arr)/sizeof(arr[0]);for(i0;i<len;i){scanf(&q…

【C++】动态内存管理

目录 一、C/C的内存分布 &#x1f354;内存的划分 &#x1f35f;C语言动态内存管理方式 &#x1f32e;C动态内存管理方式 二、new 和 delete &#x1f354;new 和 delete 操作自定义类型 &#x1f35f;operator new 与 operator delete 函数 &#x1f32e;面试题&#x…

开发者如何使用GCC提升开发效率Opencv人脸检测

阅读此篇前请务必阅读以下两篇&#xff0c;不然你可能都不会安装环境 文章目录 简单人脸识别第三方模型集成人脸检测 简单人脸识别 使用Opencv自带的haarcascade_frontalface_alt2模型&#xff0c;始终差一个人没标出来&#xff0c;很尴尬 报错找不到模型 EveryThing搜索一遍…

梯度提升树(GBDT)与房价预测案例

文章目录 什么是梯度提升树&#xff08;GBDT&#xff09;&#xff1f;核心思想GBDT 的特点 梯度提升树的应用案例&#xff1a;房价预测场景描述步骤详解代码详情 详细代码讲解1. 导入必要的库2. 设置中文字体支持3. 可视化真实值与预测值4. 可视化预测误差分布5. 代码的运行效果…

VMware详细安装教程

1.获取安装包 官网下载地址&#xff1a; https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html 2.安装过程 双击安装包进行安装 接受许可协议 选择安装路径&#xff08;c 盘空间大的话&#xff0c;建议保持默认&#xff09; 用户体验设置&…

STM32 软件模拟I2C 操作时序图

m24c02芯片手册可以查看时序图 起始和停止信号 写一个字节&#xff1a; 主发送起始-》 CPU 芯片内部的I2C 控制器&#xff08;片上外设主设备&#xff09;-》发送起始信号-》发送设备地址-》EEPROM&#xff08;从设备&#xff09;返回回应信号-》主发字节起始地址-》从回应-》…

2024年软件测试面试题(800道)【附带答案】持续更新...

新的一年又到了立flag的时候&#xff0c;今年你的目标是拿下大厂offer&#xff1f;还是多少万年薪&#xff1f;其实这些都离不开日积月累的过程。 为此我特意整理出一份&#xff08;超详细笔记/面试题&#xff09;它几乎涵盖了所有的测试开发技术栈&#xff0c;非常珍贵&#…

jdk1.7 发送post请求

所需依赖为 引入依赖为 import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.PostMethod;特别说明 tmpString为json对象 System.out.println("tmpString " tmpString);// 处理发送https 错误问题SSLContext context …

鸿蒙音乐播放器(超详细)

基于API9的音乐播放器&#xff0c;可播放&#xff0c;暂停&#xff0c;上&#xff0c;下一首歌曲切换等功能 文章目录 1.效果展示 2.首页 3.播放页 注&#xff1a;需要使用模拟器或真机调试运行 一、效果展示 1.首页样式&#xff1a; 2.播放样式&#xff1a; 二、首页功能代码…

基于SQL数据库的酒店管理系统

一、数据库设计 1&#xff0e;需求分析 客房的预定&#xff1a;可以通过网络进行预定&#xff0c;预定修改&#xff0c;取消预订。 客房管理&#xff1a;预定管理、客房查询、设置房态、开房、换房、续住、退房等管理。 员工管理: 员工修改信息、人员调配。 账务管理&…

绿色智能:AI机器学习在环境保护中的深度应用与实践案例

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

2.vue常用指令

2.vue常用指令 目录 1. vue的基础语法结构2. 插值语法3. vue常用指令 3.1 v-html语法结构3.2 v-text3.3 v-bind 绑定动态属性3.4 v-on 添加事件 语法格式3.4.1事件绑定3.4.2 获取event对象3.4.3 动态事件缩写3.4.5 事件绑定的修饰符 3.5 v-if v-else-if v-else5.6 v-show5.7 …

《Solana 中文开发教程》学习笔记(Part 1~4)

Part 1 &#xff1a;Solana介绍 2017年11月&#xff0c;Anatoly Yakovenko发表了一篇白皮书&#xff0c;介绍了“Proof of History”这一技术 Part 2 &#xff1a;Solana介绍 Account 在Solana中&#xff0c;"Everythin is an Account" 类似Linux世界里面把所有的…

基于触觉感知的目标识别技术在智能机器人抓取中的应用综述

引言在智能机器人抓取任务中&#xff0c;目标识别是一个核心问题。机器人不仅需要识别物体&#xff0c;还需根据物体的形状、纹理、硬度等信息来规划抓取策略。传统的目标识别方法通常依赖于视觉信息&#xff0c;但在许多复杂环境中&#xff0c;单一视觉信息往往不能提供足够的…

huggingface 中模型如何查找和使用?

在 Models - Hugging Face模型中找使用方法 https://hf-mirror.com/ 一&#xff1a;如何找到统一使用方法 对于文字处理AutoTokenizer是一样的&#xff0c;模型名可能不一样。具体操作如下&#xff1a; 1. 先在模型下面找到你需要的模型点开 2. 点开最右边的Use in Transfor…

AgentLego:组装大模型智能体“乐高”

1 AgentLego 1.1 AgentLego 是什么 AgentLego 是一个提供了多种开源工具 API 的多模态工具包&#xff0c;旨在像是乐高积木一样&#xff0c;让用户可以快速简便地拓展自定义工具&#xff0c;从而组装出自己的智能体。通过 AgentLego 算法库&#xff0c;不仅可以直接使用多种工…