docker入门(十)—— docker-compose详解

Docker Compose

dockercompose官网:https://docs.docker.com/compose/

什么是 docker compose

Docker Compose 是用于定义和运行多容器应用程序的工具。 这是解锁简化和高效的开发和部署体验的关键。

Compose 简化了对整个应用程序堆栈的控制,让您能够在单个易于理解的 yaml 配置文件中轻松管理服务、网络和卷。然后,只需一个命令,即可创建并启动所有服务 从您的配置文件中。

Compose 适用于所有环境;生产、暂存、开发、测试,以及 以及 CI 工作流程。它还具有用于管理应用程序整个生命周期的命令:

  • 启动、停止和重新生成服务
  • 查看正在运行的服务状态
  • 流式传输正在运行的服务的日志输出
  • 在服务上运行一次性命令

为什么使用 docker compose

问题:

前面我们使用 docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器,然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而之。

使用 docker compose 可以轻松,高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。

docker compose 优势

使用 docker compose 可简化容器化应用程序的开发、部署和管理:

  • 简化控制:Docker Compose 允许您在单个 YAML 文件中定义和管理多容器应用程序。这简化了编排和协调各种服务的复杂任务,使管理和复制应用程序环境变得更加容易。
  • 高效协作:Docker Compose 配置文件易于共享,便于开发人员、运营团队和其他利益相关者之间的协作。这种协作方法可以实现更顺畅的工作流程、更快的问题解决速度和更高的整体效率。
  • 快速应用程序开发:Compose 缓存用于创建容器的配置。当您重新启动未更改的服务时,Compose 会重新使用现有容器。重用容器意味着您可以非常快速地对环境进行更改。
  • 跨环境的可移植性:Compose 支持 Compose 文件中的变量。您可以使用这些变量为不同的环境或不同的用户自定义您的组合。
  • 广泛的社区和支持:Docker Compose 受益于充满活力和活跃的社区,这意味着丰富的资源、教程和支持。这个社区驱动的生态系统有助于 Docker Compose 的持续改进,并帮助用户有效地解决问题。

小结

compose 项目是 docker 官方的开源项目,负责实现 docker 容器集群的快速编排

开源代码:https://github.com/docker/compose

我们知道使用 dockerfile 模板文件可以让用户很方便的定义一个单独的应用容器,其实在工作中,经常会碰到需要多个容器相互配合来完成的某项任务情况,例如工作中的 web 服务容器本身,往往会在后端加上数据库容器,甚至会有负责均衡器,比如 LNMP 服务

Compose 就是来做这个事情的,它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)

Compose 中有两个重要的概念:

  1. 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例,很多的镜像启动
  • 订单服务 image
  • 物流服务 image
  • 用户服务 image
  • 支付服务 image
  • 4个容器后面构成一个服务 service
  1. 项目(project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 中定义。

Compose 项目是由 Python 编写的,实际上就是调用了 Docker 服务提供的 API 来对容器进行管理,因此,只要所在的操作系统的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

安装 docker compose

  1. yum 安装
yum -y update
yum install -y docker-compose-plugin
  1. 一般情况下,linux 要安装 python 环境
# pip 是 python 包管理工具
yum install -y python-pip   
  1. 输入命令docker compose version查看是否安装成功
[root@iZbp15293q8kgzhur7n6kvZ ~]# docker compose version
Docker Compose version v2.25.0

快速开始

安装官方演示的案例:https://docs.docker.com/compose/gettingstarted/

  1. 为项目创建目录
mkdir composetest
cd composetest
  1. 创建一个一会要运行的文件app.py
vim app.py

代码如下:

import timeimport redis
from flask import Flaskapp = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)def get_hit_count():retries = 5while True:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5)@app.route('/')
def hello():count = get_hit_count()return 'Hello World! I have been seen {} times.\n'.format(count)

在此示例中,是 redis 容器的主机名应用程序的网络,我们使用 Redis 的默认端口。

  1. 创建另一个在项目目录中调用的文件requirements.txt,内容如下:
flask
redis
  1. 创建Dockerfile,内容如下:
# syntax=docker/dockerfile:1
FROM python:3.10-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

这会告诉 docker :

  • 从 Python 3.10 映像开始构建映像。
  • 将工作目录设置为/code
  • 设置命令使用的环境变量flask
  • 安装 gcc 和其他依赖
  • 复制并安装 Python 依赖项requirements.txt
  • 将元数据添加到映像,以描述容器正在侦听端口 5000
  • 将项目中的当前目录复制到映像中的 workdir,.代表当前目录
  • 将容器的默认命令设置为flask run
  1. 在 compose 文件中定义服务,创建文件compose.yaml
# 定义版本
version: '3.8'
services:web:build: .ports:- "8000:5000"# 挂载数据卷,将容器工作目录/code挂载到当前目录下volumes:- .:/coderedis:image: "redis:alpine"

此 Compose 文件定义了两个服务:web 和 redis

该服务使用从当前目录中生成的映像。 然后,它将容器和主机绑定到公开的端口,此示例服务使用 Flask Web 服务器的默认端口

该服务使用redis从 Docker Hub 注册表中提取的映像

  1. 使用 compose 构建并运行应用
[root@iZbp15293q8kgzhur7n6kvZ composetest]# ll
total 16
-rw-r--r-- 1 root root 514 Mar 21 19:49 app.py
-rw-r--r-- 1 root root 230 Mar 21 19:58 compose.yaml
-rw-r--r-- 1 root root 282 Mar 21 19:52 Dockerfile
-rw-r--r-- 1 root root  12 Mar 21 19:51 requirements.txt

注意文件不要有缺失

在这个目录下执行以下命令构建:

docker compose up

安装完成后打开浏览器输入ip地址:8000,会看到以下信息

Hello World! I have been seen 1 times.

每刷新一次,数字都会增加

项目完成后,我们查看所有的镜像

会发现多了一个镜像,这个镜像是由项目名-web(composetest-web)来构成的

查看容器服务:

# 由于是单机版的docker,这个服务无法查看,集群环境中才可以看到。
[root@iZj6c1wvscj5y05fyq1yiqZ ~]# docker service ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
# 发现一次拉起了两个容器,这个就是 compose.yaml 定义的服务
# 容器名规律: 项目名-容器服务名-1编号
[root@iZj6c1wvscj5y05fyq1yiqZ ~]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS         PORTS                    NAMES
292c625ce219   redis:alpine      "docker-entrypoint.s…"   6 minutes ago   Up 3 minutes   6379/tcp                 composetest-redis-1
21f4f7a63283   composetest-web   "python app.py"          6 minutes ago   Up 3 minutes   0.0.0.0:8000->5000/tcp   composetest-web-1

停止容器服务:

[root@iZj6c1wvscj5y05fyq1yiqZ composetest]# docker compose down
[+] Running 3/2✔ Container composetest-redis-1  Removed                                                                    0.2s ✔ Container composetest-web-1    Removed                                                                    0.3s # compose 会自动创建一个服务的网络✔ Network composetest_default    Removed        

发现多了一个自定义的网络,我们再次启动这个 compose,查看这个自定义网络信息

在这里插入图片描述

这里面就有我们刚刚看到的两个容器服务

总结

  • 使用 compose 文件构建运行的镜像名字是项目目录名-web
  • compose 中每一个服务都会生成一个容器,名字是项目目录名-服务名-web
  • 构建时会生成一个自定义网络,所有的容器服务都会在这一个网络下

compose 常用命令

