docker 笔记2 Docker镜像和数据卷

参考:

 1.镜像是什么?(面试题)


是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
 
只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

 1.1分层的镜像

1.2UnionFS(联合文件系统) 

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

 1.3Docker镜像加载原理 

        docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
 
rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。 

 1.4平时我们安装进虚拟机的CentOS都是好几个G,为什么docker这里才200M? (面试题)

对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。 

1.5为什么 Docker 镜像要采用这种分层结构呢 ?(面试题)

镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。
 
比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;
同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

重点理解 

Docker镜像层都是只读的,容器层是可写的
当容器启动时,一个新的可写层被加载到镜像的顶部。
这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。 

当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。


 

1.6Docker镜像commit操作案例 

docker commit提交容器副本使之成为一个新的镜像

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

 案例演示ubuntu安装vim

从Hub上下载ubuntu镜像到本地并成功运行

原始的默认Ubuntu镜像是不带着vim命令的 

外网连通的情况下,安装vim 

docker容器内执行上述两条命令:
apt-get update
apt-get -y install vim

 安装完成后,commit我们自己的新镜像

[root@localhost test]# docker commit -m="add vim  cmd " -a="zzz"  b6f03f9a5f33  atguigu.myubuntu:1.1
sha256:331f923b17404d61136e2c67e48a8c91dff04c9f75aff020c6c501dd989d5550
[root@localhost test]# docker  images 
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
atguigu.myubuntu   1.1       331f923b1740   30 seconds ago   187MB
redis              latest    7614ae9453d1   20 months ago    113MB
mysql              5.7       c20987f18b13   20 months ago    448MB
mysql              latest    3218b38490ce   20 months ago    516MB
ubuntu             latest    ba6acccedd29   22 months ago    72.8MB

启动我们的新镜像并和原来的对比

[root@localhost test]# docker  images 
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
atguigu.myubuntu   1.1       331f923b1740   30 seconds ago   187MB
redis              latest    7614ae9453d1   20 months ago    113MB
mysql              5.7       c20987f18b13   20 months ago    448MB
mysql              latest    3218b38490ce   20 months ago    516MB
ubuntu             latest    ba6acccedd29   22 months ago    72.8MB
[root@localhost test]# docker run -it 331f923b1740
root@89c2c49edda0:/# vim  a.txt 
root@89c2c49edda0:/# ^C

1 官网是默认下载的Ubuntu没有vim命令
2我们自己commit构建的镜像,新增加了vim功能,可以成功使用。

 
 
Docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。类似Java继承于一个Base基础类,自己再按需扩展。
新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层

2.本地镜像发布到阿里云 

2.1本地镜像发布到阿里云流程

OPTIONS说明:
-a :提交的镜像作者;
-m :提交时的说明文字;

2.2镜像的生成方法

2.3将本地镜像推送到阿里云 

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

创建仓库镜像

选择个人实例

阿里云免费试用 - 阿里云

立即试用 

 

设置 registry 密码 abc123456

 创建命名空间

atguigu123456 

 选择  命名空间 atguigu123456   创建镜像仓库

 2.4操作操作指南 

1. 登录阿里云Docker Registry

$ docker login --username=rsingstar18046059785 registry.cn-shenzhen.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

2. 从Registry中拉取镜像

$ docker pull registry.cn-shenzhen.aliyuncs.com/atguigu123456/atguigu12345678:[镜像版本号]

3. 将镜像推送到Registry

$ docker login --username=rsingstar18046059***(后3位自己加,,) registry.cn-shenzhen.aliyuncs.com$ docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/atguigu123456/atguigu12345678:[镜像版本号]$ docker push registry.cn-shenzhen.aliyuncs.com/atguigu123456/atguigu12345678:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

4. 选择合适的镜像仓库地址

从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-shenzhen.aliyuncs.com 作为Registry的域名登录。

5. 示例

使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。

