容器编排学习(三)端口映射与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压缩视频不改变画质?跟我这样压缩视频大小
在当今数字化时代,视频文件变得越来越普遍,然而,这些文件通常都很大,给存储和传输带来了困难,为了解决这个问题,许多人都希望将视频压缩得更小,而又不牺牲画质,下面就来看看具体应该…...
AQS同步队列和等待队列的同步机制
理解AQS必须要理解同步队列和等待队列之间的同步机制,简单来说流程是: 获取锁失败的线程进入同步队列,成功的占用锁,占锁线程调用await方法进入条件等待队列,其他占锁线程调用signal方法,条件等待队列线程进…...
vue3实现无限循环滚动的方法;el-table内容无限循环滚动的实现
需求:vue3实现一个div内的内容无限循环滚动 方法一: <template><div idcontainer><div class"item" v-foritem in 5>测试内容{{{ item }}</div></div> </template><script setup> //封装一个方法…...
Windows 安装 MariaDB 数据库
之前一直使用 MySQL,使用 MySQL8.0 时候,占用内存比较大,储存空间好像也稍微有点大,看到 MariaDB 是用来代替 MySQL 的方案,之前用着也挺得劲,MySQL8.0 以上好像不能去导入低版本的 sql,或者需要…...
RK3568-mpp(Media Process Platform)媒体处理软件平台
第一章 MPP 介绍 1.1 概述 瑞芯微提供的媒体处理软件平台(Media Process Platform,简称 MPP)是适用于瑞芯微芯片系列的通用媒体处理软件平台。 该平台对应用软件屏蔽了芯片相关的复杂底层处理,其目的是为了屏蔽不同芯片的差异,为使用者提供统一的视频媒体处理接口(Medi…...
【ModelSim】使用终端命令行来编译、运行Verilog程序,创建脚本教程
▚ 01 ModelSim命令解说 📢 这些命令是 ModelSim 中常用的命令,用于创建库、编译源代码和启动仿真。 🔔 在使用这些命令之前,你需要在 ModelSim 的命令行界面或脚本中执行 vlib 命令来创建一个库,然后使用 vlog 命令…...
腾讯云网站备案详细流程_审核时间说明
腾讯云网站备案流程先填写基础信息、主体信息和网站信息,然后提交备案后等待腾讯云初审,初审通过后进行短信核验,最后等待各省管局审核,前面腾讯云初审时间1到2天左右,最长时间是等待管局审核时间,网站备案…...
HTTP介绍:一文了解什么是HTTP
前言: 在当今数字时代,互联网已经成为人们生活中不可或缺的一部分。无论是浏览网页、发送电子邮件还是在线购物,我们都离不开超文本传输协议(HTTP)。HTTP作为一种通信协议,扮演着连接客户端和服务器的重要角…...
动态规划之子数组系列
子数组系列 1. 环形⼦数组的最⼤和2. 乘积最大子数组3. 等差数列划分4. 最长湍流子数组5. 单词拆分6. 环绕字符串中唯⼀的子字符串 1. 环形⼦数组的最⼤和 1.题目链接:环形⼦数组的最⼤和 2.题目描述:给定一个长度为 n 的环形整数数组 nums ,…...
LeetCode(力扣)332.重新安排行程Python
LeetCode332.重新安排行程 题目链接代码 题目链接 https://leetcode.cn/problems/reconstruct-itinerary/ 代码 class Solution:def backtracking(self, tickets, used, cur, result, path):if len(path) len(tickets) 1:result.append(path[:])return Truefor i, ticket…...
Pytho 从列表中创建字典 (dict.fromkeys()的问题)
问题起因:想在代码中通过已有的列表创建一个字典,但是又不想写循环,更不想手动填,所以用到了字典对象的fromkeys()方法 。 先以一个简单的例子介绍一下该方法: a ["A", "B", "C", &qu…...
重庆品牌网站建设公司哪家好/常见的网络推广方式
什么是几何变换(Transform) 在图形学中,主要有三种几何变换,分别是平移(Translate),旋转(Rotation)和缩放(Scaling)。在D2D中,这三种变…...
深圳工程建设服务网/百度网站推广排名优化
最近在开发的时候发现了一个需求,就是要使用post请求去请求其他项目的接口,并且还需要带参。所以就研究了一下。java代码实现post请求1. 搭建springboot环境1.1 pom.xml的配置org.apache.httpcomponentshttpclient4.5.101.2 test POST方法实现RunWith(Sp…...
wordpress中文插件下载/网站建设服务
ip 是个指令喔!并不是那个 TCP/IP 的 IP 啦!这个 ip 指令的功能可多了!基本上,他就是整合了 ifconfig 与 route 这两个指令啰~不过, ip 可以达成的功能却又多更多!真是个相当厉害的指令。如果你…...
工商登记网站/邯郸seo优化公司
上班坐车时间长,于是需要看书来打磨时间,发现书脏的很快,尤其封面会有手握的痕迹,突然想起了久违的书皮儿,可是用什么包呢?突然想起了路边发招生简报的,于是留意。今天正巧,路边有个…...
免费网站建站/广西百度seo
孩子为什么要学编程?少儿编程有什么好处吗?人工智能时代,让孩子先人一步看见未来AI时代来临,很多工作将被人工智能取代,未来的人才必须具备学习与创新能力,而编程能让孩子站在这个时代的最前沿,…...
通过网站如何做海外贸易/慧聪网
去Oracle行动 最近公司要发展海外项目,所以要将现有的系统全部平移过去,另外数据库也要从原来的Oracle变为Mysql。公司的数据库交互层面使用的是Mybatis,而Oracle与Mysql也有一些语法上的不同。所以在项目中的Sql要改动,但是多个…...