容器编排学习(三)端口映射与Harber镜像仓库介绍

news2024/11/29 2:45:15

一  对外发布服务(端口映射)

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.conf
        location ~ \.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: bind
        source: /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地址最低配置
harbor192.168.1.302CPU,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;do
    docker 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

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

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

相关文章

Revit 几何体的三种上层应用:特征造型、体量和纯粹几何

排除掉墙梁板柱这些和建筑各专业相关的构件&#xff0c;Revit 的上层应用中&#xff0c;有三类和几何相关的应用&#xff0c;特征造型、体量和纯粹几何。这也是通常三维建模软件的几种基础建模组织形式。 特征造型 几何特征造型是一种设计方法&#xff0c;它强调使用几何学原理…

电子产品CE认证申请,CE-RED认证

CE认证&#xff0c;即只限于产品不危及人类、动物和货品的安全方面的基本安全要求&#xff0c;而不是一般质量要求&#xff0c;协调指令只规定主要要求&#xff0c;一般指令要求是标准的任务。 构成欧洲指令核心的"主要要求"&#xff0c;在欧共体1985年5月7日的&…

亚马逊,速卖通,国际站卖家自己做测评补单有什么价值,怎么做?

对于卖家而言&#xff0c;测评资源确实是一项宝贵的财富。通过自养号和广告相结合的策略&#xff0c;可以快速有效地提升产品销量、增加转化率以及提高Listing的权重。这是一个很好的方法来优化产品在平台上的表现 现在很多卖家都选择自己养号下单&#xff0c;自己做测评 1.可…

【AI】机器学习——线性模型(逻辑斯蒂回归)

文章目录 3.3 逻辑斯蒂回归3.3.1 逻辑回归介绍对数几率函数sigmod函数几率 3.3.2 逻辑回归模型3.3.3 参数求解逻辑斯蒂回归策略 3.3.4 损失函数3.3.5 应用&#xff1a;语句情感判断3.3.6 多角度分析逻辑回归信息论角度数学角度与朴素贝叶斯对比 3.3.7 从二分类到多分类问题多次…

深度学习实战51-基于Stable Diffusion模型的图像生成原理详解与项目实战

大家好,我是微学AI,今天给大家介绍一下深度学习实战51-基于Stable Diffusion模型的图像生成原理详解与项目实战。大家知道现在各个平台发的漂亮小姐姐,漂亮的图片是怎么生成的吗?这些生成的底层原理就是用到了Stable Diffusion模型。Stable Diffusion是一种基于深度学习的图…

《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》全文翻译

《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》- Chain-of-Thought Prompting Elicits Reasoning in Large Language Models 论文信息摘要1. 介绍2. 思维链提示3. 算术推理3.1 实验设置3.2 结果3.3 消融研究3.4 思想链的稳健性 4. 常识推理5. 符号…

花见Live Wallpaper Themes 4K Pro for mac(4k视频壁纸)

如果你希望让自己的Mac桌面焕发活力&#xff0c;那么Live Wallpaper & Themes 4K Pro正是一款值得尝试的软件。它提供了丰富的超高清4K动态壁纸和主题&#xff0c;可以让你轻松打造出个性化的桌面环境。 这款软件拥有众多令人惊叹的功能。其中最值得一提的是&#xff0c;它…

项目经验分享|openGauss 刘昱娴:对未知葆有好奇与坚持

开源之夏 项目经验分享 2023 #02 # 项目基本信息 项目名称&#xff1a;分页器组件封装 项目导师&#xff1a;王杏 项目简述与产出要求&#xff1a;分页器组件封装 1. 完成分页器组件封装&#xff1b;支持移动端和pc端 2. 适配Chrome、Safari、Firefox、Edge 等主流浏览器…

分类预测 | MATLAB实现PCA-BiLSTM(主成分双向长短期记忆神经网络)分类预测