$ docker imagesREPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZEregistry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB$ docker tag 37bb9c63c8b2 registry-vpc.cn-shenzhen.aliyuncs.com/acs/agent:0.7-dfb6816

使用 "docker push" 命令将该镜像推送至远程。

$ docker push registry-vpc.cn-shenzhen.aliyuncs.com/acs/agent:0.7-dfb6816

 操作:

登录: docker login --username=rsingstar18046059*** registry.cn-shenzhen.aliyuncs.com

 密码abc123456

先将推送: Registry

$ docker login --username=rsingstar18046059785 registry.cn-shenzhen.aliyuncs.com$ docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/atguigu123456/atguigu12345678:[镜像版本号]$ docker push registry.cn-shenzhen.aliyuncs.com/atguigu123456/atguigu12345678:[镜像版本号]

将阿里云上的镜像下载到本地 

先删除在拉取

容器运行成功 

 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

3.本地镜像发布到私有库

3.1Docker Registry 是什么?


1 官方Docker Hub地址:https://hub.docker.com/,中国大陆访问太慢了且准备被阿里云取代的趋势,不太主流。
 
2 Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像给公网,所以需要创建一个本地私人仓库供给团队使用,基于公司内部项目构建镜像。
 
    Docker Registry是官方提供的工具,可以用于构建私有镜像仓库 

3.2将本地镜像推送到私有库 

 1.下载镜像Docker Registry

docker  pull registry
  
docker run -d -p 5000:5000  -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调

2.运行私有库Registry,相当于本地有个私有Docker hub

-v   数据卷 

docker run -d -p 5000:5000  -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调 

[root@localhost ~]# docker  images 
REPOSITORY                                                        TAG       IMAGE ID       CREATED         SIZE
registry.cn-shenzhen.aliyuncs.com/atguigu123456/atguigu12345678   1.1       331f923b1740   6 hours ago     187MB
redis                                                             latest    7614ae9453d1   20 months ago   113MB
mysql                                                             5.7       c20987f18b13   20 months ago   448MB
mysql                                                             latest    3218b38490ce   20 months ago   516MB
registry                                                          latest    b8604a3fe854   21 months ago   26.2MB
ubuntu                                                            latest    ba6acccedd29   22 months ago   72.8MB
[root@localhost ~]# docker run -d -p 5000:5000  -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
docker: invalid reference format.
See 'docker run --help'.
[root@localhost ~]# docker run -d -p 5000:5000  -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
31ad71fb3042a3d4bd71603ade8f03f04b2fb2a8c5dd78e4d1928d3347f4f55c
[root@localhost ~]# docker  ps 
CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
31ad71fb3042   registry    "/entrypoint.sh /etc…"   33 seconds ago   Up 32 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp              romantic_hellman
a413e193d890   redis       "docker-entrypoint.s…"   4 weeks ago      Up 2 hours      0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
6ae5aab74552   mysql:5.7   "docker-entrypoint.s…"   4 weeks ago      Up 2 hours      0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
[root@localhost ~]# 

3.案例演示创建一个新镜像,ubuntu安装ifconfig命令

4. 从Hub上下载ubuntu镜像到本地并成功运行

5.原始的Ubuntu镜像是不带着ifconfig命令的

^C
[root@localhost ~]# docker   run  -it  ubuntu  /bin/bash 
root@824f6a2400aa:/# ^C
root@824f6a2400aa:/# ifconfig 
bash: ifconfig: command not found
root@824f6a2400aa:/# 

 6.外网连通的情况下,安装ifconfig命令并测试通过

docker容器内执行上述两条命令:
apt-get update
apt-get install net-tools

 

 

 7.安装完成后,commit我们自己的新镜像

公式:
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
命令:在容器外执行,记得
docker commit -m="ifconfig cmd add" -a="zzyy" a69d7c825c4f(注意这是容器id) zzyyubuntu:1.2

错写成 imgae id : 会报错,重新开个会话

