[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.25
    environment:
     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-server
          environment:
            MODE: standalone
          ports:
            - "8848:8848"
        mysql:
          image: mysql:5.7.25
          environment:
            MYSQL_ROOT_PASSWORD: 123
          volumes:
            - "$PWD/mysql/data:/var/lib/mysql"
            - "$PWD/mysql/conf:/etc/mysql/conf.d/"
        userservice:
          build: ./user-service
        orderservice:
          build: ./order-service
        gateway:
          build: ./gateway
          ports:
            - "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.mfbz.cn/a/324414.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

API接口用例生成器

1、前言 随着自动化测试技术的普及,已经有很多公司或项目,多多少少都会进行自动化测试。 目前本部门的自动化测试以接口自动化为主,接口用例采用 Excel 进行维护,按照既定的接口用例编写规则,对于功能测试人员来说只…

[渗透测试学习] Hospital - HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描一下端口 发现8080端口和443端口有http服务 然后发现3389端口是启用了ms-wbt-server服务 在对443端口的扫描没有收获,并且只有邮箱登录界面无法注册 接着看向8080端口,我们随便注册用户登录后发现有文件上传功能 getshell …

随心玩玩(十三)Stable Diffusion初窥门径

写在前面:时代在进步,技术在进步,赶紧跑来玩玩 文章目录 简介配置要求安装部署下载模型启动ui插件安装教程分区提示词插件Adetailer插件提示词的分步采样采样器选择采样器的收敛性UniPC采样器 高分辨率修复 (Hires. fix)图生图ControlNet介绍…

无需编程,简单易上手的家具小程序搭建方法分享

想要开设一家家具店的小程序吗?现在,我将为大家介绍如何使用乔拓云平台搭建一个家具小程序,帮助您方便快捷地开展线上家具销售业务。 第一步,登录乔拓云平台进入商城后台管理页面。 第二步,在乔拓云平台的后台管理页面…

一文彻底解析 Compose 的穿透刺客 -- CompositionLocal

Compose 官方说明一直很简洁:CompositionLocal 是通过组合隐式向下传递数据的工具。 两个核心:隐式、向下传递,咋一看很懵,先不着急去理解,我们先看一段非常简单的代码: class MainActivity : ComponentAc…

c语言for循环和水仙花

c语言for循环和水仙花 c语言for循环和水仙花 c语言for循环和水仙花一、for循环语句格式二、for循环案例水仙花 一、for循环语句格式 for(初始值&#xff1b;表达式&#xff1b;表达式) { 代码 }int main() {for (int i 0; i < 10; i){printf("%d\n", i);} }二、f…

Protobuf小记(万字)

Protobuf小记 序列化概念序列化和反序列化 ProtoBuf 初识快速上手通讯录 1.0通讯录 1.0 - 函数 API 小结 编译 contacts.proto 文件&#xff0c;生成 C 文件 proto 3 语法详解字段规则消息类型的定义与使用定义 通讯录 2.0通讯录 2.0 的写入实现通讯录 2.0 的输出实现通讯录 2.…

Java 线程

1. 实现多线程的 2 种方式 Oracle 官网的文档中给出了 2 种实现多线程的方式&#xff1a; 实现 Runnable 接口&#xff1b;继承 Thread 类。 以上两种方式都会调用 Thread.run() 方法&#xff0c;区别是&#xff1a; 实现 Runnable 接口&#xff0c;只是执行 Thread.run() …

数仓面试之手写拉链表SQL,并分析有多少个job

数仓面试之手写拉链表SQL&#xff0c;并分析有多少个job 拉链表定义 维护历史状态&#xff0c;以及最新状态数据的一种表&#xff0c;拉链表根据拉链粒度的不同&#xff0c;实际上相当于快照&#xff0c;只不过做了优化&#xff0c;去除了一部分不变的记录而已,通过拉链表可以…

Nginx——强化基础配置

1、牢记Context Context是Nginx中每条指令都会附带的信息&#xff0c;用来说明指令在哪个指令块中使用&#xff0c;可以将Context 理解为配置环境。 每个指令都拥有自己的配置环境&#xff0c;如果把配置环境记错了&#xff0c;或者在设计时未考虑配置环境的作用&#xff0c;…

第十二章 Java内存模型与线程(二)

文章目录 12.4 Java与线程12.4.1 线程的实现12.4.2 Java线程调度12.4.3 状态转换 12.4 Java与线程 12.4.1 线程的实现 实现线程主要有三种方式&#xff1a;使用内核线程实现&#xff08;1&#xff1a; 1 实现&#xff09;&#xff0c;使用用户线程实现&#xff08;1&#xff…

QT - qwtplot3d-3D图标

QT - qwtplot3d-3D图标 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "qwt3d_axis.h"using namespace Qwt3D;Axis::Axis() {init(); };Axis::~Axis() { }Axis::Axis(Triple beg, Triple end) {init();setPosition(beg,end); }void Axi…

GAN在图像数据增强中的应用

在图像数据增强领域&#xff0c;生成对抗网络&#xff08;GAN&#xff09;的应用主要集中在通过生成新的图像数据来扩展现有数据集的规模和多样性。这种方法特别适用于训练数据有限的情况&#xff0c;可以通过增加数据的多样性来提高机器学习模型的性能和泛化能力。 以下是GAN在…

RabbitMQ交换机(2)-Direct

1.Direct 直连(路由)交换机,生产者将消息发送到交换机&#xff0c;并指定消息的Routing Key&#xff08;路由键&#xff09;。交换机会将Routing Key与队列绑定进行匹配&#xff0c;如果匹配成功&#xff0c;则将该消息路由到对应的队列中。如果没有匹配成功&#xff0c;该消息…

如何看待 Linux 内核邮件列表重启将内核中的 C 代码转换为 C++

如何看待 Linux 内核邮件列表重启将内核中的 C 代码转换为 C 的讨论&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿…

2024年腾讯云服务器购买价格,真便宜

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

数据库——DAY3(练习-在表中查找数据-单表查询)

一、实验要求&#xff08;单表查询&#xff09; 素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 fl…

pod 控制器

pod 控制器&#xff1a; pv pvc 动态pv pod控制器&#xff1a;工作负载&#xff0c;workload&#xff0c;用于管理pod的中间层&#xff0c;确保pod资源符号预期的状态。 预期状态&#xff1a; 1&#xff0c;副本数 2&#xff0c;容器的重启策略 3&#xff0c;镜像拉取策略…

【WSL】Win10 使用 WSL2 进行 Linux GPU 开发

1. GPU 驱动 先安装 驱动 参考 https://docs.nvidia.com/cuda/wsl-user-guide/index.html 使用 https://www.nvidia.com/Download/index.aspx 提供的兼容 GeForce 或 NVIDIA RTX/Quadro 显卡在系统上安装 NVIDIA GeForce Game Ready 或 NVIDIA RTX Quadro Windows 11 显示驱动…

【征服redis2】redis的事务与lua

1.redis事务介绍 在前面我们介绍了redis的几种典型数据结构和应用&#xff0c;本文我们来看一下redis的事务问题。事务也是数据库的重要主题&#xff0c;熟悉关系型数据库的读者应该对事务比较了解&#xff0c;简单地说&#xff0c;事务表示一组动作&#xff0c;要么全部执行&…