Docker从认识到实践再到底层原理(四-1)|Docker镜像仓库|超详细详解

news2024/11/13 9:35:07

在这里插入图片描述

前言

那么这里博主先安利一些干货满满的专栏了!

首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。

  • 高质量博客汇总

然后就是博主最近最花时间的一个专栏《Docker从认识到实践再到底层原理》希望大家多多关注!

  • Docker从认识到实践再到底层原理

第四章-镜像仓库

概念和架构

镜像仓库(Docker Registry)负责存储、管理和分发镜像,并且提供了登录认证能力建立了仓库的索引。

镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含个或多个镜像,镜像通过镜像名称和标签(Tag)来区分。整体视图如下。

在这里插入图片描述

镜像仓库(Registry):要从哪一个镜像仓库拉取镜像,通常通过 DNS 或 IP 地址来确定一个镜像仓库如 hub.docker.com

一个 Registry 中可以存在多个Repository·Repository可分为“顶层仓库”和“用户仓库”;用户仓库名称格式为“用户名/仓库名”每个仓库可以包含多个 Tag(标签),每个标签对应一个镜像

Repository:由某特定的.docker 镜像的所有迭代版本组成的镜像仓库镜像名称 (name)+标签(tag):如 nginx:latest

认证能力:提供用户注册,登录、登出能力

索引:提供镜像的索引信息,方便检索

一个容器镜像包含了两个部分,一个是元数据,其实就是由 dockerfile 构建出来的描述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,它的checksum这些信息都会记录下来,还有最终的可执行文件在哪就是在存储数据里面就是在一个一个的 blob 里面,真正占有空间的就是这些 blob。

镜像仓库的分类和工作机制

按是否对外开放划分

  • 公有仓库:这些仓库像阿里云和dockerhub一样,被置于公共网络上,允许无需登录即可下载镜像,为广大用户提供服务。
  • 私有仓库:这些仓库不对外开放,通常位于私有网络中,只有公司内部员工可以访问和使用。

按供应商和面向群体划分

  • 赞助注册表(Sponsor Registry):这是第三方注册表,供客户和Docker社区版用户使用。
  • 镜像注册表(Mirror Registry):这是第三方注册表,只有已注册用户才能访问,例如,阿里云注册后方可使用。
  • 供应商注册表(Vendor Registry):由发布Docker镜像的供应商提供的注册表服务,例如,Google和Redhat提供了这样的镜像仓库。
  • 私有注册表(Private Registry):这是由内部实体提供的注册表,没有防火墙和额外的安全层,仅供内部使用。

仓库的使用

镜像仓库使用流程

  • 通过 docker login 登录仓库
  • Docker pull 拉取需要的镜像
  • 通过 dockerfile 或者 commit 等方式制作完镜像通过 docker push 上传到仓库

仓库的拉取机制

启动容器时,docker daemon 会试图从本地获取相关的镜像。本地镜像不存在时,其将从 Registry 中下载该镜像并保存到本地。

常用的镜像仓库

docker hub

  • https://hub.docker.com

dockerhub是全球最大的镜像仓库,基本上可以说想要啥这里都有。

在这里插入图片描述
在这里插入图片描述

然后我们可以搜索自己想要的镜像。

然后有两种,一种是经过认证的镜像,一种是社区的镜像。一般建议使用经过认证的,比较靠谱。

在这里插入图片描述

在这里插入图片描述

镜像仓库命令

命令别名功能
docker login登录仓库
docker pulldocker image pull拉取镜像
docker pushdocker image push推送仓库
docker serach查找仓库
docekr logout登出仓库

如何学习一个命令。

第一种办法。

docker [命令名称] --help
[root@ALiCentos7:~]$ docker login --help

Usage:  docker login [OPTIONS] [SERVER]

Log in to a registry.
If no server is specified, the default is defined by the daemon.

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username
[root@ALiCentos7:~]$

