当前位置: 首页 > news >正文

Docker Compose与私有仓库部署

一、Docker Compose工具

1.1什么是Docker Compose

        Docker Compose 的前身是 Fig,它是一个定义及运行多个 Docker 容器的工具。使用Docker Compose 时,只需要在一个配置文件中定义多个 Docker 容器,然后使用一条命令启 动这些容器。Docker Compose 会通过解析容器间的依赖关系按先后顺序启动所定义的容器。

1.2Docker Compose的安装

1.3文件格式以及编写注意事项

        YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 XML数据描述语言,语法比 XML 简单的很多。YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号(0)括起来,hash 用花括号(0)括起来
使用 YAML 时需要注意下面事项:

  • (1)不支持制表符 tab 键缩进,需要使用空格缩进
  • (2)通常开头缩进两个空格。
  • (3)字符后缩进一个空格,如冒号、逗号、横杆
  • (4)用#号注释。
  • (5)如果包含特殊字符,要使用单引号(")引起来。
  • (6)布尔值(true、 false、yes、 no、on、 off)必须用引号("")括起来,这样分析器会将它们解释为字符串。

1.4常用字段

1.5常用命令

二、Docker Compose运行

2.1使用Compose 基本上分为三步:

  • 1.Dockerfile 定义应用的运行环境
  • 2.docker-compose.yml 定义组成应用的各服务
  • 3.docker-compose up 启动整个应用

1.安装

[root@localhost ~]# curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

或者直接将下载好的离线包拷贝到/usr/local/bin目录下

[root@localhost ~]# chmod +x /usr/local/bin/docker-compose 
[root@localhost ~]# docker-compose -v

安装后验证

查看版本

[root@localhost ~]# docker-compose version

查看命令帮助

[root@localhost ~]# docker-compose -h

2.2Docker Compose 文件结构

1.编写文件,compose默认的模板文件名字为docker-compose.yaml

[root@localhost ~]# vim docker-compose.yamlversion: '2'
services:webapp:image: 'httpd:latest'ports: - "80:80"volumes:- "/var/www/html:/usr/local/apache2/htdocs:rw"

注释:httpd的容器中网站的根目录在:/usr/local/apache2/htdocs

备注:

Compose 文件格式有3个版本,分别为1, 2.x 和 3.x 目前主流的为 3.x 其支持 docker 1.13.0 及其以上的版本

2.3Docker Compose 常用命令

1.执行文件,生成容器

[root@localhost ~]# docker-compose up -d

注意:不加选项-d会在前台运行,结束该进程,这个容器就关闭了,加上-d后可以让容器在后台持续运行

2.列出当前运行的容器

[root@localhost ~]# docker-compose psName            Command        State         Ports       
-------------------------------------------------------------
root_webapp_1   httpd-foreground   Up      0.0.0.0:80->80/tcp

3.ps:列出所有运行容器

docker-compose ps

4.logs:查看服务日志输出

docker-compose logs webapp

5.port:打印绑定的公共端口,下面命令可以输出httpd服务80端口所绑定的公共端口

docker-compose port webapp 80

6.run:在一个服务上执行一个命令()

docker-compose run webapp bash

备注:

红色部分是可以在容器中执行的命令,使用bash可以登录到容器中,可以换成其他的linux命令

7.重新构建:构建或者重新构建服务(当yaml文件中的参数修改后,让容器使用新的参数重新运行)

打开docker-compose.yaml文件,将其中的映射端口改为8080:80,再执行以下命令

docker-compose up -ddocker-compose port webapp 80

8.start:启动指定服务已存在的容器

docker-compose start webapp

9.stop:停止已运行的服务的容器

docker-compose stop webapp
docker-compose start webapp

10.rm:删除指定服务的容器

docker-compose stop webapp
docker-compose rm webapp

11.kill:通过发送 SIGKILL 信号来停止指定服务的容器

docker-compose up -d
docker-compose kill webapp

12.scale:指定运行容器的个数(详细用法看扩展资料)

scale:设置指定服务运行容器的个数,以 service=num 形式指定
docker-compose scale webapp=3
或
docker-compose up --scale webapp=3 -d

注意:先删除当前所有的容器,将文件中的端口注释掉

[root@localhost httpd]# cat docker-compose.yml version: '2'
services:webapp:image: 'httpd:latest'
#    ports: 
#      - "9090:80"volumes:- "/var/www/html:/usr/local/apache2/htdocs:rw"

后面可以跟多个服务名,以空格隔开,各容器之间不要有端口冲突,要使用随机端口进行映射

做负载均衡用的

三、compose的案例

1.编写文件

[root@localhost ~]# vim docker-compose.yamlversion: '2'
services:webapp:image: 'nginx'ports:- "80:80"volumes:- "/www/html:/www/html:rw"- "/opt/nginx/nginx.conf:/etc/nginx/nginx.conf"

2.修改nginx配置文件

将nginx的配置文件上传到docker主机上
[root@localhost ~]# mkdir /opt/nginx
[root@localhost ~]# vim /opt/nginx/nginx.conf #user  nobody;
worker_processes  1;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   /www/html;index  index.html index.htm index.php;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}location ~ \.php$ {root           /www/html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;include        fastcgi_params;}}}

