[GN] 微服务开发框架 --- Docker的应用 (24.1.9)

文章目录

  • 前言
    • Docekr
      • 镜像命令
    • Docekr
      • 镜像命令
      • 容器操作
        • 创建容器
        • 查看容器日志
        • 查看容器状态
        • 进入容器
      • 数据卷
        • 数据集操作命令
        • 给nginx挂载数据卷
        • 给MySQL挂载本地目录
      • Dockerfile自定义镜像
        • 镜像结构
      • 使用Dockerfile构建Java项目
        • 基于Ubuntu构建Java项目
        • 基于java8构建Java项目
      • Docker-Compose
        • 初识DockerCompose
        • 部署微服务集群
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

Docekr

首先去DockerHub中选择一个镜像 这里以nginx镜像为例

镜像命令

  • 镜像拉取
docker pull nginx
  • 查看拉取到的镜像
docker images
  • 保存镜像
docker save --help //查看用法
docker save -o [保存的目标文件名称] [镜像名称]docker save -o nginx.tar nginx:latest //导出镜像到磁盘 

在这里插入图片描述

  • 导入镜像

先删除本地的nginx镜像:

docker rmi nginx:latest

然后运行命令,加载本地文件:

docker load -i nginx.tar

Docekr

首先去DockerHub中选择一个镜像 这里以nginx镜像为例

镜像命令

  • 镜像拉取
docker pull nginx
  • 查看拉取到的镜像
docker images
  • 保存镜像
docker save --help //查看用法
docker save -o [保存的目标文件名称] [镜像名称]docker save -o nginx.tar nginx:latest //导出镜像到磁盘 

在这里插入图片描述

  • 导入镜像

先删除本地的nginx镜像:

docker rmi nginx:latest

然后运行命令,加载本地文件:

docker load -i nginx.tar

在这里插入图片描述

容器操作

在这里插入图片描述

其中:

  • docker run:创建并运行一个容器,处于运行状态

  • docker pause:让一个运行的容器暂停

  • docker unpause:让一个容器从暂停状态恢复运行

  • docker stop:停止一个运行的容器

  • docker start:让一个停止的容器再次运行

  • docker rm:删除一个容器

创建容器

创建并运行nginx容器的命令:

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

命令解读:

  • docker run :创建并运行一个容器
  • –name : 给容器起一个名字,比如叫做mn
  • -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • nginx:镜像名称,例如nginx

默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。

现在,将容器的80与宿主机的80关联起.

查看容器日志
 docker logs
- 添加 -f 参数可以持续查看日志
查看容器状态
 docker ps
- docker ps -a 查看所有容器,包括已经停止的
进入容器
docker exec -it [容器名] [要执行的命令]

数据卷

**数据卷(volume)**是一个虚拟目录,指向宿主机文件系统中的某个目录。

在这里插入图片描述

虚拟的数据卷指向文件系统

但容器中的文件指向数据卷

即操作文件系统内的文件相当于操作容器

数据集操作命令

数据卷的作用:

  • 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

数据卷操作:

  • docker volume create:创建数据卷
  • docker volume ls:查看所有数据卷
  • docker volume inspect:查看数据卷详细信息,包括关联的宿主机目录位置
  • docker volume rm:删除指定数据卷
  • docker volume prune:删除所有未使用的数据卷

单纯创建一个数据卷

docker volume create html

查看数据卷在宿主机目录位置

docker volume ls

在这里插入图片描述

查看数据卷详细信息卷

docker volume inspect html

在这里插入图片描述

可以看到,我们创建的html这个数据卷关联的宿主机目录

给nginx挂载数据卷

已经知道nginx的html目录所在位置/usr/share/nginx/html

  1. 在创建nginx容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下:
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx
  • -v html:/usr/share/nginx/html :把html数据卷挂载到容器内的/usr/share/nginx/html这个目录中
  1. 查看html数据卷所在文件系统位置
# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html
给MySQL挂载本地目录

上述是系统为我们分配数据卷映射到宿主机位置,

需要 docker volume inspect 去查看位置

在这里插入图片描述