Last login: Sat Sep  2 19:19:55 2023 from gateway
[root@localhost ~]# docker  ps 
CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
a393315bd74d   ubuntu      "/bin/bash"               22 seconds ago   Up 21 seconds                                                          admiring_euler
31ad71fb3042   registry    "/entrypoint.sh /etc…"   14 minutes ago   Up 14 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp              romantic_hellman
a413e193d890   redis       "docker-entrypoint.s…"   4 weeks ago      Up 3 hours      0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
6ae5aab74552   mysql:5.7   "docker-entrypoint.s…"   4 weeks ago      Up 3 hours      0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
[root@localhost ~]# docker commit -m="ifconfig cmd add" -a="zzyy"  a393315bd74d      zzyyubuntu:1.2
sha256:4e9bf890de32a7b38af8dc2c434e84ff349430ceaeb4233ed704c9eb8ae6dc6e
[root@localhost ~]# docker images 
REPOSITORY                                                        TAG       IMAGE ID       CREATED          SIZE
zzyyubuntu                                                        1.2       4e9bf890de32   22 seconds ago   72.8MB
registry.cn-shenzhen.aliyuncs.com/atguigu123456/atguigu12345678   1.1       331f923b1740   6 hours ago      187MB
redis                                                             latest    7614ae9453d1   20 months ago    113MB
mysql                                                             5.7       c20987f18b13   20 months ago    448MB
mysql                                                             latest    3218b38490ce   20 months ago    516MB
registry                                                          latest    b8604a3fe854   21 months ago    26.2MB
ubuntu                                                            latest    ba6acccedd29   22 months ago    72.8MB
[root@localhost ~]# 

 启动我们的新镜像并和原来的对比

问题:  docker  unbunt exit 退出容器在进去 之后ifconfig失效了

curl验证私服库上有什么镜像 

 curl -XGET http://192.168.111.162:5000/v2/_catalog
 
可以看到,目前私服库没有任何镜像上传过。。。。。。

 将新镜像zzyyubuntu:1.2修改符合私服规范的Tag

 按照公式: docker   tag   镜像:Tag   Host:Port/Repository:Tag
自己host主机IP地址,填写同学你们自己的,不要粘贴错误,O(∩_∩)O
使用命令 docker tag 将zzyyubuntu:1.2 这个镜像修改为192.168.111.162:5000/zzyyubuntu:1.2
 
docker tag  zzyyubuntu:1.2  192.168.111.162:5000/zzyyubuntu:1.2

修改配置文件使之支持http 

 别无脑照着复制,registry-mirrors 配置的是国内阿里提供的镜像加速地址,不用加速的话访问官网的会很慢。
2个配置中间有个逗号 ','别漏了,这个配置是json格式的。
2个配置中间有个逗号 ','别漏了,这个配置是json格式的。
2个配置中间有个逗号 ','别漏了,这个配置是json格式的。

vim命令新增如下红色内容:vim /etc/docker/daemon.json 

{
  "registry-mirrors": ["https://aa25jngu.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.111.162:5000"]
}

push推送到私服库

docker push 192.168.111.162:5000/zzyyubuntu:1.2

curl验证私服库上有什么镜像2 

curl -XGET http://192.168.111.162:5000/v2/_catalog

pull到本地并运行 

docker pull 192.168.111.162:5000/zzyyubuntu:1.2

4.Docker容器数据卷

4.1坑:容器卷记得加入

--privileged=true

Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
 
 原因:
如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,
在SELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用--privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即
使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
 

4.2回顾下上一讲的知识点,参数V

还记得蓝色框框中的内容吗?

4.3数据卷 是什么?


卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

一句话:有点类似我们Redis里面的rdb和aof文件

将docker容器内的数据保存进宿主机的磁盘中

4.3.1运行一个带有容器卷存储功能的容器实例

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录      镜像名

4.4  能做什么?

*  将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的
 
Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。
为了能保存数据在docker中我们使用卷。


 
4.4.1数据的特点 