3.执行文件,生成容器

[root@localhost ~]# docker-compose up -d

4.列出当前运行的容器

[root@localhost ~]# docker-compose ps
[root@localhost ~]# docker-compose kill webapp

四、Harbor 私有仓库

4.1什么是 Harbor

        Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。它以 Docker 公司开源的 Registry 为基础,提供了管理 U1、基于角色的访问控制(Role Based AccessControl)、AD/LDAP 集成、以及审计日志(Auditlogging)等企业用户需求的功能。通过添加一些企业必需的功能特性,例如安全标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器Harbor 提供了更好的性能和安全,以提升用户使用 Reaistry 构建和运行环境传输镜像的效率。

4.2 Harbor 的优势

Harbor 具有如下优势:

  • 基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不 同的权限。
  • 基于镜像的复制策略:镜像可以在多个 Harbor 实例之间进行复制(同步),适用于负载平衡、高可用性、多数据中心、混合和多云场景。
  • 支持 LDAP/AD:Harbor 与现有的企业 LDAP/AD 集成,用于用户认证和管理。
  • 删除图像和收集垃圾:镜像可以被删除,也可以回收镜像占用的空间。
  • 图形 U:用户可以轻松浏览、搜索镜像仓库以及对项目进行管理。
  • 审计:对存储库的所有操作都进行记录。
  • RESTfuI API:用于大多数管理操作的 RESTfUIAPI,易于与外部系统集成。

4.3Harbor 的构成

        Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Logcollector(Harbor-log)五个组件:

 Proxy

Harbor 的 Registry、U、Token 等服务通过一个前置的反向代理统一接收浏览器和Docker 客户端的请求,并将请求转发给后端不同的服务。

 Registry

负责储存 Docker 镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制即 不同用户对 Docker image 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的 每次 Docker pull/push 请求都要携带一个合法的 Token,Registry 会通过公钥对Token 进行解 密验证。

 Core service

这是 Harbor 的核心功能,主要提供以下服务:Ul(Harbor-ui):提供图形化界面,帮助用户管理 Registry 上的镜像(image),并对 用户进行授权。
Webhook:为了及时获取Registry上image状态变化的情况,在 Registry上 配 置 webhook, 把状态变化传递给 U 模块。Token 服务:负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客 户端向 Registry 服务发起的请求,如果不包含 Token,会被重定向,获得 Token 后再 重新向Registry 进行请求

Database(Harbor-db)

为 coreservices 提供数据库服务,负责储存用户权限、审计日志、Docker image 分组信 息等数据。

4.4安装Harbor(worker节点)

在两台worker节点上分别安装Harbor,由于官方提供了安装脚本,安装过程还是比较简单的。具体步骤如下:

1.下载安装包

首先下载官方的离线安装包,当然你能科学上网的话使用在线安装包也可以:

https://github.com/goharbor/harbor/releases/tag/v2.4.3

https://github.com/goharbor/harbor/releases/download/v2.4.3/harbor-offline-installer-v2.4.3.tgz

2.下载完成后,将压缩包上传到两个worker节点:

[root@localhost ~]# ls
harbor-offline-installer-v2.4.3.tgz[root@localhost ~]# ls
harbor-offline-installer-v2.4.3.tgz

3.然后对其进行解压:

[root@localhost ~]# tar -zxvf harbor-offline-installer-v2.4.3.tgz
解压后的目录文件如下:
[root@localhost ~]# cd harbor
[root@localhost harbor]# ls
common.sh  harbor.v2.4.3.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare

4.配置harbor

将配置文件模板拷贝一份,并命名为harbor.yml,这是默认的配置文件名称:
[root@localhost harbor]# cp harbor.yml.tmpl harbor.yml
编辑harbor.yml文件,按照如下说明修改几处配置项:
[root@localhost harbor]# vim harbor.yml
# 修改为当前所在节点的ip
hostname: 192.168.10.102# 登录界面的密码
harbor_admin_password: pwd123# 将https相关的配置给注释掉,这里为了简单只使用http,而且也可以在nginx那一层去做https
# https related config
#https:# https port for harbor, default is 443
#  port: 443# The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path注意:
注释掉https相关的行

5.安装docker-compose

准备好配置文件之后,安装docker-compose,因为Harbor的安装脚本是基于docker-compose去安装的。下载docker-compose然后放到/usr/local/bin/目录下,再更改一下权限即可:

[root@localhost ~]# curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[root@localhost ~]# chmod 755 /usr/local/bin/docker-compose

备注:

也可以提前下载好直接拷贝到 /usr/local/bin目录下

6.运行Harbor的安装脚本

[root@localhost harbor]# ./install.sh[Step 0]: checking if docker is installed ...Note: docker version: 19.03.12[Step 1]: checking docker-compose is installed ...Note: docker-compose version: 1.26.2[Step 2]: loading Harbor images ...
Loaded image: goharbor/prepare:v2.4.3
Loaded image: goharbor/harbor-jobservice:v2.4.3
Loaded image: goharbor/harbor-registryctl:v2.4.3
Loaded image: goharbor/registry-photon:v2.4.3
Loaded image: goharbor/harbor-core:v2.4.3
Loaded image: goharbor/notary-signer-photon:v2.4.3
Loaded image: goharbor/clair-photon:v2.4.3
Loaded image: goharbor/trivy-adapter-photon:v2.4.3
Loaded image: goharbor/harbor-log:v2.4.3
Loaded image: goharbor/nginx-photon:v2.4.3
Loaded image: goharbor/clair-adapter-photon:v2.4.3
Loaded image: goharbor/chartmuseum-photon:v2.4.3
Loaded image: goharbor/harbor-portal:v2.4.3
Loaded image: goharbor/harbor-db:v2.4.3
Loaded image: goharbor/redis-photon:v2.4.3
Loaded image: goharbor/notary-server-photon:v2.4.3[Step 3]: preparing environment ...[Step 4]: preparing harbor configs ...
prepare base dir is set to /usr/local/src/harbor
WARNING:root:WARNING: HTTP protocol is insecure. Harbor will deprecate http protocol in the future. Please make sure to upgrade to https
Generated configuration file: /config/log/logrotate.conf
Generated configuration file: /config/log/rsyslog_docker.conf
Generated configuration file: /config/nginx/nginx.conf
Generated configuration file: /config/core/env
Generated configuration file: /config/core/app.conf
Generated configuration file: /config/registry/config.yml
Generated configuration file: /config/registryctl/env
Generated configuration file: /config/registryctl/config.yml
Generated configuration file: /config/db/env
Generated configuration file: /config/jobservice/env
Generated configuration file: /config/jobservice/config.yml
Generated and saved secret to file: /data/secret/keys/secretkey
Successfully called func: create_root_cert
Generated configuration file: /compose_location/docker-compose.yml
Clean up the input dir[Step 5]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-db     ... done
Creating harbor-portal ... done
Creating redis         ... done
Creating registryctl   ... done
Creating registry      ... done
Creating harbor-core   ... done
Creating harbor-jobservice ... done
Creating nginx             ... done
✔ ----Harbor has been installed and started successfully.----