下面我们介绍直接挂栽到宿主机目录上的方式

  1. 目录挂载与数据卷挂载的语法是类似的:

    • -v [宿主机目录]:[容器内目录]

    • -v [宿主机文件]:[容器内文件]

  2. 创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

    • 在将课前资料中的mysql.tar文件上传到虚拟机,通过load命令加载为镜像 docker -i load ~

    • 创建目录/tmp/mysql/data

    • 创建目录/tmp/mysql/conf,将课前资料提供的hmy.cnf文件上传到/tmp/mysql/conf

    • 去DockerHub查阅资料,创建并运行MySQL容器,要求:

      ① 挂载/tmp/mysql/data到mysql容器内数据存储目录

      ② 挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件

      ③ 设置MySQL密码

目录挂载自己动手创建目录 直接实现 宿主机目录 与 容器目录 相映射, 虽然耦合度高 但易查找

数据卷挂载 docker 管理 耦合度低 但目录深

Dockerfile自定义镜像

镜像结构

在这里插入图片描述

构建自定义的镜像时,并不需要一个个文件去拷贝,打包。

我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。

而描述上述信息的文件就是Dockerfile文件。

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。

在这里插入图片描述

更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder

使用Dockerfile构建Java项目

基于Ubuntu构建Java项目

基于Ubuntu镜像构建一个新镜像,运行一个java项目

  1. 新建一个空文件夹docker-demo

  2. 拷贝资料提供的Dockerfile到docker-demo这个目录
    在这里插入图片描述

  3. 其中的内容如下:

    # 指定基础镜像
    FROM ubuntu:16.04
    # 配置环境变量,JDK的安装目录
    ENV JAVA_DIR=/usr/local# 拷贝jdk和java项目的包
    COPY ./jdk8.tar.gz $JAVA_DIR/
    COPY ./docker-demo.jar /tmp/app.jar# 安装JDK
    RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8# 配置环境变量
    ENV JAVA_HOME=$JAVA_DIR/java8
    ENV PATH=$PATH:$JAVA_HOME/bin# 暴露端口
    EXPOSE 8090
    # 入口,java项目的启动命令
    ENTRYPOINT java -jar /tmp/app.jar
    
  4. 步骤5:进入docker-demo

    将准备好的docker-demo上传到虚拟机任意目录,然后进入docker-demo目录下

  5. 步骤6:运行命令:

    docker build -t javaweb:1.0 .
    

    就可以访问你的web项目了

基于java8构建Java项目

我们都可以在一些安装了部分软件的基础镜像 ------ java:8-alpine 上做改造

  • ① 新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile

  • ② 拷贝课前资料提供的docker-demo.jar到这个目录中

  • ③ 编写Dockerfile文件:

    • a )基于java:8-alpine作为基础镜像

    • b )将app.jar拷贝到镜像中

    • c )暴露端口

    • d )编写入口ENTRYPOINT

      内容如下:

      FROM java:8-alpine
      COPY ./app.jar /tmp/app.jar
      EXPOSE 8090
      ENTRYPOINT java -jar /tmp/app.jar
      
  • ④ 使用docker build命令构建镜像

  • ⑤ 使用docker run创建容器并运行

Docker-Compose

初识DockerCompose

Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。格式如下:

version: "3.8"services:mysql:image: mysql:5.7.25environment:MYSQL_ROOT_PASSWORD: 123 volumes:- "/tmp/mysql/data:/var/lib/mysql"- "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"web:build: .ports:- "8090:8090"

在这里插入图片描述

上面的Compose文件就描述一个项目,其中包含两个容器:

微服务集群不犹豫端口映射

  • 第一个容器名称即 mysql。 环境变量(environment) ; 镜像名称(image);

    数据卷映射(volumes)

  • 第二个容器名称即 web。这里没有镜像,选择了先在当前目录构建镜像

部署微服务集群

将之前文章写好的 user_service 和 order_service的项目进行微服务集群部署

在这里插入图片描述

  1. 先建立一个cloud_demo文件,在里面建立三个微服务文件夹gateway, user-service, order-service 并编写Dockerfile。并将每个项目jar包放进去

    • Dockerfile是自定义构建镜像, 并运行java项目的Jar包 构成微服务

    • FROM java:8-alpine
      COPY ./app.jar /tmp/app.jar
      ENTRYPOINT java -jar /tmp/app.jar
      

      在这里插入图片描述

  2. 另外三个微服务是基于mysql的,还要建mysql文件夹,并包含conf daya文件配置