第二种办法。

网站上的使用手册。

  • https://docs.docker.com/

在这里插入图片描述
在这里插入图片描述

docker login

登陆到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub。

docker login [OPTIONS] [SERVER]
-u :登陆的用户名
-p :登陆的密码
docker login -u 用户名 -p 密码

在此之前,我们要在docker官网上先注册一个账号。

在这里插入图片描述

docker pull

从镜像仓库中拉取或者更新指定镜像。

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
-a : 拉取所有 tagged 镜像
--disable-content-trust : 忽略镜像的校验,默认开启

在这里插入图片描述

docker pull nginx:1.25.2

在这里插入图片描述
当然用这个id也可以下载。

在这里插入图片描述

docker pull nginx@sha256:48a84a0728cab8ac558f48796f901f6d31d287101bc8b317683678125e0d2d35

这样即可。

docker push

docker push [OPTIONS] NAME[:TAG]
-a : 推送所有 tagged 镜像
--disable-content-trust : 忽略镜像的校验, 默认开启

把本地的镜像推到镜像仓库中去。

其实这些概念的理解和Git很相像。

我们上一小节已经下载了一个仓库,能否直接push呢?

[root@ALiCentos7:~]$ docker push nginx:1.25.2
The push refers to repository [docker.io/library/nginx]
563c64030925: Layer already exists 
6fb960878295: Layer already exists 
e161c3f476b5: Layer already exists 
8a7e12012e6f: Layer already exists 
d0a62f56ef41: Layer already exists 
4713cb24eeff: Layer already exists 
511780f88f80: Layer already exists 
errors:
denied: requested access to the resource is denied
unauthorized: authentication required

[root@ALiCentos7:~]$ 

我们肯定是没有这个权限的,我们怎么能向nginx这个组织推我们自己的仓库呢?

我们可以推到我们自己的仓库里面去。

其实和Github是一个道理。

在这里插入图片描述

先创建一个仓库。

但是,我们还要改我们本地那个镜像的tag,不能用别人的那个叫nginx的了。

docker tag nginx:1.25.2 yufcbagpack/my-bit-nginx:1.25.2
[root@ALiCentos7:~]$ docker push yufcbagpack/my-bit-nginx:1.25.2
The push refers to repository [docker.io/yufcbagpack/my-bit-nginx]
563c64030925: Mounted from library/nginx 
6fb960878295: Mounted from library/nginx 
e161c3f476b5: Mounted from library/nginx 
8a7e12012e6f: Mounted from library/nginx 
d0a62f56ef41: Mounted from library/nginx 
4713cb24eeff: Mounted from library/nginx 
511780f88f80: Mounted from library/nginx 
1.25.2: digest: sha256:48a8xxxxxcab8ac558f48796f901f6dxxxxxx317683678125e0d2d35 size: 1778
[root@ALiCentos7:~]$

这样就推送完成了。

在这里插入图片描述

这样我们远程就能看到了。

docker search

从docker hub中查找想要的镜像。

docker search [OPTIONS] TERM
--no-trunc : 显示完整的镜像描述
-f <过滤条件> : 列出收藏数不小于指定值的镜像

在这里插入图片描述

找到了很多和nginx有关系的。

工作中一般不在这里找,肯定上官网方便,直接搜,搜到合适的直接pull就行了。

docker logout

docker logout [SERVER]

在这里插入图片描述

镜像相关命令(部分)

因为后面学习我们要暂时用到一些镜像相关的命令,所以这里先学一点。

后面我们还会详细学习镜像相关的命令。

docker images

列出本地镜像。

docker images[OPTIONS] [REPOSITORY[:TAG]]

一些别名。

docker image list
docker image ls

一些参数。

-a : 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
--digests : 显示镜像的摘要信息;
-f : 显示满足条件的镜像;
--format : 指定返回值的模板文件;
--no-trunc : 显示完整的镜像信息;
-q : 只显示镜像 ID。

