容器编排学习(一)容器技术

news2024/10/7 4:27:41

一  容器

1  Linux 容器的起源

容器的起源可以追溯到1979年 UNIX 系统中提供的chroot命令,容器的最初的设计目标是为了隔离计算机中的各类资源以便降低软件开发、测试阶段的风险,或者充当蜜罐,吸引黑客的攻击,以便监视黑客的行为。最初的容器是以chroot为代表的文件隔离技术,但这并不完美,如主机名、网络、系统进程、用户等都无法隔离

2 名称空间和控制组

为了实现完美的隔离机制,2002年 Linux引入了一种由内核直接提供的全局资源封装的全新隔离机制(名称空间)用来解决隔离的问题,至2009年,Linux内核已经支持了UTSPC、PID、NETWORK、MOUNT等多个名称空间。

Linux解决资源配额的方案是控制组 (Cgroups),它与名称空间一样直接由内核提供功能,用于隔离或者说分配并限制某个进程组能够使用的资源量,包括占用 CPU 时间、内存大小、磁盘 1/0 速度,等等

3  容器的诞生

当文件系统、访问、资源都可以被隔离后,容器已经有它降生所需的全部条件,Linux内核开始提供Cgroups的同一时间就马上发布了名为 LXC的系统级虚拟化功能

LXC 带着令人瞩目的光环登场,可惜的是,LXC 在设定自己的发展目标时,被前辈们的影响所局限住。LXC 眼中的容器是一种封装系统的轻量级虚拟机。这种局限的思想也决定了LXC不可能形成今天的容器生态的,所以,接下来舞台的聚光灯终于落到了 Docker 身上。

二 docker

1  概述

2013年3月,一个名为 Docker 的项目宣布开源

当时的人们并没有意识到这款软件将要带来怎样的技术变革

它的出现促使“容器”从一个阳春白雪的只流传于极客口中的技术词汇,逐渐走向整个IT舞台的中央短短数年时间,就已成为开发、测试、部署等各个环节都难以或缺的基础支撑。是什么样的魔力让 Docker 可以从一问世就惊艳世间

2  理念

促使 Docker的一问世就惊艳世间的,不是什么黑科技式的秘密武器,而是其符合历史潮流的创意与设计理念,还有充分开放的生态环境。

早期的容器技术是一种封装系统的轻量级虚拟化,Docker眼中“容器技术”是一种以应用为核心,对程序文件、运行时环境、软件依赖包都可以封装打包、部署的技术手段

Docker 的容器中没有系统

2014年,Docker开源了自己用 Golang开发的 Libcontainer

2015年,在Docker的主导和倡议下,多家公司联合制定“开放容器交互标准”(0CI),这是一个关于容器格式和运行时的规范文件,其中包含:

  • 运行时标准(RUNTIME-SPEC)
  • 容器镜像标准(IMAGE-SPEC)
  • 镜像分发标准(DISTRIBUTION-SPEC)

3  三大概念

容器:容器是一个运行在隔离环境中的程序

镜像:镜像是只读的模板,包含了创建容器所需的所有文件和配置信息

仓库:仓库是用来存储、分发、管理镜像的地方

三  安装部署

1  配置Yum仓库

把 docker 软件包添加到跳板机的自定义 yum 仓库中