1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接实时生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止

4.5 数据卷案例

4.5.1宿主vs容器之间映射添加容器卷

直接命令添加

公式:docker run -it -v /宿主机目录:/容器内目录 ubuntu /bin/bash
docker run -it --name myu3 --privileged=true -v /tmp/myHostData:/tmp/myDockerData ubuntu /bin/bash

 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录      镜像名

查看数据卷是否挂载成功

docker inspect 容器ID

容器和宿主机之间数据共享

1  docker修改,主机同步获得 
2 主机修改,docker同步获得
3 docker容器stop,主机修改,docker容器重启看数据是否同步。

4.5.2 读写规则映射添加说明 

读写(默认)

 rw = read + write

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw      镜像名

 默认同上案例,默认就是rw

只读

容器实例内部被限制,只能读取不能写

/容器目录:ro 镜像名               就能完成功能,此时容器自己只能读取不能写  
 
ro = read only
 
此时如果宿主机写入内容,可以同步给容器内,容器可以读取到。

4.5.3卷的继承和共享 

容器1完成和宿主机的映射

 
docker run -it  --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu


 容器2继承容器1的卷规则

docker run -it  --privileged=true --volumes-from 父类  --name u2 ubuntu

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

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

相关文章

算法笔记——路径问题

在引入介绍如何写一个算法的时候,我们先引入一个题作为例子 1137. 第 N 个泰波那契数 - 力扣(LeetCode) 作为刚开始学习算法的我们,看到这个题目的时候,应该想好以下的问题: 1.状态表示 我们要用什么来表…

Windows7安装SSH客户端的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

SQL sever中库管理

目录 一、创建数据库 1.1库界面方式 1.2SQL命令方式 二、修改数据库 2.1库界面方式 2.2SQL命令方式 三、删除数据库 3.1库界面方式 3.2SQL命令方式 四、附加和分离数据库 4.1附加和分离数据库概述 4.2作用 4.3附加和分离数据库方法 4.4示例 一、创建数据库 1.1库…

第 3 章 栈和队列 (循环队列)

1. 背景说明 和顺序栈相类似,在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外, 尚需附设两个指针 front 和 rear 分别指示队列头元素及队列尾元素的位置。约定:初始化建空队列时&#x…

XmlDocument.SelectNodes 不起作用

今天采用Xpath读取Xml节点,怎么都读不出。 问题分析: 错误代码如下: XmlDocument xmlD new XmlDocument();xmlD.PreserveWhitespace true;xmlD.LoadXml(xStr);xmlD.SelectNodes("job-scheduling-data/schedule/job");经排查 do…

Python学习笔记——从面试题出发学习Python

Python学习笔记——从面试题出发学习Python Python学习笔记——从面试题出发学习Python1. 可变数据类型与不可变数据类型,深拷贝与浅拷贝,函数参数的传递机制1.1 变量与对象1.2 可变数据类型与不可变数据类型1.3 深拷贝与浅拷贝1.4 函数参数的传递机制1.…

Matlab(画图初阶)

目录 1.plot()函数 2. hold(添加新绘图是否保留旧绘图) 3. Plot Style 3.1 线型 3.2 标记 3.3 颜色 ​编辑 4. legend() 5.X 、Y and Title? 6. Text()和annotation() 7.line(创建基本线条) 7.1 基本语法 7.2 指定线条属性 7.3 更改线条属性 8.图像属性 8.1 …

c++入门一

参考:https://www.learncpp.com/cpp-tutorial/ When you finish, you will not only know how to program in C, you will know how NOT to program in C, which is arguably as important. Tired or unhappy programmers make mistakes, and debugging code tends…

软考高级架构师——6、软件架构设计

像学写文章一样,在学会字、词、句之后,就应上升到段落,就应追求文章的“布局谋 篇”,这就是架构。通俗地讲,软件架构设计就是软件系统的“布局谋篇”。 人们在软件工程实践中,逐步认识到了软件架构的重要性…