这里是一些例子。
在这里插入图片描述
具体用法可以看文档。

与此同时,docker的命令可以和shell命令结合使用。

docker images | grep nginx

在这里插入图片描述

docker image inspect

查看一个镜像的详情。

docker image inspect nginx:1.25.2

在这里插入图片描述
用id也是可以的。

docker tag

标记本地镜像,将其归入某一仓库。

Nginx了解

一种web服务器。

  • http://t.csdn.cn/HbaDD

Centos7安装Nginx

检查系统上是否有Nginx

(base) [yufc@ALiCentos7:~]$ ps -ef | grep nginx
yufc     32437 32299  0 09:26 pts/0    00:00:00 grep --color=auto nginx
(base) [yufc@ALiCentos7:~]$ nginx
bash: nginx: command not found
(base) [yufc@ALiCentos7:~]$

经过检查,是没有的。如果有,就可以先选择卸载nginx,再进行重新安装。

卸载Nginx

如果是通过yum源安装的,那些在很简单,直接yum remove nginx即可。

安装Nginx

centos 配置 nginx 源

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
(base) [yufc@ALiCentos7:~]$ sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0el7.ngx.noarch.rpm
[sudo] password for yufc: 
Retrieving http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
warning: /var/tmp/rpm-tmp.YwES4G: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:nginx-release-centos-7-0.el7.ngx ################################# [100%]
(base) [yufc@ALiCentos7:~]$ 
(base) [yufc@ALiCentos7:~]$ ll /etc/yum.repos.d/
total 40
-rw-r--r-- 1 root root  675 Apr 27 23:11 CentOS-Base.repo
-rw-r--r-- 1 root root  998 Dec 11  2018 CentOS-SCLo-scl.repo
-rw-r--r-- 1 root root  971 Oct 29  2018 CentOS-SCLo-scl-rh.repo
-rw-r--r-- 1 root root 2099 Sep  1 19:52 docker-ce.repo
-rw-r--r-- 1 root root  230 Apr 27 23:11 epel.repo
-rw-r--r-- 1 root root 1358 Sep  5  2021 epel.repo.rpmnew
-rw-r--r-- 1 root root 1457 Sep  5  2021 epel-testing.repo
-rw-r--r-- 1 root root 1838 Apr 27  2017 mysql-community.repo
-rw-r--r-- 1 root root 1885 Apr 27  2017 mysql-community-source.repo
-rw-r--r-- 1 root root  113 Jul 15  2014 nginx.repo
(base) [yufc@ALiCentos7:~]$ 

配置一下缓存,加速下载

yum makecache

下载nginx

sudo yum install -y nginx

下载完成

(base) [yufc@ALiCentos7:~]$ nginx -v
nginx version: nginx/1.24.0
(base) [yufc@ALiCentos7:~]$ 

启动nginx

(base) [yufc@ALiCentos7:~]$ systemctl start nginx
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password: 
==== AUTHENTICATION COMPLETE ===
(base) [yufc@ALiCentos7:~]$ 

在这里插入图片描述

Nginx在机器上的默认配置

在这里插入图片描述
还有这个default.conf里面有很多重要的信息。

在这里插入图片描述

server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;  # 这里表示了nginx这个服务的首页
        index  index.html index.htm;
    }

    #error_page  404              /404.html;  # 这个是404的html

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
    location / {
        root   /usr/share/nginx/html;  # 这里表示了nginx这个服务的首页
        index  index.html index.htm;
    }

我们可以进这个目录看一下。

在这里插入图片描述

容器相关命令(部分)

因为后面学习我们要暂时用到一些容器相关的命令,所以这里先学一点。

后面我们还会详细学习容器相关的命令。

docker run

创建一个新的容器并运行一个命令。

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

重要参数