image-20240109093534113
  1. 使用docker-compose文件搭建微服务,所以在建个docker-compose,yml

    • 项目,将数据库、nacos地址都命名为docker-compose中的服务名

    • version: "3.2"services:nacos:image: nacos/nacos-serverenvironment:MODE: standaloneports:- "8848:8848"mysql:image: mysql:5.7.25environment:MYSQL_ROOT_PASSWORD: 123volumes:- "$PWD/mysql/data:/var/lib/mysql"- "$PWD/mysql/conf:/etc/mysql/conf.d/"userservice:build: ./user-serviceorderservice:build: ./order-servicegateway:build: ./gatewayports:- "10010:10010"
      
      • nacos:作为注册中心和配置中心
        • image: nacos/nacos-server: 基于nacos/nacos-server镜像构建
        • environment:环境变量
          • MODE: standalone:单点模式启动
        • ports:端口映射,这里暴露了8848端口
      • mysql:数据库
        • image: mysql:5.7.25:镜像版本是mysql:5.7.25
        • environment:环境变量
          • MYSQL_ROOT_PASSWORD: 123:设置数据库root账户的密码为123
        • volumes:数据卷挂载,这里挂载了mysql的data、conf目录,其中有我提前准备好的数据
      • userserviceorderservicegateway:都是基于Dockerfile临时构建的

在这里插入图片描述

  1. 将cloud-demo上传至虚拟机,利用 docker-compose up -d 来部署

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQLServer设置端口,并设置SQLServer和SQLServer Browser服务

SQLServer默认使用动态端口,即每次启动sqlserver.exe时,端口port都会动态变化。若要使用静态端口,比如port1433,则需要在SQL Server Configuration Manager(简称SSMS)里配置。这里以SQL Server 2005 Configuration Man…

按键精灵调用奥迦插件实现图色字识别模拟键鼠操作源码

奥迦插件于2019年9月开始开发,在Windows 10操作系统上使用Visual Studio 2019编写,适用于所有较新的Windows平台,是一款集网络验证,深度学习,内核,视觉,文字,图色,后台,键鼠,窗口,内存,汇编,进程,文件,网络,系统,算法及其它功能于一身的综合插件 插件使用C语言和COM技术编写,是…

室内定位相关中文期刊/学报笔记

这里写目录标题 文章最重要的部分通信学报1. 2023 基于扩散模型的室内定位射频指纹数据增强方法2. 2023 基于 CHAN 的改进卡尔曼滤波室内定位算法3. 2022 基于自适应蝙蝠算法的室内 RFID 定位算法4. 2017 基于核函数特征提取的室内定位算法研究5. 2021 基于CSI张量分解的室内Wi…

【JaveWeb教程】(8)Web前端基础:Vue组件库Element之Table表格组件和Pagination分页组件 详细示例介绍

目录 1 Table表格组件1.1 组件演示1.2 组件属性详解 2 Pagination分页2.1 组件演示2.2 组件属性详解2.3 组件事件详解 接下来我们来学习一下ElementUI的常用组件,对于组件的学习比较简单,我们只需要参考官方提供的代码,然后复制粘贴即可。本节…

c++学习:STL库(框架)+字符串模板类string+vector容器+list链表

目录 stl库 常用组件包括 字符串库 字符串模板类string 头文件 最常用的字符串模板类 字符串类型 模板原型 模板的成员数据类型 模板成员函数 有些函数会有重载,可以去下面网址查看std::basic_string - cppreference.comhttps://zh.cppreference.com/w/cp…

加速科技ST2500 数模混合信号测试设备累计装机量突破500台!

国产数字机,测试中国芯!新年伊始,国产半导体测试设备领军企业加速科技迎来了振奋人心的一刻,ST2500 数模混合信号测试设备累计装机量突破500台!加速科技凭借其持续的创新能力、完善的解决方案能力、专业热忱的本地化服…

【Linux Shell】10. 函数

文章目录 【 1. 函数的定义 】【 2. 函数参数 】 【 1. 函数的定义 】 所有函数在使用前必须定义 。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。 调用函数仅使用其函数名即可 。 函数返回值在调用该函数后通过 $? 来…

SAP SD-DN-MM 交货单相关物料凭证的视图的日期问题