[root@docker ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
主机名IP地址最低配置
docker-0001192.168.1.312CPU,4G内存
docker-0002192.168.1.322CPU,4G内存

2  系统管理命令

命令说明
docker version查看服务器与客户端版本
docker info查看 docker 服务配置信息

3  安装部署

# 开启路由转发
[root@docker ~]# echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf
[root@docker ~]# sysctl -p
[root@docker ~]# dnf install -y docker-ce
[root@docker ~]# systemctl enable --now docker
# 查看服务器与客户端版本
[root@docker ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.10
 ... ...
Server: Docker Engine - Community
 Engine:
  Version:          20.10.10

4  添加镜像加速

[root@docker ~]# vim /etc/docker/daemon.json
{
    "registry-mirrors": ["这里配置镜像仓库加速器地址"],
    "insecure-registries":[]
}
[root@docker ~]# systemctl restart docker
# 查看 docker 服务配置信息
[root@docker ~]# docker info
... ...
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://镜像仓库加速器/
 Live Restore Enabled: false

四  镜像

1  概述

  • 镜像是创建容器的核心
  • 镜像使用CoW技术
  • 镜像采用分层设计
  • 镜像始终都是只读的

如何创建容器?

首先使用 Cow 为镜像创建一个读写层,容器在读写层运行

这种方式可以让一个镜像创建无数个容器

2  获取镜像

镜像可以从官方镜像仓库下载,也可以自己制作

官方镜像仓库:https://hub.docker.com

从官方下载较慢,可以使用国内的镜像站加速

添加配置文件: /etc/docker/daemon.json
{

        "reqistry-mirrors":["这里配置镜像加速器地址”]

        "insecure-registries":[ ]

}

[root@docker ~]# vim /etc/docker/daemon.json
{
    "registry-mirrors": ["这里配置镜像仓库加速器地址"],
    "insecure-registries":[]
}

[root@docker ~]# systemctl restart docker
# 查看 docker 服务配置信息

[root@docker ~]# docker info
... ...
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://镜像仓库加速器/
 Live Restore Enabled: false

3  镜像管理命令

镜像管理命令说明备注
docker images查看本机镜像
docker pull 镜像名称:标签下载镜像
docker save 镜像名称:标签 -o 备份文件名称备份镜像为tar包备份文件是 tar 格式
docker load -i 备份文件名称导入备份的镜像文件备份文件 tar 或 tar.xx 格式
docker history 镜像名称:标签查看镜像的制作历史

镜像管理案例

pull、images、history

# 下载 busybox:latest 镜像
[root@docker ~]# docker pull busybox:latest
# 查看本机镜像
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
busybox      latest    66ba00ad3de8   5 weeks ago     4.87MB
# 查看镜像的制作历史
[root@docker ~]# docker history busybox:latest
IMAGE          CREATED      CREATED BY                                 SIZE
b539af69bc01   9 days ago   /bin/sh -c #(nop)  CMD ["sh"]              0B        
<missing>      9 days ago   /bin/sh -c #(nop) ADD file:069460fea045…   4.86MB 

指定镜像的方法

  • 每一个镜像都对应唯一的镜像 id
  • 镜像名称 + 标签 = 唯一
  • 每一个镜像都有标签,默认标签 latest我们在调用镜像的时候,如果没有指定标签也是 latest

镜像的备份与恢复

save、load

# 备份 rockylinux:8.5 镜像为 tar 包
[root@docker ~]# docker save busybox:latest -o busybox.tar
# 使用备份文件恢复镜像
[root@docker ~]# docker load -i myos.tar.xz
Loaded image: rockylinux:8.5
Loaded image: myos:8.5
Loaded image: myos:php-fpm
Loaded image: myos:nginx
Loaded image: myos:httpd
Loaded image: myos:latest
# 查看本机镜像
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
myos         php-fpm   7124977c0b21   12 days ago     275MB
myos         latest    1de38c85c2d1   3 weeks ago     4.67MB
myos         nginx     5e45400d8e76   3 weeks ago     274MB
myos         httpd     9245e660f88f   3 weeks ago     299MB
myos         8.5       621bfd7f9b46   3 weeks ago     249MB
busybox      latest    66ba00ad3de8   5 weeks ago     4.87MB
rockylinux   8.5       210996f98b85   14 months ago   205MB
[root@docker-0001 ~]# docker load -i myos.tar.xz
[root@docker-0001 ~]# docker save rockylinux:8.5 -o rockylinux.tar
[root@docker-0001 ~]# scp rockylinux.tar 192.168.1.32:/root/
#-------------------------------------------------------------------#
[root@docker-0001 ~]# docker load -i rockylinux.tar
[root@docker-0001 ~]# docker history rockylinux:8.5

 

五  容器管理

1  容器管理命令

容器管理命令说明
docker run -it(d) 镜像名称:标签创建容器
docker ps查看容器的信息
docker inspect 镜像名称|容器名称查询(容器/镜像)的详细信息
docker [start|stop|restart] 容器id启动、停止、重启容器
docker exec -it 容器ID 启动命令在容器内执行命令
docker cp 路径1 路径2拷贝文件:路径格式(本机路径、容器ID/路径)

2  容器管理案例

run

查看 run 的参数

  • docker help run
  • man docker-run

docker run 常用参数

  • 参数 -i 交互式
  • 参数 -t 分配终端
  • 参数 -d 后台运行
  • 参数 --name 容器名字
  • 参数 --rm 容器结束后自动删除
  • 转入后台快捷键 (ctrl-p + ctrl-g)
# 创建一个容器
[root@docker ~]# docker run -it myos:8.5
[root@3aa1df05b795 /]# hostname
3aa1df05b795
[root@3aa1df05b795 /]# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 15:13 pts/0    00:00:00 /bin/bash
root          19       1  0 15:13 pts/0    00:00:00 ps -ef
[root@3aa1df05b795 /]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@3aa1df05b795 /]# exit
# 创建后台容器
[root@docker ~]# docker run -itd myos:httpd
6d6884244a995791f8171efa3ce81be1e9e51bedf25c3a5a67bac8bb7bc019b0
# 创建名为web1的后台容器
[root@docker ~]# docker run -itd --name web1 myos:httpd
14b669a75a95e9ba590c37137abc9d828d2c769d46f69c35fb0e8cc98cc544c4 

ps

docker ps 常用参数

  • -a 显示所有容器
  • -p 只显示ID
# 查询容器状态
[root@docker ~]# docker ps
CONTAINER ID   IMAGE        ... ...  STATUS          PORTS     NAMES
14b669a75a95   myos:httpd   ... ...  Up 25 minutes   80/tcp    web1
6d6884244a99   myos:httpd   ... ...  Up 25 minutes   80/tcp    hawking
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE        ... ...  STATUS          PORTS     NAMES
14b669a75a95   myos:httpd   ... ...  Up 25 minutes   80/tcp    web1
6d6884244a99   myos:httpd   ... ...  Up 25 minutes   80/tcp    hawking
47ded92f442f   myos:8.5     ... ...  Exited (0)                yonath
[root@docker ~]# docker ps -aq
14b669a75a95
6d6884244a99
47ded92f442f

start、stop、restart

[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE        ... ...  STATUS          PORTS     NAMES
14b669a75a95   myos:httpd   ... ...  Up 25 minutes   80/tcp    web1
6d6884244a99   myos:httpd   ... ...  Up 25 minutes   80/tcp    hawking
47ded92f442f   myos:8.5     ... ...  Exited (0)                yonath
# 停止容器
[root@docker ~]# docker stop web1 6d6884244a99
web1
6d6884244a99
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE        ... ...  STATUS          PORTS     NAMES
14b669a75a95   myos:httpd   ... ...  Exited (0)                web1
6d6884244a99   myos:httpd   ... ...  Exited (0)                hawking
47ded92f442f   myos:8.5     ... ...  Exited (0)                yonath
# 启动容器
[root@docker ~]# docker start web1 
web1
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE        ... ...  STATUS          PORTS     NAMES
14b669a75a95   myos:httpd   ... ...  Up 6 seconds    80/tcp    web1
6d6884244a99   myos:httpd   ... ...  Exited (0)                hawking
47ded92f442f   myos:8.5     ... ...  Exited (0)                yonath
# 重启容器
[root@docker ~]# docker restart 6d6884244a99 
6d6884244a99
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE        ... ...  STATUS          PORTS     NAMES
14b669a75a95   myos:httpd   ... ...  Up 18 seconds   80/tcp    web1
6d6884244a99   myos:httpd   ... ...  Up 3 seconds    80/tcp    hawking
47ded92f442f   myos:8.5     ... ...  Exited (0)                yonath

inspect

# 查询镜像的详细信息
[root@docker ~]# docker inspect myos:httpd
{   ......
    "Cmd": [
        "httpd",
        "-DFOREGROUND"
    ],
    ......
}
# 查询容器的详细信息
[root@docker ~]# docker inspect 6d6884244a99 web1
[
    { ... ...
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
     ... ...

exec、cp

拷贝文件

  • 上传:docker cp 本机文件路径 容器id:容器内路径
  • 下载:docker cp 容器id:容器内路径 本机文件路径
# 在容器内执行非交互命令
[root@docker ~]# docker exec -it web1 /bin/ls
index.html    info.php
# 在容器内执行交互命令
[root@docker ~]# docker exec -it web1 /bin/bash 
[root@487e19bb4ca3 ~]# exit
# 从容器内拷贝文件出来
[root@docker ~]# docker cp web1:/etc/httpd/conf/httpd.conf ./
[root@docker ~]# sed -ri "s,(Listen )80,\18080," httpd.conf
# 把文件拷贝到容器内
[root@docker ~]# docker cp httpd.conf web1:/etc/httpd/conf/
# 重启容器
[root@docker ~]# docker restart web1
# 查询容器详细信息
[root@docker ~]# docker inspect web1
{   
   "Networks": {
       "bridge": {
           "IPAddress": "172.17.0.2",
    ......
}
[root@docker ~]# curl http://172.17.0.2:8080/
Welcome to The Apache.

3  其他管理命令

管理命令说明
docker rm 容器ID删除容器
docker logs 容器ID查看容器日志
docker tag 镜像ID:标签 镜像名称:新的标签创建新的镜像名称和标签
docker rmi 镜像名称:标签删除镜像(必须先删除该镜像启动的所有容器)

管理命令案例

rm、logs

# 删除容器
[root@docker ~]# docker rm 47ded92f442f
# 强制删除容器
[root@docker ~]# docker rm -f web1
# 删除所有容器
[root@docker ~]# docker rm -f $(docker ps -aq)
# 创建容器
[root@docker ~]# docker run -itd --name web myos:nginx
# 访问容器
[root@docker ~]# docker inspect web |grep IPAddress
[root@docker ~]# curl http://172.17.0.2/info.php
# 查看容器日志
[root@docker ~]# docker logs web
2023/01/17 15:51:49 [error] 6#0: *1 open() "/usr/local/nginx/html/info.php" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /info.php HTTP/1.1", host: "172.17.0.2"

rmi、tag

# 删除一个镜像
[root@docker ~]# docker rmi busybox:latest
Untagged: busybox:latest
# 已经创建容器的镜像无法删除
[root@docker ~]# docker rmi -f myos:nginx
Untagged: myos:nginx
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
myos         php-fpm   7124977c0b21   12 days ago     275MB
myos         latest    1de38c85c2d1   3 weeks ago     4.67MB
<none>       <none>    5e45400d8e76   3 weeks ago     274MB
myos         httpd     9245e660f88f   3 weeks ago     299MB
myos         8.5       621bfd7f9b46   3 weeks ago     249MB
rockylinux   8.5       210996f98b85   14 months ago   205MB
# 给镜像设置一个新的名称标签
[root@docker ~]# docker tag 5e45400d8e76 myos:nginx
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
myos         php-fpm   7124977c0b21   12 days ago     275MB
myos         latest    1de38c85c2d1   3 weeks ago     4.67MB
myos         nginx     5e45400d8e76   3 weeks ago     274MB
myos         httpd     9245e660f88f   3 weeks ago     299MB
myos         8.5       621bfd7f9b46   3 weeks ago     249MB
rockylinux   8.5       210996f98b85   14 months ago   205MB

六  自定义镜像

  • 镜像采用分层设计
  • 创建读写层
  • 修改配置
  • 重新打包

简单镜像制作

# 使用基础镜像创建一个容器
[root@docker ~]# docker run -itd --name linux rockylinux:8.5
# 删除容器内的Yum配置文件
[root@docker ~]# docker exec -it linux rm -rf /etc/yum.repos.d
# 拷贝宿主机的Yum配置文件到容器内
[root@docker ~]# docker cp /etc/yum.repos.d linux:/etc/
# 在容器内安装工具软件包
[root@docker ~]# docker exec -it linux dnf install -y net-tools vim-enhanced tree bash-completion iproute procps-ng psmisc
# 清理缓存文件
[root@docker ~]# docker exec -it linux dnf clean all
# 停止容器
[root@docker ~]# docker stop linux
# 把容器制作成镜像
[root@docker ~]# docker commit linux mylinux:latest
sha256:7a4449e20f4c59d1f6c4db838b4724cbf63c8f4195513c5f17d053c7752891d5
# 查看新制作的镜像
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mylinux      latest    b64da40467ae   3 seconds ago   249MB
rockylinux   8.5       210996f98b85   13 months ago   205MB
# 删除制作镜像的容器
[root@docker ~]# docker rm -f linux 
linux

七  容器部署应用

在容器中安装部署 apache 服务

如何在容器内启动服务?

  • 由于容器内没有 systemd,参考服务文件手工执行启动程序
  • 服务文件路径 /usr/lib/systemd/system/httpd.service
  • 查看服务文件,设置环境变量执行服务启动程序
  • 如果没有 service文件,参考官方手册配置、启动服务

1  安装部署 apache 服务

# 删除所有容器
[root@docker ~]# docker rm -f $(docker ps -aq)
# 创建一个名为 myweb 的容器
[root@docker ~]# docker run -it --rm --name myweb mylinux:latest
#-----------------------------------------------------------
# 在容器内安装部署 apache
[root@a7f9d0c3e3e2 /]# dnf install -y httpd
[root@a7f9d0c3e3e2 /]# echo "Hello World ." >/var/www/html/index.html
[root@a7f9d0c3e3e2 /]# cat /usr/lib/systemd/system/httpd.service
[root@a7f9d0c3e3e2 /]# export LANG=C
[root@a7f9d0c3e3e2 /]# /usr/sbin/httpd -DFOREGROUND
# 在另一个终端完成访问验证

2  为 apache 添加解析 php 文件支持

# ctrl + c 终止 httpd 服务运行
[root@a7f9d0c3e3e2 /]# dnf install -y php
[root@a7f9d0c3e3e2 /]# vim /etc/httpd/conf.modules.d/00-mpm.conf
11: LoadModule mpm_prefork_module ... ... # 去掉注释 
17: # LoadModule mpm_event_module ... ... # 注释配置 
[root@a7f9d0c3e3e2 /]# /usr/sbin/httpd -DFOREGROUND
# 服务不要关闭,在其他终端完成测试

3  验证配置

# 在另一个终端拷贝 public/info.php 到 docker 主机
[root@docker ~]# docker cp info.php myweb:/var/www/html/
[root@docker ~]# curl http://172.17.0.2/info.php
<pre>
Array
(
    [REMOTE_ADDR] => 172.17.0.1
    [REQUEST_METHOD] => GET
    [HTTP_USER_AGENT] => curl/7.61.1
    [REQUEST_URI] => /info.php
)
php_host:   616e75df56ae
1229

八  容器服务原理

1  什么是上帝进程?

简单的说就是系统创建之初产生的第一个进程

2  特点

  • 没有父进程,PID = 1
  • 是所有程序的根进程
  • 上帝进程死亡系统实例也就关闭了

3  容器有没有上帝进程?

容器的启动进程就是上帝进程

如果容器的启动进程关闭等同于容器关闭

4  前台服务 VS后台服务?

前台服务是占有控制终端的进程,可以在终端与用户交互式的访问与操作,一旦终端关闭,这个进程也随之消失。

后台进程也叫守护进程,不受终端控制,它不需要交互;后台进程的本质是向系统托管进程服务

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

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

相关文章

Logstash--logstash-syslog-putput插件安装及使用

这篇文章讲的是如何在Linux服务器上安装logstash-syslog-output插件及使用&#xff0c;是集网上之大成&#xff0c;择选出一条正确有效简短的路。 安装 插件logstash-syslog-output&#xff0c;如果你的logstash没有&#xff0c;则需要安装。 查看logstash是否含有这个插件的…

代码生成商业化一些思考

代码生成解决方案 生成项目代码有3大类的解决思路&#xff1a; 1.从底到上的生成&#xff0c;部分代码生成生成一行代码或者一个方法种一小块代码生成&#xff0c;ide插件代码生成基本这种思路 2.大语言模型作为软件工程不同角色agent&#xff0c;用户给出idea每个agent自动…

vue3:16、Pinia的基本语法

选项式APi 组合式API src/store/counter.js import { defineStore } from "pinia"; import { computed, ref } from "vue";export const userCounterStore defineStore("counter",()>{//声明数据 state - countconst count ref(100)//声…

ATTENTION, LEARN TO SOLVE ROUTING PROBLEMS!

ATTENTION, LEARN TO SOLVE ROUTING PROBLEMS! 1、背景2、基于注意力层的模型4、解码器 1、背景 本篇论文基于Transformer模型提出了一个基于注意力层的模型&#xff0c;并采用REINFORCE方法训练模型&#xff0c;来求解以下几种组合优化问题&#xff1a; 旅行商问题(Travellin…

Docker 的分层文件系统

1 分层文件系统 UnionFS 联合文件系统 bootfs&#xff1a;boot file systemrootfs&#xff1a;root file system 分层文件系统 Docker镜像都是只读的&#xff0c;当容器启动时&#xff0c;一个新的可写层被加到镜像的顶部&#xff0c;这一层就是我们通常说的容器层&#xf…

Redis缓存预热、缓存雪崩、缓存击穿、缓存穿透

文章目录 Redis缓存预热、缓存雪崩、缓存击穿、缓存穿透一、缓存预热1、问题排查2、解决方案&#xff08;1&#xff09;准备工作&#xff08;2&#xff09;实施&#xff08;3&#xff09;总结 二、缓存雪崩1、解决方案 三、缓存击穿1、解决方案&#xff08;1&#xff09;互斥锁…

大语言模型之八-提示工程(Prompt engineer)

大语言模型的效果好&#xff0c;很大程度上归功于算力和数据集&#xff0c;算力使得模型可以足够大&#xff0c;大到模型的理解、记忆、推理和生成以及泛化能力可以同时兼备&#xff0c;而数据集则是模型学习的来源。 LLM中的prompt方法主要用于fine-tune阶段&#xff0c;即在…

DIM层维度表学习之用户维度表分析

1.用户维度表的模型 DROP TABLE IF EXISTS dim_user_zip; CREATE EXTERNAL TABLE dim_user_zip (id STRING COMMENT 用户ID,name STRING COMMENT 用户姓名,phone_num STRING COMMENT 手机号码,email STRING COMMENT 邮箱,user_level STRING COM…

ArcGIS Pro3.0.2保姆级安装教程

软件简介&#xff1a; ArcGIS Pro是ERSI推出的新一代原生态64位ArcGIS桌面产品。具备强大的二维、三维一体化功能&#xff0c;继承了传统桌面产品ArcMap等产品几乎所有的功能&#xff0c;并在多个方面作了进一步的优化和改进&#xff0c;是云端一体化、数据科学与空间数据科学…

深入理解 JVM 之——字节码指令与执行引擎

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 类文件结构 Write Once&#xff0c;Run Anywhere 对于 C 语言从程序到运行需要经过编译的过程&#xff0c;只有经历了编译后&#xff0c;我们所编写的代码才能够翻译为机器可以直接运行的二进制代码&#x…

Java“牵手”淘宝商品列表数据,关键词搜索淘宝商品数据接口,淘宝API申请指南

淘宝商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取淘宝商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问淘宝商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…

面试求职-简历编写技巧

没有高水平简历 只有高匹配的简历 试问一下&#xff1a;如果一个非常牛逼的软件工程的硕士&#xff0c;投递市场营销岗位&#xff0c;结果会是什么样呢&#xff1f; 这位同学大概率没办法通过简历。 不是因为他不够优秀&#xff0c;而是因为简历和岗位不够匹配。 在公司的招…

第20章 原子操作实验(iTOP-RK3568开发板驱动开发指南 )

在上一章节的实验中&#xff0c;对并发与竞争进行了实验&#xff0c;两个app应用程序之间对共享资源的竞争访问引起了数据传输错误&#xff0c;而在Linux内核中&#xff0c;提供了四种处理并发与竞争的常见方法&#xff0c;分别是原子操作、自旋锁、信号量、互斥体&#xff0c;…

Linux DirtyPipe权限提升漏洞 CVE-2022-0847

Linux DirtyPipe权限提升漏洞 CVE-2022-0847 漏洞描述 CVE-2022-0847-DirtyPipe-Exploit CVE-2022-0847 是存在于 Linux内核 5.8 及之后版本中的本地提权漏洞。攻击者通过利用此漏洞&#xff0c;可覆盖重写任意可读文件中的数据&#xff0c;从而可将普通权限的用户提升到特权…

YOLOV7改进-具有隐式知识学习的Efficient解耦头

[解耦头][https://github.com/z1069614715/objectdetection_script/blob/master/yolo-improve/yolov7-DecoupledHead.py] 1、复制这些到yolo.py 2、到这 3、复制下半部分到yolo.py 4、替换这里 5、最后的加到上面的这里 6、添加 7、添加 8、V5大概一个点的提升 9、解…

快速完成工信部APP备案流程_以阿里云APP备案为例

阿里云APP备案流程分为6步&#xff0c;APP备案成功后应用可以上架&#xff0c;登录阿里云账号填写APP信息&#xff0c;等待阿里云初审&#xff0c;初审通过后进行工信部短信核验&#xff0c;管局审核通过后APP即可备案成功&#xff0c;最后移动APP应用可以分发平台上架&#xf…

万字长文,梳理清楚Python多线程与多进程!

作者丨钱魏Way 来源 https://www.biaodianfu.com/python-multi-thread-and-multi-process.html 在学习Python的过程中&#xff0c;有接触到多线程编程相关的知识点&#xff0c;先前一直都没有彻底的搞明白。今天准备花一些时间&#xff0c;把里面的细节尽可能的梳理清楚。 …

Unity 之 Invoke 与InvokeRepeting 函数控制定时调用

文章目录 InvokeInvokeRepeating Invoke 在Unity游戏开发中&#xff0c;Invoke是一种用于延迟调用方法的方法。它允许你在一定的时间之后执行特定的函数或方法&#xff0c;通常用于执行定时任务&#xff0c;例如在一段时间后触发一个事件或在一定间隔内重复执行某个方法。Invo…

第68步 时间序列建模实战:ARIMA建模(Matlab)

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们使用Matlab进行SARIMA模型的构建。 不同样&#xff0c;这里使用另一个数据&#xff1a; 采用《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic …

65.Linux系统上库文件的生成与使用

目录 1.什么是库文件 2.静态库的生成与使用 2.1静态库的生成 2.2静态库的使用 3.共享库的生成和使用 3.1共享库的生成 3.2共享库的使用 4、静态库和共享库的区别 1.什么是库文件 库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在&#xff1a;/lib 和 /…