-d : 后台运行容器,并返回容器 ID;
-i : 以交互模式运行容器,通常与 -t 同时使用;
-P : 随机端口映射,容器内部端口随机映射到主机的端口
-p : 指定端口映射
-t : 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb" : 为容器指定一个名称;
-h "mars" : 指定容器的 hostname;
-e username="ritchie" : 设置环境变量;
--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2" : 绑定容器到指定 CPU 运行;
-m : 设置容器使用内存最大值;
--network="bridge" : 指定容器的网络连接类型;
--link=[] : 添加链接到另一个容器;
--volume , -v : 绑定一个卷
--rm : shell 退出的时候自动删除容器

我们想在这个机器上,使用一个centos7容器来运行这个docker run。

所以先在dockerhub上面下载一个centos7。
在这里插入图片描述
如果docker run不带任何参数,会发现啥现象都没有的。

[root@ALiCentos7:~]$ docker run centos:7
[root@ALiCentos7:~]$

因为你没有给命令过去和这个容器交互。

docker ps可以查看所有正在运行的容器。

docker ps -a可以查看所有创建过的容器。

在这里插入图片描述

这里面我们可以看到,我们这个容器是被创建了的,但是退出了。

所以不带参数的docker run不带参数,默认运行/bin/bash

-d参数

后台运行容器,并返回容器 ID。

如果在后台运行,我们按^c是不会停掉的。

-t, -i, -it参数

-t : 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

-i : 以交互模式运行容器,通常与 -t 同时使用;

在这里插入图片描述
在这里插入图片描述

-P, -p参数

先看一下这个命令。

docker run -d -p 80:80 nginx:1.24.0
  • -P : 随机端口映射,容器内部端口随机映射到主机的端口

  • -p : 指定端口映射

这个意思就是,启动一个nginx容器!-p表示映射端口。

80:80表示宿主机的80端口映射到nginx容器的80端口上。

在这里插入图片描述

报错了:端口被占用,这是为什么?

是因为我们宿主机已经启动了一个nginx了。

[root@ALiCentos7:~]$ netstat -nltp | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      693/nginx: master p 
[root@ALiCentos7:~]$

所以我们不要使用宿主机的80端口了,我们使用8081端口。

[root@ALiCentos7:~]$ docker run -d -p 8081:80 nginx:1.24.0
1c737416845472f193c3f402f7de62808e88a8781d0508a001f87ee99de5298e
[root@ALiCentos7:~]$

-P就会随机分配一个端口给我们。

使用-p会多一些。

–name参数和-h参数

--name="nginx-lb" : 为容器指定一个名称;
-h "mars" : 指定容器的 hostname;
-e username="ritchie" : 设置环境变量;

在这里插入图片描述
此时的名字就不是乱来的了。

如果我们不指定宿主机名字,hostname是随机的。

在这里插入图片描述
添加环境变量。
在这里插入图片描述

–cpuset-cpus和-m参数

--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2" : 绑定容器到指定 CPU 运行;
-m : 设置容器使用内存最大值;

–link[]

添加链接到另一个容器。

–rm

如果这个容器退出了,自动清理。

docker ps

列出容器。

docker ps [OPTIONS]

别名。

docker container ls
docker container list
docker container ps

参数。

-a : 显示所有的容器,包括未运行的
-f : 根据条件过滤显示的内容
--format : 指定返回值的模板文件。如json 或者 table
-l : 显示 latest 的容器
-n : 列出最近创建的n 个容器。
-no-trunc : 不截断输出。
-g : 静默模式,只显示容器编号
-s : 显示总的文件大小

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

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

相关文章

k8s node环境部署(三)

1、添加node1、node2环境 前面配置master环境的截图最后一段 复制下来 分别在node主机执行 kubeadm join 192.168.37.132:6443 --token p5omh3.cqjqt8ymrwkdn2fc \ --discovery-token-ca-cert-hash sha256:608a1cbadd060cfdeac2fae84c19609061b750ab51bf9a19887ff7ea…