# Compose 大部分命令的对象即可以是项目的本身,也可以是指定为项目中的服务或者容器
执行docker compose [COMMAND] --help 或者docker compose help [COMMAND]可以查看命令的帮助信息# 具体的使用格式
docker compose [-f=<arg>...] [options] [COMMAND] [ARGS]# 参数选项
-f,--file file指定模板文件,默认是docker-compose.yml模板文件,可以多次指定
-p,--project-name name指定项目名称,默认使用所在目录名称作为项目名称
-v,--version 输出版本信息# Compose所支持的命令
build              Build or rebuild services (构建项目中的服务容器)
config             Validate and view the Compose file (验证并查看Compose文件)
create             Create services (为服务创建容器)
down               Stop and remove containers, networks, images, and volumes (停止容器并删除由其创建的容器,网络,卷和图像up)
events             Receive real time events from containers (为项目中的每个容器流式传输容器事件)
exec               Execute a command in a running container (这相当于docker exec。使用此子命令,您可以在服务中运行任意命令。默认情况下,命令分配TTY,因此您可以使用命令docker compose exec web sh来获取交互式提示。)
help               Get help on a command (获得一个命令的帮助)
images             List images ()
kill               Kill containers (通过发送SIGKILL信号来强制停止服务容器)
logs               View output from containers (查看服务容器的输出)
pause              Pause services (暂停一个容器)
port               Print the public port for a port binding (打印某个容器端口所映射的公共端口)
ps                 List containers (列出项目中目前所有的容器)
pull               Pull service images (拉取服务依赖镜像)
push               Push service images (推送服务镜像)
restart            Restart services (重启项目中的服务)
rm                 Remove stopped containers (删除所有停止状态的服务容器)
run                Run a one-off command (在指定服务上执行一个命令)
start              Start services (启动已存在的服务容器)
stop               Stop services (停止已存在的服务容器)
top                Display the running processes (显示容器正在运行的进程)
unpause            Unpause services (恢复处于暂停状态的容器)
up                 Create and start containers (自动完成包括构建镜像、创建服务、启动服务并关联服务相关容器的一系列操作)
version            Show the Docker-Compose version information (输出版本)

docker run启动一个容器,docker compose启动多个容器(服务网络问题-自定一个网络。所有服务按照项目名来定义,编号)

说明:

一个普通的工作流程以docker compose up -d启动应用程序开始。

docker compose logsps命令可以用来验证应用程序的状态,还能帮助调试。

修改代码后,先执行docker compose build构建新的镜像,然后执行docker compose up -d取代运行中的容器。

注意,compose 会保留原来容器中所有旧的数据卷,这意味着即使容器更新后,数据库和缓存也依旧在容器内(这很可能造成混淆,因此要特别小心)。

如果你修改了 compose 的 yaml 文件,但不需要构建新的镜像,可以通过up -d参数使 compose 以新的配置替换容器。

如果想要强制停止 compose 并重新创建所有容器,docker compose stop 容器名docker compose rm 容器名

简单使用:

  • 执行命令运行容器:docker compose up -d
  • 查看镜像:docker images
  • 停止和删除容器: docker compose stop 容器名docker compose rm 容器名

compose.yaml

模板文件是 compose 的核心,涉及的指令关键字比较多,但是大部分的指令与 docker run 相关的参数的含义是类似的

默认的模板名是docker-compose.yml