分类预测 | MATLAB实现PCA-BiLSTM(主成分双向长短期记忆神经网络)分类预测 目录 分类预测 | MATLAB实现PCA-BiLSTM(主成分双向长短期记忆神经网络)分类预测预测效果基本介绍程序设计参考资料致谢 预测效果 基本介绍 分类预测 | MATLAB实现PCA-BiLSTM(主成分双向长短期记忆神经网…

系列三、Linux中安装Nginx

一、准备工作 1.1、确保gcc安装成功 如果没有安装gcc执行./configure将会报错。 # 使用如下指令安装gcc&#xff1a;两个都要安装 yum -y install gcc yum -y install gcc-c 1.2、下载nginx1.12.2 http://nginx.org/en/download.html 1.3、下载pcre-8.3.7.tar.gz 1.3.…

Qt应用程序连接达梦数据库-飞腾PC麒麟V10

目录 前言1 安装ODBC1.1 下载unixODBC源码1.2 编译安装1.4 测试 2 编译QODBC2.1 修改 qsqldriverbase.pri 文件2.2 修改 odbc.pro 文件2.3 编译并安装QODBC 3 Qt应用程序连接达梦数据库测试4 优化ODBC配置&#xff0c;方便程序部署4.1 修改pro文件&#xff0c;增加DESTDIR 变量…

C++ std::pair and std::list \ std::array

std::pair<第一个数据类型, 第二个数据类型> 变量名 例如&#xff1a; std::pair<int, string> myPair; myPair.first;拿到第一个int变量 myPair.second拿到第二个string变量 std::pair需要引入库#include "utility" std::make_pair() 功能制作一个…

STM32——串口通信(总结)

文章目录 串行通信概述&#xff1a;串行通信的基本原理和特点常见的串行通信标准和协议&#xff1a; 串口硬件接口&#xff1a;串口接口的特点包括&#xff1a;串口的物理接口和连接方式。串口引脚功能和作用。 串口通信参数&#xff1a;波特率&#xff08;Baud Rate&#xff0…

OJ练习第166题——课程表(拓扑排序问题)

课程表 力扣链接&#xff1a;207. 课程表 题目描述 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表…

source insight keil 中文乱码

1. 乱码的根本原因就是编码的方式太多了&#xff0c;你用这种编码&#xff0c;他用那种编码&#xff0c;就变成鸡同鸭讲了&#xff0c;对牛弹琴就要用牛语&#xff0c;如果全世界只有一种编码方式&#xff0c;就肯定不会有乱码问题&#xff0c;但这是不可能的。keil 设置编码格…

PyQt5安装以及使用

PyQt5安装以及使用 1 简介2 安装方法2.1 pip install PyQt52.2 pip install PyQt5‑5.15.9‑cp37‑cp37m‑win_amd64.whl 3 Qt相关工具介绍4 安装PyQt5-tools5 设置环境变量6 测试 1 简介 开发工具为PyCharm&#xff0c;Anaconda&#xff0c;因为Python安装相关包的方便性&…

sql:SQL优化知识点记录(十五)

&#xff08;1&#xff09;MySQL主从复制 我们这里配置一Windows上的MySql做主机&#xff0c;Linux上的MySql做从机&#xff0c;搭建一主一从 测试以下是否能够拼通&#xff1a;从Linux上&#xff1a;167&#xff0c;连接Windows的165 从Windows的165 连接Linux上&#xff1a;…

校园网免认证服务器大增加

这学期搞拐了&#xff0c;服务器整多了&#xff0c;结果没有几个人来消耗带宽&#xff0c;监控图片为证&#xff0c;网速快&#xff0c;线路多 线路展示 # 无为WIFI配置 # 欢迎使用无为WIFI破解软件 # 招收实力代理&#xff0c;定制独立软件&#xff0c;独立代理后台 # clie…

MicroStation中将二维对象投射到三维实体

在三维建模中&#xff0c;偶而会遇到需要将一个2D对象沿Z轴或指定方向投射到一个3D实体&#xff0c;在3D实体表面生成这个2D对象的投影对象。 需要使用的操作命令为&#xff1a; Stencil 2D Elements on 3D Geometry&#xff0c;位于可视化工作流、实用工具栏内。 操作时先后选…

基于Java+SpringBoot+Vue前后端分离火锅店管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…