HarmonyOS Codelab 优秀样例——购物应用,体验一次开发多端部署魅力

一. 样例介绍 本篇Codelab基于自适应布局和响应式布局,实现购物应用在手机、折叠屏、平板不同屏幕尺寸设备上按不同设计显示。通过三层工程结构组织代码,实现一次开发,多端部署 。 手机运行效果如图所示: 折叠屏运行效果图&#x…

C语言:大小端字节序存储

一、大小端字节序存储介绍 大端字节序存储模式:把一个数据低位字节处的数据存放在高地址处,数据高位字节处的数据存放在低地址处 小端字节序存储模式:把一个数据低位字节处的数据存放在低地址处,数据高位字节处的数据存放在高地址…

MATLAB中isequal函数转化为C语言

背景 有项目算法使用matlab中isequal函数进行运算,这里需要将转化为C语言,从而模拟算法运行,将算法移植到qt。 MATLAB中isequal简单介绍 语法 tf isequal(A,B) tf isequal(A1,A2,...,An) 说明 如果 A 和 B 等效,则 tf is…

【Python】PySpark 数据计算 ⑤ ( RDD#sortBy方法 - 排序 RDD 中的元素 )

文章目录 一、RDD#sortBy 方法1、RDD#sortBy 语法简介2、RDD#sortBy 传入的函数参数分析 二、代码示例 - RDD#sortBy 示例1、需求分析2、代码示例3、执行结果 一、RDD#sortBy 方法 1、RDD#sortBy 语法简介 RDD#sortBy 方法 用于 按照 指定的 键 对 RDD 中的元素进行排序 , 该方…

用 ChatGPT 写代码太省时间了

几个月前,我们聊过陶哲轩使用 ChatGPT 辅助解决数学问题。当时,他觉得虽然测试结果不太令人满意,但也并没有对 ChatGPT 持完全否定的态度。他觉得,像 ChatGPT 这类大型语言模型在数学中可以用来做一些半成品的语义搜索工作&#x…

(超简单)将图片转换为ASCII字符图像

将一张图片转换为ASCII字符图像 原图: 效果图: import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileWriter; import java.io.IOException;public class ImageToASCII {/*** 将图片转换为A…

保姆级教程之SABO-VMD-SVM的西储大学轴承诊断

之前写过一篇优化核极限学习机的轴承诊断,今天再出一期基于SVM的轴承诊断。 依旧是包含了从数据处理,到减法优化器SABO算法优化VMD参数,再到支持向量机的故障诊断,实现故障诊断的全流程,其他类型的故障诊断均可参考此流…

阿里云对象存储oss-文件上传过程详解(两种方式)

阿里云对象存储oss-文件上传过程详解{两种方式} 方式一(最新代码,时间:2023/8/27)(1)如何配置系统变量(2)完整代码 方式二(跟黑马最新教程同代码)(1)在复制下来的代码中(2)完整代码 方式一(最新代码,时间:2023/8/27) 问题:需要配置系统变量才能够使用 (1)如何配置系统变量 以wi…

服务器挂机赚钱之Traffmonetizer教程挂机,利用闲置的Vps赚钱

互联网VPS赚钱的项目traffmonetizer挂机,原理就是traffmonetizer通过共享闲置的带宽售卖给平台,然后平台将产生的收益就归你。如果你有闲置的vps服务器都可以通过traffmonetizer挂机赚钱。 VPS赚钱开始注册 实话实说吧,这个就是来拉人头的&…

linux深入理解多进程间通信

1.进程间通信 1.1 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件…

Dockerfile 使用教程

1.Dockerfile 1.1 什么是Dockerfile Dockerfile可以认为是 Docker镜像的描述文件,是由一系列命令和参数构成的脚本 。主要作用是 用来构建docker镜像的构建文件 。 通过架构图可以看出通过DockerFile可以直接构建镜像 1.2 Dockerfile解析过程 构建镜像步骤&#xf…