眼下有个需求 获取交货单对应的物料凭证的过账日期BLDAT。 同步BW数据过去 新增一个数据库视图 但是实际使用时,有效部分仅本月,再选择条件里面要加上 MATdoc-bldat > sy-datum - sydatum6(2). 于是使用ST05 跟踪了一下,发现在DD28S…

MCU最小系统原理图中四个问题详解——芯片中有很多电源管脚的原因(VDD/VSS/VBAT)、LC滤波、两级滤波、NC可切换元件

前言:本文对MCU最小系统原理图中的四个问题进行详解:芯片中有很多电源管脚的原因(VDD/VSS/VBAT)、LC滤波、两级滤波、NC可切换元件。本文以GD32F103C8T6最小系统原理图举例 目录: 芯片中有很多电源管脚的原因&#x…

SQL Server 配置远程连接

Windows 安装好 SQL Server 的 SSMS,打开SSMS配置远程连接 找到 配置管理器 启用 TCP/IP 打开防火墙设置 新建入站规则 端口TCP - 特定本地端口 (1433)允许连接下一步名称完成 重启 SQL Server 服务

yum来安装php727

yum 安装php727,一键安装,都是安装在系统的默认位置,方便快捷 先确定linux平台中centos的版本信息,一下内容针对el7 查看linux版本 : cat /etc/redhat-release 查看内核版本命令: cat /proc/version (0)如果有安装好…

使用Adobe Acrobat Pro DC给pdf文件填加水印

前言 GPT4的官方售价是每月20美元,很多人并不是天天用GPT,只是偶尔用一下。 如果调用官方的GPT4接口,就可以按使用量付费,用多少付多少,而且没有3个小时内只能提问50条的使用限制。 但是对很多人来说调用接口是比较麻烦…

了解什么是UV纹理?

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 什么是UV? UV 是与几何图形的顶点信息相对应的二维纹理坐…

温和去油去黑头,只需敷上一刻钟的泥膜就够了

冬季天气干燥,很多朋友脸部更容易出油,连带着黑头也变多了。这是因为干燥的环境会刺激皮脂腺分泌,导致皮肤油脂分泌过多,容易堵塞毛孔形成黑头。因此,在冬季特别需要注意控油去黑头的工作。 控油去黑头需要清洁毛孔&am…

Linux学习(1):目录结构、编辑器和用户管理

Linux学习(1):目录结构、编辑器和用户管理 1 Linux目录结构2 vi和vim编辑器2.1 快捷键练习 3 用户管理3.1 添加用户3.2 删除用户即主目录3.3 切换用户 4 用户组 1 Linux目录结构 在linux世界里,一切皆为文件。 linux目录结构&a…

软件测试|PyQt5实战教程(一)安装与环境配置

简介 我们之前介绍过使用tkinter创建图形用户界面(GUI)应用程序,现在我们来介绍另外一个用于创建GUI的神器——pyQt5,它可以用于创建跨平台的桌面应用程序。PyQt5 实现了一个 Python模块集,有 620 个类,60…

软件测试|如何使用Python取句中中英文内容

简介 提取句子中的中英文内容在自然语言处理中是一个常见任务,通常用于文本处理、机器翻译和语言学研究。本文将详细介绍如何使用 Python 提取句子中的中英文内容,包括准备工作、选择合适的库、编写代码示例和演示示例。 准备工作 我们可以使用Python…

Linux系统SSH远程管理服务概述

目录 一.SSH协议 1.定义 2.优点 (1)加密 (2)压缩 3.SSH的客户端与服务端 (1)客户端 (2)服务端 4.原理 5.实验:使用ssh远程登录 二.OpenSSH服务器 1.概念 2.…

【Linux】之搭建 PostgreSQL 环境

前言 在 Linux 系统下安装 PostgreSQL,可以选择快捷方便的 Docker 安装,但正常的服务器都是直接原生安装的,所以,这里我将讲解如何正常安装 PostgreSQL 以及安装之后的一些配置。如果想了解 Docker 安装的话,可以查看我…

软件测试|Pydantic BaseModel使用详解

简介 当我们在Python中编写应用程序时,通常需要处理和验证数据。Pydantic 是一个流行的库,它可以帮助我们定义数据模型并自动进行数据验证。在Pydantic中,BaseModel是一个核心概念,它用于定义数据模型和验证输入数据。在这篇文章…