恒运资本:消费电子概念再爆发,冠石科技三连板,捷荣技术9日大涨127%

消费电子概念8日盘中再度走高&#xff0c;截至发稿&#xff0c;利和兴涨近15%&#xff0c;日久光电、冠石科技、捷荣技能、华映科技、东睦股份等涨停&#xff0c;大富科技涨超7%。 值得注意的是&#xff0c;冠石科技已接连3日涨停&#xff0c;公司昨日晚间发布危险提示称&…

数字钥匙关键技术:UWB(超宽带)实现原理一文讲透

在之前的文章《一文讲透超宽带&#xff08;UWB&#xff09;前世今生》中&#xff0c;我们从起源、定义、标准、发展、应用等角度概述了UWB技术。根据UWB的特性&#xff0c;其基础功能分为&#xff1a;数据传输、雷达成像、测距定位。接下来我们将概述其数据传输和雷达成像功能&…

YOLOV7改进-对小目标有效的BiFormer注意力机制

如果要在sppcspc后面加一个注意力模块BiFormer 1、 普通加 1、models-common.py搜这个模块 2、直接加 3、全部复制下来&#xff0c;models新建文件 4、common导入进来 5、填上一层的输出通道数 2、模块里加 难点&#xff1a;在配置文件找到对应的这一块 yolov7x中 1、…

GE IS220PDIAH1A 336A4940CSP1 控制主板模块

GE IS220PDIAH1A 336A4940CSP1 是一款控制主板模块&#xff0c;通常用于工业自动化和控制系统中。以下是可能与这种控制主板模块相关的一些产品功能&#xff1a; 信号处理&#xff1a; GE IS220PDIAH1A 336A4940CSP1控制主板模块通常负责信号处理&#xff0c;可以接收、放大、滤…

机器学习算法基础--线性回归算法

目录 1.算法求解步骤 2.算法核心代码 3.算法效果展示 1.算法求解步骤 线性回归算法流程: #1.数据导入与处理 #2.创建线性回归模型并拟合数据 #3.计算回归直线的斜率和截距 #4.预测 x5 时的y值 #5.进行进一步预测 #5.进行进一步预测 2.算法核心代码 #机器学习算法基础第一…

数据结构与算法:练习与实践的重要性

文章目录 为什么练习与实践很重要&#xff1f;1. 熟练应用2. 问题解决能力3. 代码效率4. 面试准备 如何练习与实践&#xff1f;1. 在线评测平台2. 自主设计数据结构3. 解决不同类型的问题 持续学习与实践 &#x1f389;欢迎来到数据结构学习专栏~数据结构与算法&#xff1a;练习…

MySQL使用CASE WHEN统计SQL语句代替子查询SQL统计,CASE WHEN常用写法,根据不同的条件对数据进行分类、分组和聚合

MySQL中&#xff0c;写一个CASE WHEN的统计SQL语句&#xff0c;代替子查询SQL统计语句 假设我们有一个名为"orders"的表&#xff0c;其中包含订单信息&#xff0c;包括订单号(order_id)、订单金额(order_amount)等列。我们想要统计每个订单级别的订单数量&#xff0c…

深度学习:基于循环神经网络RNN实现自然语言生成

目录 1 循环神经网络介绍 1.1 什么是循环神经网络 1.2 RNN的网络结构 1.3 RNN的工作原理 ​编辑 1.4 RNN的应用场景 2 基于RNN实现语句生成 2.1 句子生成介绍 2.2 基于pytorch实现语句生成 2.3 完整代码 2.4 该模型的局限 3 总结 1 循环神经网络介绍 1.1 什么是循环…

Anaconda - 操作系统安装程序 简要介绍

