开发自救手册 开发自救手册
首页
  • Java指南

    • 手册的初衷以及适用人群
    • 介绍
    • JAVA涉及技术总览
  • 技术场景

    • 线上代码覆盖率监控
  • cpp自救指南
  • go指南
  • 真正的面经系列
  • 经历分享
  • 相关文章

    • 25届实习内推
  • 微服务
友情链接
  • 团队介绍
  • 如何加入
GitHub (opens new window)
首页
  • Java指南

    • 手册的初衷以及适用人群
    • 介绍
    • JAVA涉及技术总览
  • 技术场景

    • 线上代码覆盖率监控
  • cpp自救指南
  • go指南
  • 真正的面经系列
  • 经历分享
  • 相关文章

    • 25届实习内推
  • 微服务
友情链接
  • 团队介绍
  • 如何加入
GitHub (opens new window)
  • 微服务

    • 微服务介绍
    • EureKa注册中心
    • Ribbon负载均衡
    • Nacos注册中心、配置中心
    • OpenFeign远程调用
    • Gateway统一网关
    • Docker
      • Docker与虚拟机
      • 镜像和容器
      • Docker和DockerHub
      • Docker架构
      • Docker镜像操作练习
      • Docker基本操作-容器
      • 数据卷
        • 操作数据卷
        • 挂载数据卷
        • 宿主机目录直接挂载到容器
      • Dockerfile自定义镜像
        • 镜像结构
      • 自定义镜像
        • 什么是Dockerfile
    • DockerCompose
    • RabbitMQ
    • Sentinel微服务保护
  • 八股文
  • 微服务
ethandu
2024-05-02
目录

Docker

# Docker

image-20220213114201591

image-20220213114229582

image-20220213114309650

image-20220213114402754

image-20220213114446955

image-20220213114537910

image-20220213114613763

总结:

image-20220213114644298

# Docker与虚拟机

Docker把应用所需要的依赖,函数库甚至操作系统函数库都

一并打包,当应用运行时可以直接调用本地的函数库和内核(也就是linux操作系统内核)交互,那样就不用管是什么系统应用了,这样就形成了跨系统的运行了。

虚拟机:使用Hypervisor技术模拟出一个计算机的各种硬件,在模拟的计算机上安装各种操作系统,然后安装各种应用。当应用执行时,它会以为自己在一台真的电脑上,它会先调用内置的操作系统,然后操作系统和Hypervisor进行交互,然后再把信息传递给外部的操作系统,然后外部操作系统在去操作真实硬件。这样子性能和docker比是会差一点的(docker是直接调用操作系统内核的)。

image-20220213115421990

总结:

image-20220213115451580

# 镜像和容器

image-20220213115653421

# Docker和DockerHub

image-20220213115729914

# Docker架构

image-20220213115907054

总结:

image-20220213120019190

# Docker镜像操作练习

image-20220213120058536

image-20220213120135474

image-20220213120158110

image-20220213120209139

将镜像保存: docker save -o redis.tar redis:latest(-o 代表输出)

image-20220213120333856

image-20220213120341596

希望将这个镜像加载回来 先删除这个镜像

image-20220213120426202

image-20220213120432360

用tar包加载回来

image-20220213120448258

image-20220213120455337

又回来了

# Docker基本操作-容器

image-20220213120541127

image-20220213120548361

image-20220213120636139

image-20220213120730653

image-20220213120738410

image-20220213120802160

image-20220213120811647

image-20220213120818659

image-20220213120826912

一步到位 docker exec -it mr redis-cli (进入一个容器执行一个命令)

image-20220213120857382

# 数据卷

image-20220213121141562

我们利用docker创建了一个新的数据卷html那么docker一定会在这个指定的目录下创建一个真实目录 然后每一个数据卷都和真实目录进行映射

image-20220213121347514

容器在创建的时候可以使用数据卷

这里通过Volumes可以实现容器中的数据和宿主机中真实位置的文件双向绑定

image-20220213121456541

image-20220213121607199

假如容器删了 但是只要挂载的数据卷没删以后的新容器也挂载在这个数据卷上的话以前的数据就还是能用的

# 操作数据卷

image-20220213121743472

案例:

image-20220213121759156

image-20220213121829753

image-20220213121843048

image-20220213121854704

特别要注意的是Mountpoint(挂载点)

image-20220213121915345

删除数据卷

image-20220213122012379

image-20220213122045828

image-20220213122053966

指定删除

image-20220213122105760

image-20220213122116324

image-20220213122142022

总结:

image-20220213122205247

# 挂载数据卷

image-20220213134918142

image-20220213134949401

image-20220213135131464

image-20220213135218175

image-20220213135226031

这个时候我们想知道它挂载的目录在哪里

image-20220213135302202

image-20220213135312782

这说明已经挂载在宿主机的这个位置上了

修改index.html

image-20220213135441075

image-20220213135457608

这样子的话我们就可以在高级编辑器里面修改了

image-20220213135549674

image-20220213135608773

image-20220213135616441

这说明启动指定数据卷的时候 不存在数据卷的时候docker也会自动创建

image-20220213135707173

总结:

image-20220213135717014

# 宿主机目录直接挂载到容器

image-20220213135844322

image-20220213140029600

image-20220213140043923

mkdir(-p多级创建目录)

image-20220213140115932

image-20220213140200830

到这所有的准备工作都完成了

到官网上查看一下运行容器的命令(-e是环境变量)

image-20220213140240631

这里官网的还差了端口和数据卷的挂载我们对它进行改造

-p(容器内端口:宿主机端口) -d(后台运行)--name(容器名指定)

image-20220213140534845

这里我们查看官方文档再继续编辑

image-20220213140715095

image-20220213140800451

image-20220213140810981

image-20220213140825629

image-20220213140902354

image-20220213140916598

数据卷挂载方式对比

宿主机目录挂载优势我自己创建的所以定位很方便 但是需要自己管理

容器内目录挂载优势是自动化 但是不容易定位

总结:

image-20220213141122780

# Dockerfile自定义镜像

我们以后写的微服务代码需要自己制作镜像

# 镜像结构

  • 镜像是将应用程序及其需要的系统函数库 环境 配置 依赖打包而成。

我们拿mysql镜像举例

image-20220213141603014

总结:

image-20220213141659546

# 自定义镜像

# 什么是Dockerfile

image-20220213141757118

image-20220213141952933

image-20220213142102653

将课前资料上传到虚拟机里面

image-20220213143200555

这里我们使用dockerfile创建这个镜像

-t(意思是tag) 后面的空格+"."意思是告诉Dockerfile在哪里 因为这里的Dockerfile和当前目录是同级的所以我们直接用一个"."来告知位置

image-20220213143325879

这里它就是在逐步的执行我们的指令了

image-20220213143553014

image-20220213143644601

image-20220213143804475

到这里就完成了

但是我们发现上面这么多的部分实际上都是在安装jdk 构建我们自己的项目的步骤就下面一点点 那么我们是不是可以在一个用上面步骤创建的镜像的基础上使用dockerfile创建自己的镜像呢

image-20220213143935985

image-20220213144123240

这里我们基于java:8-alpine来写dockerfile 这下就非常简单了

image-20220213144155771

image-20220213144541643

image-20220213144725061

总结:

image-20220213144634794

上次更新: 2024/05/02, 13:47:32
Gateway统一网关
DockerCompose

← Gateway统一网关 DockerCompose→

Theme by Vdoing | Copyright © 2019-2024 Backend Development | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式