容器编排学习(三)端口映射与Harber镜像仓库介绍
一 对外发布服务(端口映射)
1 概述
新创建容器的IP 地址是随机的
容器在重启后每次 IP 都会发生变化
容器服务只有宿主机才能访问
如何才能使用容器对外提供稳定的服务?
容器端口可以与宿主机的端口进行映射绑定
从而把宿主机变成对应的服务,不用关心容器的IP地址
每个端口都只能和一个容器绑定
2 端口绑定
- docker run -itd -p 宿主机端口:容器端口 镜像名称:标签
# 宿主机绑定 apache
[root@docker ~]# docker run -itd --name web -p 80:80 myos:httpd
# 绑定后,直接访问宿主机的 IP 地址即可
[root@docker ~]# curl http://192.168.1.31
Welcome to The Apache.# 同一个端口不能同时绑定给多个容器
# 如果想把 80 端口绑定给 nginx 容器需要把之前的 apache 容器关停
[root@docker ~]# docker rm -f web
[root@docker ~]# docker run -itd --name web -p 80:80 myos:nginx
# 重新绑定后,访问验证
[root@docker ~]# curl http://192.168.1.31
Nginx is running !# 完成实验,删除容器
[root@docker ~]# docker rm -f web
二 容器卷
发布nginx-php 服务创建容器 nginx和 php-fpm
配置 php 容器使用 nginx的网络名称空间
使用卷修改nginx的配置文件,使之能够解析 php
把容器服务发布出来,并访问验证
1 概述
Docker容器不适合保存任何数据
重要数据在容器内不方便管理易丢失
修改多个容器中的数据非常困难
多容器之间有数据共享、同步需求
数据文件与配置文件频繁更改
以上问题都可以使用容器卷来解决
Docker可以映射宿主机文件或目录到容器中
- 目标对象不存在就自动创建
- 目标对象存在就直接覆盖掉
- 多个容器可以映射同一个目标对象来达到数据共享的目的
启动容器时,使用 -v 映射参数(可有多个)
docker run -itd -v 宿主机对象:容器内对象 镜像名称:标签
2 映射卷
使用卷共享网站数据目录,让 httpd 容器和nginx容器共享网站数据目录
共享网页目录
# 创建共享卷目录
[root@docker ~]# mkdir /var/webroot # 添加测试页面
[root@docker ~]# echo "hello world" >/var/webroot/index.html
[root@docker ~]# cp info.php /var/webroot/# 创建 nginx 容器,并映射数据卷
[root@docker ~]# docker run -itd --rm --name mynginx \-v /var/webroot:/usr/local/nginx/html myos:nginx# 创建 apache 容器,与 mynginx 映射同样的卷
[root@docker ~]# docker run -itd --rm --name myhttpd \-v /var/webroot:/var/www/html myos:httpd# 查看容器 IP 地址,并访问验证
[root@docker ~]# docker inspect mynginx |grep -i IPAddress
[root@docker ~]# curl http://172.17.0.2
hello world[root@docker ~]# docker inspect myhttpd |grep -i IPAddress
[root@docker ~]# curl http://172.17.0.3
hello world
使用共享卷修改配置文件
# 获取配置文件
[root@docker ~]# mkdir /var/webconf
[root@docker ~]# docker cp mynginx:/usr/local/nginx/conf/nginx.conf /var/webconf/# 编辑配置文件,添加 php 解析配置
[root@docker ~]# vim /var/webconf/nginx.conflocation ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fastcgi.conf;}# 使用卷映射配置文件,重建 nginx 容器
[root@docker ~]# docker rm -f mynginx
[root@docker ~]# docker run -itd --rm --name mynginx -p 80:80 \-v /var/webconf/nginx.conf:/usr/local/nginx/conf/nginx.conf \-v /var/webroot:/usr/local/nginx/html myos:nginx# 进入容器验证配置文件
[root@docker ~]# docker exec -it mynginx /bin/bash
[root@e440b53a860a html]# cat /usr/local/nginx/conf/nginx.conf
三 容器网络通信
1 概述
docker 的网络通信模式
bridge 模式,默认模式
host 模式,与宿主机共享网络
none 模式,无网络模式
container 模式,共享其他容器的网络命名空间
自定义网络,自由创建桥接网络或者overlay网络
2 图例
3 共享网络名称空间
使用网络名称空间共享网络: - 参数 --network=container:容器名称 | ID
# 创建 php 容器,使用 nginx 的网络名称空间
[root@docker ~]# docker run -itd --network=container:mynginx \-v /var/webroot:/usr/local/nginx/html \--rm --name myphp myos:php-fpm# 配置验证
[root@docker ~]# docker exec -it mynginx ss -ltun
Netid State Recv-Q Send-Q Local Address:Port
tcp LISTEN 0 128 127.0.0.1:9000
tcp LISTEN 0 128 *:80
[root@docker ~]# curl http://127.0.0.1/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: 4525e99cea77
1229
四 服务编排与治理
1 概述
从计算机诞生开始,架构就是一个一直绕不开的话题
架构并不是被发明出来的,而是持续演进的结果
2013年一个名为 docker的项目开源,随容器技术的兴起一种通过以容器为载体,使用多个小型服务组合来构建复杂应用的微服务架构逐渐清晰,这些小型服务围绕具体应用来构建。各个服务之间可以采用不同的编程语言,不同的存储技术,运行在各自的进程之中,互不干扰,协同工作
2 微服务架构
微服务并不是一种技术,而是架构思想、它以容器技术为载体,演进出的一种以软件运行环境、产品、研发、运营为一体全新模式。站在 Docker 的角度,软件就是容器的组合而容器又是服务的最佳载体,一台计算机同时运行多个容器从而就能很轻松地实现复杂的架构。
优点:松耦合高内聚、高度可扩展、出色的弹性、易于部署、访问
3 容器服务编排
在微服务架构中每个微服务一般都会包含多个容器实例
如果每个微服务都要手动管理,那么效率之低、维护量之大可想而知。为了解决编排部署的问题,docker 公司推出了docker Compose 工具
Compose 是一个用于定义和运行多容器的应用的工具
使用 Compose,可以在一个文件中配置多个容器服务,然后使用一个简单的命令就可以轻松、高效地管理配置中引用的所有容器服务
4 容器服务治理
服务文件:docker-compose.yaml
# 安装 compose 组件
[root@docker ~]# dnf install -y docker-compose-plugin# 创建项目
[root@docker ~]# vim docker-compose.yaml
name: websvc # 项目名称
version: "3" # 语法格式版本
services: # 关键字,定义服务websvc: # 服务名称container_name: nginx # 容器名称image: myos:nginx # 创建容器使用的镜像
指令 | 说明 |
---|---|
up | 创建项目并启动容器 |
down | 删除项目容器及网络 |
ls | 列出可以管理的项目 |
start/stop/restart | 启动项目/停止项目/重启项目 |
images | 列出项目使用的镜像 |
ps | 显示项目中容器的状态 |
logs | 查看下项目中容器的日志 |
5 项目管理
# 创建项目,并启动
[root@docker ~]# docker compose -f docker-compose.yaml up -d
[+] Running 2/2⠿ Network websvc_default Created 0.0s⠿ Container nginx Started 0.3s# 查看项目
[root@docker ~]# docker compose ls
NAME STATUS CONFIG FILES
websvc running(1) /root/docker-compose.yaml# 查看项目中的容器状态
[root@docker ~]# docker compose -p websvc ps
NAME COMMAND SERVICE STATUS PORTS
nginx "nginx -g 'daemon of…" websvc running 80/tcp# 启动、停止、重启项目
[root@docker ~]# docker compose -p websvc stop
[+] Running 1/1⠿ Container nginx Stopped 0.1s
[root@docker ~]# docker compose -p websvc start
[+] Running 1/1⠿ Container nginx Started 0.2s
[root@docker ~]# docker compose -p websvc restart
[+] Running 1/1⠿ Container nginx Started 0.3s# 查看项目中容器的日志
[root@docker ~]# docker inspect nginx |grep IPAddress
[root@docker ~]# curl http://172.17.0.2/info.php
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.22.1</center>
</body>
</html>
[root@docker ~]# docker compose -p websvc logs
nginx | 2023/02/13 13:55:39 [error] 7#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"# 删除项目
[root@docker ~]# docker compose -p websvc down
[+] Running 2/2⠿ Container nginx Removed 0.1s⠿ Network websvc_default Removed 0.0s
6 compose
<1> 概述
Compose 项目是 Docker 官方的开源项目,负责实现容器集群的快速编排,在 Compose 中有两个核心概念,分别是服务和项目
服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目(project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yaml 文件中定义
<2> compose语法
指令 | 说明 |
---|---|
networks | 配置容器连接的网络 |
container_name | 指定容器名称 |
depends_on | 解决容器的依赖、启动先后的问题 |
command | 覆盖容器启动后默认执行的命令 |
environment | 设置环境变量 |
image | 指定为镜像名称或镜像 ID |
network_mode | 设置网络模式 |
restart | 容器保护策略[always、no、on-failure] |
ports | 暴露端口信息 |
volumes | 数据卷,支持 [volume、bind、tmpfs、npipe] |
<3> 定义 nginx + nginx-fpm 项目
[root@docker ~]# vim docker-compose.yaml
name: websvc # 项目名称
version: "3" # 语法版本格式
services: # 关键字,定义服务nginxsvc: # 服务名称container_name: nginx # 容器名称image: myos:nginx # 创建容器使用的镜像restart: always # 容器保护策略volumes: # 卷- type: bind # 卷类型source: /var/webconf/nginx.conf # 宿主机路径target: /usr/local/nginx/conf/nginx.conf # 容器路径- type: bindsource: /var/webroot # 宿主机路径target: /usr/local/nginx/html # 容器路径network_mode: bridge # 网络工作模式ports: # 端口绑定- 80:80 # 宿主机端口:容器端口environment: - "TZ=Asia/Shanghai"php-fpm: # 服务名称container_name: php-fpm # 容器名称 image: myos:php-fpm # 创建容器使用的镜像restart: always # 容器保护策略volumes: # 卷- type: bind # 卷类型source: /var/webroot # 宿主机路径target: /usr/local/nginx/html # 容器路径depends_on: # 依赖关系- nginxsvc # 依赖容器名称network_mode: "container:nginx" # 网络工作模式
<4> 验证项目
# 创建,并启动项目
[root@docker ~]# docker compose -f docker-compose.yaml up -d
[+] Running 2/2⠿ Container nginx Started 0.3s⠿ Container php-fpm Started 0.3s# 查看项目
[root@docker ~]# docker compose ls
NAME STATUS CONFIG FILES
websvc running(2) /root/docker-compose.yaml# 查看容器状态,验证服务
[root@docker ~]# docker compose -p websvc ps
NAME COMMAND SERVICE STATUS
nginx "nginx -g 'daemon of..." nginx running ......
php-fpm "php-fpm --nodaemoni..." php-fpm running ......# 访问 php 页面验证
[root@docker ~]# curl -s http://127.0.0.1/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: 7e037978c775
1229
五 harbor仓库
1 概述
Habor 是在 Registry 上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:提供 WEB界面,优化用户体验,支持登陆、搜索功能,区分公有、私有镜像,以及基于角色的访问控制,集成日志审计、支持水平扩展等功能。
部署 harbor 环境非常繁琐,涉及到 web服务器、数据库服务器、程序代码、docker 私有镜像仓库等 9个应用
2 安装部署
官方为了简化安装部署的步骤和流程,采用了微服务方式对项目进行了管理,所有应用官方都以 docker 镜像的方式发布,项目采用 compose 方式管理
使用微服务项目方式部署 harbor 仓库
主机名 | ip地址 | 最低配置 |
---|---|---|
harbor | 192.168.1.30 | 2CPU,4G内存 |
-
安装部署docker
[root@harbor ~]# vim /etc/hosts
192.168.1.30 harbor# 安装部署 docker 及 compose 组件
[root@harbor ~]# dnf install -y docker-ce docker-compose-plugin
[root@harbor ~]# systemctl enable --now docker
-
创建https证书
# 导入 harbor 项目镜像
[root@harbor ~]# tar -zxf harbor-v2.7.0.tgz -C /usr/local/
[root@harbor ~]# cd /usr/local/harbor
[root@harbor harbor]# docker load -i harbor.v2.7.0.tar.gz
# 创建 https 证书
[root@harbor harbor]# mkdir tls
[root@harbor harbor]# openssl genrsa -out tls/cert.key 2048
[root@harbor harbor]# openssl req -new -x509 -days 3650 \-key tls/cert.key -out tls/cert.crt \-subj "/C=CN/ST=BJ/L=BJ/O=Tedu/OU=NSD/CN=harbor"
-
启动harbor项目
# 修改配置文件
[root@harbor harbor]# cp harbor.yml.tmpl harbor.yml
[root@harbor harbor]# vim harbor.yml
05: hostname: harbor
08: # http:
10: # port: 80
17: certificate: /usr/local/harbor/tls/cert.crt
18: private_key: /usr/local/harbor/tls/cert.key
34: harbor_admin_password: admin123# 预安装环境检查,生成项目文件
[root@harbor harbor]# /usr/local/harbor/prepare
# 创建并启动项目
[root@harbor harbor]# docker compose -f docker-compose.yml up -d
# 添加开机自启动
[root@harbor harbor]# chmod 0755 /etc/rc.d/rc.local
[root@harbor harbor]# echo "/usr/bin/docker compose -p harbor start" >>/etc/rc.d/rc.local
- 查看验证项目
# 查看项目
[root@harbor harbor]# docker compose ls
NAME STATUS CONFIG FILES
harbor running(9) /usr/local/harbor/docker-compose.yml
# 查看容器状态
[root@harbor harbor]# docker compose -p harbor ps
NAME COMMAND SERVICE STATUS
harbor-core "/harbor/entrypoint.…" core running (healthy)
harbor-db "/docker-entrypoint.…" postgresql running (healthy)
harbor-jobservice "/harbor/entrypoint.…" jobservice running (healthy)
harbor-log "/bin/sh -c /usr/loc…" log running (healthy)
harbor-portal "nginx -g 'daemon of…" portal running (healthy)
nginx "nginx -g 'daemon of…" proxy running (healthy)
redis "redis-server /etc/r…" redis running (healthy)
registry "/home/harbor/entryp…" registry running (healthy)
registryctl "/home/harbor/start.…" registryctl running (healthy)
3 harbor管理
用户:用来登录 harbor,以及认证权限
项目:用来存储镜像的地址路径
- 管理员可以分配项目权限给用户
- 用户也可以自己创建项目
公共仓库:任何人都可以访问或下载镜像,上传镜像需要用户认证
私有仓库:不管是上传还是下载只有认证用户才可以访问
容器管理命令 | 说明 |
---|---|
docker login | 登录私有镜像仓库 |
docker logout | 退出登录 |
-
登录私有仓库
# 添加主机配置
[root@docker ~]# vim /etc/hosts
192.168.1.30 harbor
192.168.1.35 registry
# 添加私有仓库配置
[root@docker ~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["https://harbor:443", "http://registry:5000"],"insecure-registries":["harbor:443", "registry:5000"]
}
[root@docker ~]# systemctl restart docker# 登录 harbor 仓库
[root@docker ~]# docker login harbor:443
Username: luck
Password: ********
... ...
Login Succeeded
# 认证信息记录文件
[root@docker ~]# cat /root/.docker/config.json
{"auths": {"harbor:443": {"auth": "bHVjazoqKioqKioqKg=="}}
}
# 退出登录
[root@docker ~]# docker logout harbor:443
Removing login credentials for harbor:443
-
上传镜像
# 设置标签
[root@docker ~]# docker tag rockylinux:8.5 harbor:443/myimg/rockylinux:8.5
# 没有登录上传失败
[root@docker ~]# docker push harbor:443/myimg/rockylinux:8.5
65dbea0a4b39: Preparing
unauthorized: unauthorized to access repository ......# 登录成功后才可以上传
[root@docker ~]# docker login harbor:443
Username: luck
Password: ********Login Succeeded
# 上传成功
[root@docker ~]# docker push harbor:443/myimg/rockylinux:8.5
The push refers to repository [harbor:443/myimg/rockylinux]
......# 设置标签
[root@docker ~]# docker tag myos:latest harbor:443/library/myos:latest
# 上传镜像到 library 项目,没有权限上传失败
[root@docker ~]# docker push harbor:443/library/myos:latest
The push refers to repository [harbor:443/library/myos]
65dbea0a4b39: Preparing
unauthorized: unauthorized to access repository:
......# 赋权后重新上传镜像
[root@docker ~]# docker push harbor:443/library/myos:latest
The push refers to repository [harbor:443/library/myos]
......
- 案例:上传镜像到 library 项目
镜像管理赋予普通用户管理项目library 的权限
上传 rockylinux:8.5到 myimg/rockylinux:8.5
上传 myos:httpd到 myimg/httpd:latest
上传 myos:8.5、myos:httpd、myos:nginx、myos:php-fpm、myos:latest 到 library 项目下
[root@docker ~]# docker tag myos:httpd harbor:443/myimg/httpd:latest
[root@docker ~]# docker push harbor:443/myimg/httpd:latest
[root@docker ~]# docker rmi harbor:443/myimg/httpd:latest
[root@docker ~]# for i in 8.5 httpd nginx php-fpm latest;dodocker tag myos:${i} harbor:443/library/myos:${i}docker push harbor:443/library/myos:${i}docker rmi myos:${i} harbor:443/library/myos:${i}
done
相关文章:

容器编排学习(三)端口映射与Harber镜像仓库介绍
一 对外发布服务(端口映射) 1 概述 新创建容器的IP 地址是随机的 容器在重启后每次 IP 都会发生变化 容器服务只有宿主机才能访问 如何才能使用容器对外提供稳定的服务? 容器端口可以与宿主机的端口进行映射绑定 从而把宿主机变成对应的服务&a…...

Day_13 > 指针进阶(2)
目录 1.函数指针数组 2.指向函数指针数组的指针 3.回调函数 qsort()函数 代码示例 void* 4.结束 今天我们在进阶指针的基础上,学习进阶指针的第二部分 1.函数指针数组 首先我们回顾一下指针数组 char* arr[5]://字符指针数组 - 数组 - 存放的是字符指针 in…...

对Transformer中的Attention(注意力机制)的一点点探索
摘要:本文试图对 Transformer 中的 Attention 机制进行一点点探索。并就 6 个问题深入展开。 ✅ NLP 研 1 选手的学习笔记 简介:小王,NPU,2023级,计算机技术 研究方向:文本生成、摘要生成 文章目录 一、为啥…...
车内信息安全技术-安全技术栈-软件安全
操作系统 1.隔离技术 信息安全中的隔离技术通常指的是将不同安全级别的信息或数据隔离开来,以保护敏感信息不受未授权的访问或泄露。在操作系统中,常见的隔离技术包括:虚拟化技术:通过虚拟化软件,将物理计算机分割成多个独立的虚拟计算机,每个虚拟计算机都可以运行独立的…...

Redis常见命令
命令可以查看的文档 http://doc.redisfans.com/ https://redis.io/commands/ 官方文档(英文) http://www.redis.cn/commands.html 中文 https://redis.com.cn/commands.html 个人推荐这个 https://try.redis.io/ redis命令在线测试工具 https://githubfa…...

Android Studio实现一笔画完小游戏
文章目录 一、项目概述二、开发环境三、详细设计3.1、数据库设计3.2、普通模式3.3、随机模式3.4、关卡列表 四、运行演示五、项目总结六、源码获取 一、项目概述 Android一笔画完是一种益智游戏,玩家需要从起点开始通过一条连续的线,将图形中所有的方块…...
【Python 程序设计】数据人员入门【02/8】
一、说明 介绍如何管理 Python 依赖项和一些虚拟环境最佳实践。 以下文章是有关 Python 数据工程系列文章的一部分,旨在帮助数据工程师、数据科学家、数据分析师、机器学习工程师或其他刚接触 Python 的人掌握基础知识。迄今为止,本初学者指南包括&#…...

学习笔记——树上哈希
普通子树哈希 树上的很多东西都是转化成链上问题的,比如树上哈希 树上哈希,主要是用于树的同构这个东西上的 什么是树的同构? 如图,不考虑节点编号,三棵树是同构的 将树转化成链,一般有两种方式…...

Opencv快速入门教程,Python计算机视觉基础
快速入门 OpenCV 是 Intel 开源计算机视觉库。它由一系列 C 函数和少量 C 类构成, 实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV 拥有包括 300 多个 C 函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也 可以使用某些外部库。 OpenCV 对非…...
laravel 报错误信息 Carbon\Exceptions\InvalidFormatException
Carbon\Exceptions\InvalidFormatException Unexpected data found. at vendor\nesbot\carbon\src\Carbon\Traits\Creator.php:687 683▕ return $instance; 684▕ } 685▕ 686▕ if (static::isStrictModeEnabled()) { ➜ 687…...

UI自动化之混合框架
什么是混合框架,混合框架就是将数据驱动与关键字驱动结合在一起,主要用来回归业务主流程,将核心流程串联起来。 上一篇我们写到了关键字驱动框架,关键字驱动框架是针对一个业务场景的单条测试用例的。 我们以163邮箱的登录到创建…...
SQL创建用户-非DM8.2环境(达梦数据库)
DM8:达梦数据库SQL创建用户-非DM8.2环境 环境介绍 环境介绍 在没有图形化界面,或者想快速创建用户,可以使用一下SQL语句;将其中的 CESHI 替换为要创建的用户名即可,默认创建了数据表空间,索引表空间,文件大…...
Thread类中run和start的区别
答:调用线程类中的 start 方法,才开始创建并启动线程,而线程被回收,则是要执行完线程的入口方法(对于主线程来说,则是要执行完 main 方法),这里要回收线程则是要将(&…...
ElementUI浅尝辄止35:Checkbox 多选框
一组备选项中进行多选 1.如何使用? 单独使用可以表示两种状态之间的切换,写在标签中的内容为 checkbox 按钮后的介绍。 //在el-checkbox元素中定义v-model绑定变量,单一的checkbox中,默认绑定变量的值会是Boolean,选…...
讲讲如何用IDEA开发java项目——本文来自AI创作助手
使用IDEA开发Java项目,您可以按照以下步骤进行操作: 下载并安装IntelliJ IDEA 您可以从JetBrains官网下载并安装最新版的IntelliJ IDEA。 创建项目 启动IDEA,在欢迎界面中选择“Create New Project”或者在主菜单中选择“File”->“Ne…...

Kafka3.0.0版本——消费者(Range分区分配策略以及再平衡)
目录 一、Range分区分配策略原理1.1、Range分区分配策略原理的示例一1.2、Range分区分配策略原理的示例二1.3、Range分区分配策略原理的示例注意事项 二、Range 分区分配策略代码案例2.1、创建带有4个分区的fiveTopic主题2.2、创建三个消费者 组成 消费者组2.3、创建生产者2.4、…...
WeiTools
目录 1.1 WeiTools 1.2 getTime 1.3 getImageView 1.4 StringEncode 1.4.1 // TODO Auto-generated catch block WeiTools package com.shrimp.xiaoweirobot.tools;...
目标检测数据集:医学图像检测数据集(自己标注)
1.专栏介绍 ✨✨✨✨✨✨目标检测数据集✨✨✨✨✨✨ 本专栏提供各种场景的数据集,主要聚焦:工业缺陷检测数据集、小目标数据集、遥感数据集、红外小目标数据集,该专栏的数据集会在多个专栏进行验证,在多个数据集进行验证mAP涨点明显,尤其是小目标、遮挡物精度提升明显的…...

【系统设计系列】数据库
系统设计系列初衷 System Design Primer: 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards. 中文版: https://github.com/donnemarti…...

mp4压缩视频不改变画质?跟我这样压缩视频大小
在当今数字化时代,视频文件变得越来越普遍,然而,这些文件通常都很大,给存储和传输带来了困难,为了解决这个问题,许多人都希望将视频压缩得更小,而又不牺牲画质,下面就来看看具体应该…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...