7.安装完成,使用浏览器访问Harbor,正常情况下应能进入登录界面:

默认用户名为admin,密码则为配置文件中定义的密码。登录成功后页面如下:

相关文章:

Docker Compose与私有仓库部署

一、Docker Compose工具 1.1什么是Docker Compose Docker Compose 的前身是 Fig,它是一个定义及运行多个 Docker 容器的工具。使用Docker Compose 时,只需要在一个配置文件中定义多个 Docker 容器,然后使用一条命令启 动这些容器。Docker Co…...

Layout 布局组件快速搭建

文章目录 设置主题样式变量封装公共布局组件封装 Logo 组件封装 Menu 菜单组件封装 Breadcrumb 面包屑组件封装 TabBar 标签栏组件封装 Main 内容区组件封装 Footer 底部组件封装 Theme 主题组件 经典布局水平布局响应式布局搭建 Layout 布局组件添加 Layout 路由配置启动项目 …...

北京城市图书馆-非遗文献馆:OLED透明拼接屏的璀璨应用

在数字化与传统文化深度融合的今天,北京城市图书馆的非遗文献馆以一场前所未有的视觉盛宴,向世人展示了OLED透明拼接屏的非凡魅力与无限可能。这座集阅读、展示、体验于一体的非遗文献馆,通过2*7布局的OLED透明拼接屏,不仅为传统非…...

OpenCV图像滤波(12)图像金字塔处理函数pyrDown()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 函数主要是对图像进行模糊处理并将其降采样。 默认情况下,输出图像的大小计算为 Size((src.cols1)/2, (src.rows1)/2),但…...

css如何使一个盒子水平垂直居中

方法一&#xff1a;利用定位(常用方法,推荐&#xff09; <style> .parent{width: 500px;height: 500px;border: 1px solid #000;position:relative; }.child {width: 100px;height: 100px;border: 1px solid #999;position:absolute;top: 50%;left: 50%;margin-top: -50…...

机器人等方向学习和研究的目标

核心目标类似&#xff1a; 学习一个知识点用时越来越短&#xff0c;研究一个系统效率越来越高。 目标 没有目标是常态&#xff0c;十分普遍。 但其实&#xff0c;目标也可以很宽泛。 感谢朋友们一直以来的鼓励帮助&#xff0c;倍感荣幸&#xff0c;非常感谢。-CSDN blink-…...

封装一个细粒度的限流器

文章目录 原因限流对象限流后的做法怎么确定限流阈值观测业务性能数据压测借鉴链路上的其他服务手动计算 四种静态限流算法令牌桶漏桶固定窗口与滑动窗口 手写限流算法令牌桶漏桶固定窗口滑动窗口 分布式限流的具体实现 原因 尽管云原生网关里有统一入口的限流&#xff08;根据…...

【Spring Boot - 注解】@ResponseBody 注解:处理 JSON 响应

文章目录 一、ResponseBody 注解概述1. 注解的功能2. 主要功能 二、ResponseBody 的工作原理1. 接口定义2. 消息转换器3. 自动配置与默认行为 三、ResponseBody 的应用场景1. RESTful API 的实现2. 返回复杂数据结构3. 错误处理和异常处理 四、ResponseBody 的配置和自定义1. 自…...

无人机航拍与ArcGIS融合实战:从地表观测到空间数据可视化的全方位指南!无人机图像拼接数据处理与分析、可视化与制图