Anaconda 简要介绍 1. Anaconda 简介2. Anaconda 体系结构3. Anaconda 开发模型4. Anaconda 启动概述5. Anaconda 源码1. 接口2. 自定义组件3. 硬盘分区&#xff1a;使用python-blivet包4. Bootloader5. 各个步骤的配置&#xff1a;6. 安装软件包&#xff1a;7. 安装控制&#…

华为强势回归,苹果iPhone15ProMax独占潜望式镜头,预计销量受损

9月8日消息&#xff0c;据集邦咨询发布的产业洞察报告显示&#xff0c;苹果即将发布的iPhone 15 Pro Max将会独占潜望式镜头&#xff0c;该机型的占比预计将会达到40%左右。报告同时预估&#xff0c;今年iPhone 15系列手机的出货量将达到8000万&#xff0c;相比去年同期增长6%以…

无需公网IP教你如何外网远程访问管家婆ERP进销存

文章目录 前言 1.管家婆服务2. 内网穿透2.1 安装cpolar内网穿透2.2 设置远程访问 3. 固定访问地址4. 配置固定公网访问地址 前言 管家婆辉煌系列产品是中小企业进销存、财务管理一体化的典范软件&#xff0c;历经十余年市场的洗礼&#xff0c;深受广大中小企业的欢迎&#xff…

冠达管理:不要误读“房贷利率降低”

最近&#xff0c;人人都知道房贷利率降了&#xff0c;但如果细问“怎么降的、哪些城市降了、将产生何种影响”&#xff0c;恐怕不少人都是水中望月。正因此&#xff0c;部分房地产中介、营销机构利用购房者的信息不对称劣势&#xff0c;刻意夸张房贷利率下降关于楼市价格的影响…

16 除自身以外数组的乘积

除自身以外数组的乘积 题解1 前缀积*后缀积题解2 空间优化 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数…

YAPI的搭建和使用

https://www.cnblogs.com/yehuisir/p/12315137.html 1、#进入数据库 mongo 2、#进入admin库 use admin 3、#添加一个用户root&#xff08;此步骤可不执行&#xff09; db.createUser({user:"root",pwd:"123456abc.COM",roles:["root"]}) …

【合作 】联通、壳牌、联想、国金证券等众多企业签约 Eolink !

联通、壳牌、联想、华润置地、中国铁塔等多家知名企业签约 Eolink&#xff0c;携手落地 API 全生命周期管理&#xff0c;感谢广大企业对 Eolink 的信任和选择&#xff01; Eolink 致力于为企业提供最全面的 API 研发管理解决方案&#xff0c;提供高效、可靠的工具以及服务&…

深入了解 Axios 的 put 请求:使用技巧与最佳实践

在前端开发中&#xff0c;我们经常需要与后端服务器进行数据交互。其中&#xff0c;PUT 请求是一种常用的方法&#xff0c;用于向服务器发送更新或修改数据的请求。通过发送 PUT 请求&#xff0c;我们可以更新服务器上的资源状态。 Axios 是一个流行的 JavaScript 库&#xff0…

解析进程复制:父子进程内存地址的神秘之处

当涉及到进程复制时&#xff0c;有时会出现一个令人困惑的现象&#xff1a;在父进程和子进程中&#xff0c;某些变量的内存地址似乎是相同的&#xff0c;尽管它们实际上是独立的进程。下面我将简单解释这个现象以及背后的原因。 进程复制&#xff1a;父子进程的神秘关系 在多…

Vue3统一导出局部组件和全局组件

局部组件统一导出 components新增ComponentA.vue、ComponentB.vue两个组件 新增index.js进行组件统一导入 import ComponentA from ./ComponentA.vue import ComponentB from ./ComponentB.vueexport {ComponentA,ComponentB }使用 <template><ComponentA /><…

leetcode 150.逆波兰表达式求值

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;逆波兰表达式求值 思路&#xff1a; 假设这样一组表达式 { "2" , "1" , "" , "3" , "*" } 这是一种后缀表达式&#xff0c;首先我们准备一个栈&#xff0c;当如果不是…