# 语法-3层
version: '3.8'
services: # 定义很多服务服务1:# 当前的服务配置服务2:# 当前服务配置
#服务要用的网络、卷、等其他全局规则
volumes:
networks:
configs:
.....
compose 和 docker兼容性:compose 文件格式有3个版本,分别为1, 2.x 和 3.x目前主流的为 3.x 其支持 docker 1.13.0 及其以上的版本
# 常用参数:
version           # 指定 compose 文件的版本
services          # 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称服务build          # 指定包含构建上下文的路径, 或作为一个对象,该对象具有 context 和指定的 dockerfile context     # context: 指定 Dockerfile 文件所在的路径dockerfile  # dockerfile: 指定 context 指定的目录下面的 Dockerfile 的名称(默认为 Dockerfile)args        # args: Dockerfile 在 build 过程中需要的参数 command        # 覆盖容器启动后默认执行的命令, 支持 shell 格式和 [] 格式container_name # 指定容器的名称 (等同于 docker run --name 的作用)deploy         # v3 版本以上, 指定与部署和运行服务相关的配置# deploy 部分是 docker stack 使用的, docker stack 依赖 docker swarmdepends_on     # 定义容器启动顺序 (此选项解决了容器之间的依赖关系),一个项目需要依赖另外一个,启动顺序很重要,一定要先去加载启动依赖项的容器dns            # 设置 DNS 地址(等同于 docker run --dns 的作用)entrypoint     # 覆盖容器的默认 entrypoint 指令env_file       # 从指定文件中读取变量设置为容器中的环境变量,可以是单个值或者一个文件列表environment    # 设置环境变量, environment 的值可以覆盖 env_file 的值expose         # 暴露端口, 但是不能和宿主机建立映射关系, 类似于 Dockerfile 的 EXPOSE 指令external_links # 连接不在 docker-compose.yml 中定义的容器或者不在 compose 管理的容器extra_hosts    # 添加 host 记录到容器中的 /etc/hosts 中healthcheck    # v2.1 以上版本, 定义容器健康状态检查image          # 指定 docker 镜像, 可以是远程仓库镜像、本地镜像labels         # 使用 Docker 标签将元数据添加到容器logging        # 设置容器日志服务network_mode   # 指定网络模式 (等同于 docker run --net 的作用, 在使用 swarm 部署时将忽略该选项) networks       # 将容器加入指定网络 (等同于 docker network connect 的作用)# networks 可以位于 compose 文件顶级键和 services 键的二级键pid: 'host'    # 共享宿主机的 进程空间(PID)ports          # 建立宿主机和容器之间的端口映射关系, ports 支持两种语法格式- "8000:8000"    # 容器的 8000 端口和宿主机的 8000 端口建立映射关系volumes        # 定义容器和宿主机的卷映射关系- /var/lib/mysql                # 映射容器内的 /var/lib/mysql 到宿主机的一个随机目录中- /opt/data:/var/lib/mysql      # 映射容器内的 /var/lib/mysql 到宿主机的 /opt/data- ./cache:/tmp/cache            # 映射容器内的 /var/lib/mysql 到宿主机 compose 文件所在的位置- ~/configs:/etc/configs/:ro    # 映射容器宿主机的目录到容器中去, 权限只读- datavolume:/var/lib/mysql     # datavolume 为 volumes 顶级键定义的目录, 在此处直接调用.....# 对于值为时间的可接受的值:2.5s10s1m30s2h32m5h34m56s时间单位: us, ms, s, m, h
# 对于值为大小的可接受的值:2b1024kb2048k300m1gb单位: b, k, m, g 或者 kb, mb, gb
# depends_on示例
version: '3'
services:web:build: .depends_on:- db     - redis redis:image: redisports:- "6379:6379"environment:- root_pwd: "123456"db:image: postgres    # docker compose up 以依赖顺序启动服务,下面例子中 redis 和 db 服务在 web 启动前启动
# 默认情况下使用 docker compose up web 这样的方式启动 web 服务时,也会启动 redis 和 db 两个服务,因为在配置文件中定义了依赖关系
# network示例
version: '3.7'services:test:image: nginx:1.14-alpinecontainer_name: mynginxcommand: ifconfignetworks:app_net:                       # 调用下面 networks 定义的 app_net 网络ipv4_address: 172.16.238.10networks:app_net:driver: bridgeipam:driver: defaultconfig:- subnet: 172.16.238.0/24- getaway: 172.16.238.1

小结

以后我们的微服务项目中,如果有多个微服务,则按照他们的启动顺序,配置对应的规则文件即可!

可以去看看你们的公司项目,有没有 docker-compose.yml 文件,有没有做自动编排!

如果下载的网上开源项目,有 dockerfile + docker-compose ,那我们可以一键搞定!

网上的项目拉下来,mysql 的 sql 文件导入数据库。 docker-compose up 即可!

dockerfile + docker-compose。

工程、服务、容器

  • docker compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)
  • docker compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例!

至此,dokcer compose 搞定!

实战:WordPress

WordPress 是一款个人博客系统

在目录下编辑docker-compose.yml文件:

version: '3.8'services:db:image: mysql:5.7volumes:- db_data:/var/lib/mysqlrestart: alwaysports:- "3306:3306"environment:MYSQL_ROOT_PASSWORD: somewordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresswordpress:depends_on:- dbimage: wordpress:latestports:- "8000:80"restart: alwaysenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpress
volumes:db_data: {}

执行以下命令:

docker compose up -d

启动成功打开浏览器,输入ip地址:8000访问

在这里插入图片描述

出现这个证明安装成功

进入之后随便发布一篇文章,查看 mysql 中有哪些数据

mysql 用户名是wordpress,密码是wordpress,上面 yaml 文件中有配置

在这里插入图片描述

总结

docker 卷 db_data 将 WordPress 所做的所有更新持久化到数据库。

WordPress Multisite 仅适用于 port 80443

docker compose up -d 从你的项目目录运行。

测试访问!

未来只需要一键启动就可以安装好环境了!无论多复杂都是一键。

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

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

相关文章

Chrome 114 带着侧边栏扩展来了

效果展示 manifest.json {"manifest_version": 3,"name": "ChatGPT学习","version": "0.0.2","description": "ChatGPT,GPT-4,Claude3,Midjourney,Stable Diffusion,AI,人工智能,AI","icons"…

cocos 3.8开发 微信小游戏分包技巧压缩主包

Creator 版本&#xff1a; 3.8.2 目标平台&#xff1a;小游戏开发 压缩后 我不知道别人压缩几百kb是怎么做到的。不过哪个要钱。 我这个技巧不用花钱。 论坛有教程但是没有教详细怎么做。 开整&#xff01; 做一个空白的场景。然后写一个load脚本。load主场景。 从代码可…

数据结构知识总结

二叉树 满二叉树 特性 所有叶子结点都集中在二叉树的最下面一层上&#xff0c;而且结点总数为&#xff1a;2^n-1 (n为层数 / 高度&#xff09; 完全二叉树 特性 若设二叉树的高度为h&#xff0c;除第h层外&#xff0c;其他各层的节点数都达到最大个数&#xff0c;第h层有…

Http中Host,Referer,Origin和Access-Control-Allow-Origin

Http中Host&#xff0c;Referer&#xff0c;Origin和Access-Control-Allow-Origin 文章目录 Http中Host&#xff0c;Referer&#xff0c;Origin和Access-Control-Allow-OriginHost定义特性作用 Referer定义特性作用 Origin定义特性作用 Access-Control-Allow-Origin定义特性作用…

基于微信小程序的CMS内容管理系统开发笔记

背景调研 内容管理CMS小程序的帮助运营者创建和管理小程序内容&#xff0c;提供一个直观的操作界面&#xff0c;能够轻松地添加、编辑和发布内容&#xff0c;而无需了解复杂的编程知识。可以进行栏目管理&#xff0c;文章管理&#xff0c;编辑文章内容&#xff0c;包括文字、图…

React腳手架已經創建好了,想使用Vite作為開發依賴

使用Vite作為開發依賴 安裝VITE配置VITE配置文件簡單的VITE配置項更改package.json中的scripts在根目錄中添加index.html現在可以瀏覽你的頁面了 安裝VITE 首先&#xff0c;在現有的React項目中安裝VITE npm install vite --save-dev || yarn add vite --dev配置VITE配置文件 …

【UE5】动画蒙太奇简述

项目资源文末百度网盘自取 动画蒙太奇基本功能 动画蒙太奇&#xff08;Animation Montage&#xff09; 可以将多个 动画序列&#xff08;Animation Sequences&#xff09; 合并为单个资产并通过蓝图播放&#xff0c;还可以将一个蒙太奇动画切分为多个 蒙太奇分段&#xff08;M…

六大排序精解

排序概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#x…

安装nginx和PHP

首先规划四台虚拟机&#xff0c;之前的主从数据库已经两台&#xff0c;其余两台&#xff0c;一个设置nginx&#xff0c;一个是php 首先NGINX的概念&#xff0c;请参考https://blog.csdn.net/hyfsbxg/article/details/122322125。正向代理&#xff0c;反向代理&#xff0c;可以…

【每日八股】Java基础经典面试题4

前言&#xff1a;哈喽大家好&#xff0c;我是黑洞晓威&#xff0c;25届毕业生&#xff0c;正在为即将到来的秋招做准备。本篇将记录学习过程中经常出现的知识点以及自己学习薄弱的地方进行总结&#x1f970;。 本篇文章记录的Java基础面试题&#xff0c;如果你也在复习的话不妨…

【独立版】海之心陪诊系统-陪诊陪护小程序-V3.0

商品介绍 陪诊这个词在近两年才出现在人们的视野中&#xff0c;随着人口老龄化&#xff0c;社会信息化。我们的父母很多不会操作信息化的系统&#xff0c;以至于在手机上挂号和线下取号取报告比较困难&#xff0c;年轻人需要工作时间有限&#xff0c;陪诊需求因此而来。 陪诊…

Introduction to Data Mining 数据挖掘

Why Data Mining? • The Explosive Growth of Data: from terabytes to petabytes — Data collection and data availability ◦ Automated data collection tools, database systems, Web, computerized society — Major sources of abundant data ◦ Business: Web, e-co…

vue3 + ts +element-plus + vue-router + scss + axios搭建项目

本地环境&#xff1a; node版本&#xff1a;20.10.0 目录 一、搭建环境 二、创建项目 三、修改页面 四、封装路由vue-router 五、element-plus 六、安装scss 七、封装axios 一、搭建环境 1、安装vue脚手架 npm i -g vue/cli 2、查看脚手架版本 vue -V3、切换路径到需…

flask+ flask_socketio HTTP/1.1“ 400 公网IP 问题解决方案

很经典的一个跨域问题 在服务端改成socketio SocketIO(app, cors_allowed_origins"*")就可以了

数据可视化-ECharts Html项目实战(4)

在之前的文章中&#xff0c;我们学习了如何创建圆环图、嵌套圆环图、蓝丁格尔玫瑰图。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 数据可视化-ECharts Htm…

四、C语言中的数组:如何输入与输出二维数组(数组,完)

本章的学习内容如下 四、C语言中的数组&#xff1a;数组的创建与初始化四、C语言中的数组&#xff1a;数组的输入与元素个数C语言—第6次作业—十道代码题掌握一维数组四、C语言中的数组&#xff1a;二维数组 1.二维数组的输入与输出 当我们输入一维数组时需要一个循环来遍历…

uniApp中使用小程序XR-Frame创建3D场景(1)环境搭建

1.XR-Frame简介 XR-Frame作为微信小程序官方推出的3D框架&#xff0c;是目前所有小程序平台中3D效果最好的一个&#xff0c;由于其本身针对微信小程序做了优化&#xff0c;在性能方面比其他第三方库都要高很多。 2.与Three.js的区别 做3D小程序的同学们对Three.js一定不陌生…

huggingface_hub

文章目录 一、关于 huggingface_hub二、安装三、快速入门指南1、下载文件1.1 下载单个文件 hf_hub_download1.2 下载整个库 snapshot_download 2、登录3、创建一个存储库 create_repo4、上传文件4.1 上传单个文件 upload_file4.2 上传整个存储库 upload_folder 四、集成到 Hub …

图论06-飞地的数量(Java)

6.飞地的数量 题目描述 给你一个大小为 m x n 的二进制矩阵 grid &#xff0c;其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻&#xff08;上、下、左、右&#xff09;的陆地单元格或跨过 grid 的边界。 返回网格中 无法…

【PyCaret】使用PyCaret创建机器学习Pipeline进行多分类任务

发现一个好东西&#xff0c;PyCaret机器学习Pipeline&#xff0c;记录一下用其进行多分类任务的使用方法。 1、简介 PyCaret是一个开源的、不用写很多代码的Python机器学习库&#xff0c;可以自动化机器学习工作流程&#xff0c;是一个端到端的机器学习和模型管理工具&#xff…