目录 第一章 无人机航拍基本流程、航线规划与飞行实践 第二章 无人机图像拼接软件的学习与操作实践 第三章 无人机图像拼接典型案例详解 第四章 无人机图像拼接数据在GIS中的处理与分析 第五章 无人机图像拼接数据在GIS中的可视化与制图 第六章 综合案例:无人机航拍植被动…...

日期转时间濯

tfunction(date_str) local code ,time World:getTimeFromDateString(date_str) return time/(60*60*24) end print(t(2024-08-16)-t(2024-08-3))...

【计算机网络】TCP实战

其实有了UDP的基础&#xff0c;TCP不管怎么说学习起来都还是比较舒服的&#xff0c;至少是比直接就学习TCP的感觉好。 这篇文章最多就是介绍一下起手式&#xff0c;如果想带业务的话和UDP那篇是完全一样的&#xff0c;就不进行演示了。 总的来说还是很简单的。 目录 Echo服务端…...

使用Python制作贪吃蛇小游戏

引言 贪吃蛇游戏是一款经典的电子游戏&#xff0c;玩家通过控制一条不断增长的蛇在格子内移动&#xff0c;并吃掉随机出现的食物来获得分数。随着分数的增加&#xff0c;蛇的身体也会越来越长&#xff0c;游戏的难度也随之提升。在本文中&#xff0c;我们将详细介绍如何使用Py…...

线程的退出

方式1 pthread_exit Void pthread_exit (void *retval) 功能&#xff1a; 结束调用的线程 参数&#xff1a; retval //退出状态值 //需要传的是&#xff0c;退出状态值的地址 注意&#xff1a; 1.pthread_exit 本身表示结束线程 如果用在main函数中 表示结束主线程…...

【AI 绘画】Q版人物定制生成

AI 绘画-PulID手办定制 1. 效果展示 本次测试主要结果展示如下: 牛仔风 古风 2. 基本原理 PuLID是一种类似于 ip-adapter 的恢复面部特征的方法。它同时使用 insightface 嵌入和 CLIP 嵌入,类似于 ip-adapter faceid plus 模型所做的。但是,在将图像传递给 CLIP 之前,还…...

Python爬虫——爬取某网站的视频

爬取视频 本次爬取&#xff0c;还是运用的是requests方法 首先进入bilibili官网中&#xff0c;选取你想要爬取的视频&#xff0c;进入视频播放页面&#xff0c;按F12&#xff0c;将网络中的名称栏向上拉找到第一个并点击&#xff0c;可以在标头中&#xff0c;找到后续我们想要…...

Android逆向题解攻防世界-easy-apk

Jeb反编译apk 题目比较简单&#xff0c;就是一个改了码表的base64编码。 protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(0x7F04001B); // layout:activity_main((Button)this.findViewById(0x7F0B0076)).set…...

Linux系统使用Typecho搭建个人网站并一键发布公网远程管理本地站点

文章目录 前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大…...

机器学习速成第三集——无监督学习之聚类(理论部分)!

目录 聚类的定义和原理 常见的聚类算法 应用场景 总结 无监督学习中聚类算法的最新进展是什么&#xff1f; K-Means聚类算法在处理大规模数据集时的性能优化方法有哪些&#xff1f; 并行计算模型&#xff1a; 多核处理器优化&#xff1a; 分层抽样&#xff1a; 特征缩…...

【机器学习】CNN的基本架构模块

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 CNN的基本架构模块1. 引言2. 卷积层2.1 基本原理2.2 卷积层的特性2.3 卷积层的超…...

第八节AWK报告生成器(2)

3,1,2 printf 语法: printf("format\n", [arguments])格式说明 format是一个用来描述输出格式的字符串&#xff0c;format格式的指示符都以%开头&#xff0c;后跟一个字符&#xff0c;如下: format含义%c显示字符的asicll%d,%i十进制整数%e,%E科学计数法显示数值…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...