Docker学习——⑧
文章目录
- 1、什么是 Docker Compose(容器编排)
- 2、为什么要 Docker Compose?
- 3、Docker Compose 的安装
- 4、Docker Compose 的功能和使用场景
- 5、Docker Compose 文件(docker-compose.yml)
- 5.1 文件语法版本
- 5.2 文件基本结构及常见指令
- 6、Docker Compose 命令清单
- 7、操作案例
- 8、Docker Compose 部署 WordPress
- 9、常见问题
1、什么是 Docker Compose(容器编排)
docker-compose 是 Docker 官方的开源项目,使用 python 编写,实现上调用了Docker 服务的 API 进行容器管理及编排,其官方定义为定义和运行多个 Docker 容器的应用。
docker-compose 中有两个非常重要的概念:
- 服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
- 项目( project ):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件定义, 整个 docker-compose.yml 定义一个项目
Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
通过 compose 可以方便的管理多个服务。
docker-compose解决了容器的管理和编排问题
2、为什么要 Docker Compose?
Docker 是一个轻量化的应用程序,Docker 官方推荐每个 Docker 容器中只运行一个进程。
如果一个应用需要涉及到 MySQL、nginx 等环境, 那么我需要分别为应用、数据库和 nginx 创建单独的 docker 容器,然后分别启动容器。
想象一下,当我们构建好 Docker 之后,每次启动应用,都至少需要 docker run三次, 或者写一些脚本来实现, 这样会比较繁琐
另外,这些 docker 容器都是分散独立的,也不方便镜像管理。那既然这些 docker容器 都是为了同一个应用服务,我们就应该把它们放到一起,这就引出了 docker-compose 来解决这类型的问题
3、Docker Compose 的安装
安装 docker 的时候,我们默认已经安装了 docker-compose,安装的组件包名称为docker-compose-plugin,此处不再赘述
检查安装是否成功
docker compose version
4、Docker Compose 的功能和使用场景
Compose 使用的步骤:
1、使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行
2、最后,执行 docker compose up 命令来启动并运行整个应用程序
核心功能
Compose 具有管理应用程序整个生命周期的命令:
启动,停止和重建服务
查看正在运行的服务的状态
流式传输运行服务的日志输出
在服务上运行一次性命令
Docker Compose 使用场景
单主机部署:快速搭建一个单节点开发或者测试环境,方便使用
不同环境隔离:通过指定 project 来运行不同的环境,实现隔离的目的
5、Docker Compose 文件(docker-compose.yml)
5.1 文件语法版本
目前官方支持三个大版本, 即 Version 1、Version 2 及 Version 3, 其中 Version 1 已经被废弃掉了
当前最新的版本是 3.8,它支持的 Docker Engine 版本不得低于 19.03.0。 我们主要基于 3.8 版本的 Compose file 语法进行讲解,其他版本介绍参见官方文档
5.2 文件基本结构及常见指令
yaml文件基本结构如下:
YAML
version: "3.8" #定义版本, 表示当前使用的 docker-compose 语法的版本
services: #服务,可以存在多个
servicename: #服务名字,它也是内部 bridge 网络可以使用的 DNS name,如果不是集群模式相当于docker run的时候指定的一个名称,集群(Swarm)模式是多个容器的逻辑抽象image: #必选,镜像的名字command: #可选,如果设置,则会覆盖默认镜像里的 CMD 命令environment: #可选,等价于 docker container run 里的 --env 选项设置环境变量volumes: #可选,等价于 docker container run 里的 -v 选项 绑定数据卷networks: #可选,等价于 docker container run 里的 --network 选项指定网络ports: #可选,等价于 docker container run 里的 -p 选项指定端口映射expose: #可选,指定容器暴露的端口build: #构建目录depends_on: #服务依赖配置env_file: #环境变量文件servicename2:image: command: networks: ports: servicename3:#...
volumes: #可选,等价于 docker volume create
networks: #可选,等价于 docker network create
因为不大可能记住所有的参数,如果不知道,就去官网查看:https://docs.docker.com/compose/compose-file/compose-file-v3/
常见字段格式语法
image
指定容器运行的镜像。以下格式都可以:
image: redis
image: redis:5
image:
redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398
bc4b991aac7
image: library/redis
image: docker.io/library/redis
image: my_private.registry:5000/redis
搭建一个web站点:
先创建一个临时的工作目录,因为docker-compose中有一个参数,叫project,如果不指定目录名称,默认会使用配置文件所在的目录作为项目的名称,然后在这个目录下创建配置文件,并进行编辑
使用docker compose up 解析docker-compose文件,然后将所有的服务启动
检测对应的网路和容器是否存在
也可以用docker compose ps查看相关信息
使用命令docker compose down进行销毁,容器和网络都会销毁
command
覆盖容器启动的默认命令
command: ["bundle", "exec", "thin", "-p", "3000"]
command: bundle exec thin -p 3000
通过compose命令启动文件,再查看这个容器的启动命令
docker inspect project1-web-1
拷贝project1,再到project2中的compose文件加上command参数
启动容器,再查看容器的启动命令,此时它已经被改了
使用curl命令,访问本地地址
这里出错的原因就是,改了nginx的启动命令,nginx其实并没有启动
entrypoint
覆盖容器默认的 entrypoint
entrypoint: /code/entrypoint.sh
也可以是以下格式:
entrypoint:- php- -d- zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so- -d- memory_limit=-1- vendor/bin/phpunit
拷贝project1,再到project2中的compose文件加上entrypoint参数,再启动
查看entrypoint
docker inspect project3-web-1
entrypoint也会把启动命令更改
environment
添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False
#map 语法
environment:RACK_ENV: developmentSHOW: "true"USER_INPUT:
#数组语法
environment:- RACK_ENV=development- SHOW=true- USER_INPUT
修改compose文件,启动容器
查看对应的Env
networks
指定容器运行的网络
配置容器网络
services:frontend:image: awesome/webappnetworks:- front-tier- back-tiermonitoring:image: awesome/monitoringnetworks:- adminbackend:image: awesome/backendnetworks:back-tier:aliases:- databaseadmin:aliases:- mysqlnetworks:front-tier:back-tier:admin:
配置网络驱动和子网信息
services:frontend:image: awesome/webappnetworks:front-tier:ipv4_address: 172.16.238.10networks:front-tier:ipam:driver: default
配置网络
使用docker compose config 命令,如果正常打印信息,则说明语法没问题
运行容器
volumes
将主机的数据卷或者文件挂载到容器里
#短语法
services:db:image: postgres:latestvolumes:- "/localhost/postgres.sock:/var/run/postgres/postgres.sock"- "/localhost/data:/var/lib/postgresql/data"#完整语法
services:backend:image: awesome/backendvolumes:- type: volume#命名卷source: db-datatarget: /datavolume:nocopy: true#绑定卷- type: bindsource: /var/run/postgres/postgres.socktarget: /var/run/postgres/postgres.sockvolumes:db-data:
拷贝project1,再到project5中的compose文件加上volumes参数,再启动,查看容器的卷信息
ports
指定端口映射。以下格式都可以:
#完整语法
ports:- target: 80host_ip: 127.0.0.1published: 8080protocol: tcpmode: host- target: 80host_ip: 127.0.0.1published: 8000-9000protocol: tcpmode: host#短语法
ports:- "3000"- "3000-3005"- "8000:8000"- "9090-9091:8080-8081"- "49100:22"- "127.0.0.1:8001:8001"- "127.0.0.1:5000-5010:5000-5010"- "6060:6060/udp"
拷贝project1,再到project6中的compose文件加上ports参数,再启动
expose
暴露端口,但不映射到宿主机,只被连接的服务访问
仅可以指定内部端口为参数:
expose:- "3000"- "8000"
拷贝project1,再到project5中的compose文件加上expose参数,再启动
进入容器,使用curl命令,此时能访问到nginx的页面
build
指定为构建镜像上下文路径
例如 webapp 服务,指定为从上下文路径 ./dir/Dockerfile 所构建的镜像:
version: "3.7"
services:webapp:build: ./dir
或者,作为具有在上下文指定的路径的对象,以及可选的 Dockerfile 和 args:
version: "3.7"
services:webapp:build:context: ./dirdockerfile: Dockerfile-alternateargs:buildno: 1labels:- "com.example.description=Accounting webapp"- "com.example.department=Finance"- "com.example.label-with-empty-value"
context:上下文路径
dockerfile:指定构建镜像的 Dockerfile 文件名
args:添加构建参数,这是只能在构建过程中访问的环境变量
labels:设置构建镜像的标签
depends_on
设置依赖关系
docker compose up :以依赖性顺序启动服务。在以下示例中,先启动 db 和redis ,才会启动 web
docker compose up SERVICE :自动包含 SERVICE 的依赖项。在以下示例中,docker compose up web 还将创建并启动 db 和 redis
docker compose stop :按依赖关系顺序停止服务。在以下示例中,web 在 db 和redis 之前停止
version: "3.8"
services:web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres
可以指定条件,healthy 需要配置 healthcheck 来完成
services:web:build: .depends_on:db:condition: service_healthyredis:condition: service_startedredis:image: redisdb:image: postgres
health check 样例
version: "3.8"
services:web:image: nginx:1.24.0environment:TEST: 1depends_on:mysql:condition: service_healthy mysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: fl@123 #设置密码healthcheck:test: mysql -uroot -pfl@123 -e "select 1;"interval: 10s #间隔10stimeout: 5s #超时时间5sretries: 10 #重试10次
拷贝project1,再到project7中的修改compose文件的参数
启动容器
停止容器
env_file
从文件添加环境变量。可以是单个值或列表的多个值
env_file: .env
也可以是列表格式:
env_file:- ./common.env- ./apps/web.env- /opt/secrets.env
拷贝project1,再到project8中的compose文件加上env_file,并配置对应的文件
启动容器,进入容器,查看对应的环境变量
6、Docker Compose 命令清单
官网参考地址:官方网站
命令清单如下:
命令 | 功能 |
---|---|
docker compose build | 构建服务 |
docker compose config | 规范的格式来显示服务配置 |
docker compose cp | 在本地系统和服务容器直接拷贝文件 |
docker compose create | 创建服务的容器 |
docker compose down | 停止所有容器,并删除容器 |
docker compose events | 从服务器获取实时事件 |
docker compose exec | 在容器中执行命令 |
docker compose images | 列出所有容器使用的镜像 |
docker compose kill | 强制停止服务的容器 |
docker compose logs | 显示日志 |
docker compose ls | 显示所有项目 |
docker compose pause | 暂停服务 |
docker compose port | 列出所有的端口映射 |
docker compose ps | 该命令可以列出项目中目前的所有容器 |
docker compose pull | 拉取服务镜像 |
docker compose push | 推送服务镜像 |
docker compose restart | 重启或者重启某个服务 |
docker compose rm | 删除服务停止的容器 |
docker compose run | 在指定服务容器上执行相关的命令 |
docker compose start | 启动当前停止的某个容器 |
docker compose stop | 停止当前运行的某个容器 |
docker compose top | 显示运行的进程 |
docker compose unpause | 恢复服务 |
docker compose up | up 命令会构建,(重新)创建,启动,链接一个服务相关的容器。默认情况下如果容器已经存在,将会停止并尝试重新创建他们。并使用之前挂载的卷。 --no-recreate 参数可以让容器不被停止或者重新创建,-d 表示后台运行 |
docker compose version | 查看版本 |
命令格式:
对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响
docker-compose 命令的基本的使用格式为:
docker compose [OPTIONS] COMMAND [ARGS...]
常见选项说明:
-f, --file 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定
-p, --project-name 指定项目名称,默认将使用所在目录名称作为项目名
常见命令说明
up
该命令的作用十分强大,它会尝试自动完成包括构建镜像、(重新)创建服务、启动服务并关联服务相关容器的一系列操作,可以直接通过该命令来启动一个项目
docker compose up [options] [SERVICE...]
-d 在后台运行服务容器, 推荐在生产环境下使用该选项
- -force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用
- -no-recreate 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用
前台运行容器,相关信息会被打印出来,按下ctrl+c,则停止容器
使用 --force-recreate 强制重新创建容器
使用 --no-recreate,如果容器已经存在了,则不重新创建
注意:--force-recreate 和 --no-recreate 不能一起使用
down
停止所有容器,并删除容器和网络,不会删除卷
docker compose down [options] [SERVICE...]
-v, --volumes 删除容器同时删除目录映射(删除的是docker管理的卷,也就是容器的,而不是宿主机的)
run
该命令可以在指定服务容器上执行相关的命令
# 例如:启动一个 ubuntu 服务容器,并执行 ping docker.com 命令
# docker compose run ubuntu ping docker.com
docker compose run [options] SERVICE [COMMAND] [ARGS...]
-d 后台运行容器
- -name NAME 为容器指定一个名字
- -entrypoint CMD 覆盖默认的容器启动指令
-e KEY=VAL 设置环境变量值,可多次使用选项来设置多个环境变量
-u, --user=“” 指定运行容器的用户名或者 uid
- -rm 运行命令后自动删除容器
-p, --publish=[] 映射容器端口到本地主机
启动一个nginx服务容器,并执行 curl www.baidu.com 命令
docker compose run --name mynginx721 web curl www.baidu.com
7、操作案例
先启动mysql和redis服务,然后再启动nginx站点
第一步:构建对应的拓扑关系,编辑docker-compose.yml文件
version: "3.8"
services:web:image: nginx:1.21.3environment:TEST: 1depends_on:mysql:condition: service_healthyredis:condition: service_healthymysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: fl@123healthcheck:test: mysql -u root -pfl@123interval: 10stimeout: 5sretries: 10redis:image: redis:7healthcheck:test: redis-cli pinginterval: 10stimeout: 5sretries: 10
通过docker compose config检测语法是否有误,如果有误,则会输出提示,如果无误,也会有对应的信息输出
第二步:配置网络、首页及存储卷
再次编辑docker-compose.yml文件
version: "3.8"
services:web:image: nginx:1.21.3environment:TEST: 1ports:- 6379:80networks:- mytestnetworkvolumes:- ./nginxhome:/usr/share/nginx/htmldepends_on:mysql:condition: service_healthyredis:condition: service_healthymysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: fl@123volumes:- ./mysqllib:/var/lib/mysqlnetworks:- mytestnetworkhealthcheck:test: mysql -u root -pfl@123interval: 10stimeout: 5sretries: 10redis:image: redis:7networks:- mytestnetworkhealthcheck:test: redis-cli pinginterval: 10stimeout: 5sretries: 10networks:mytestnetwork:
通过docker compose config检测语法是否有误,确保通过
配置nginx首页
第三步:服务启动
docker compose up -d
通过浏览器访问,查看nginx站点是否启动成功
查看mysqllib,已经将数据全都放在这个目录下了
第四步:资源清理
docker compose down
宿主机的资源是不会被清理的
8、Docker Compose 部署 WordPress
什么是 WordPress?
WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统(CMS)来使用
WordPress 是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP 语言和 MySQL 数据库开发的,用户可以在支持 PHP 和 MySQL 数据库的服务器上使用自己的博客
WordPress 有许多第三方开发的免费模板,安装方式简单易用。不过要做一个自己的模板,则需要你有一定的专业知识。比如你至少要懂的标准通用标记语言下的一个应用 HTML 代码、CSS、PHP 等相关知识
WordPress 官方支持中文版,同时有爱好者开发的第三方中文语言包,如 wopus 中文语言包。WordPress 拥有成千上万个各式插件和不计其数的主题模板样式
第一步:编写 Docker Compose
version: "3.8"
services:wordpress:image: wordpressrestart: alwaysdepends_on:db:condition: service_healthyports:- 6379:80environment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_USER: mywordpressuserWORDPRESS_DB_PASSWORD: mywordpresspassWORDPRESS_DB_NAME: wordpressvolumes:- ./wordpress/:/var/www/htmldb:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: rootMYSQL_DATABASE: wordpressMYSQL_USER: mywordpressuserMYSQL_PASSWORD: mywordpresspassvolumes:- ./mysqlvarlib/:/val/lib/mysqlhealthcheck:test: mysql -u root -proot -e "select 1;"interval: 10stimeout: 5sretries: 10
使用命令docker compose config检查,确保通过
第二步:wordpress启动和安装
docker compose up -d
因为我这里是第一次拉取wordpress镜像,所以花了这么久的时间
浏览器直接访问wordpress的首页,如果没安装过wordpress,就会进入对应的安装页面
安装完成后,进行登录
随便写一篇文章,仅用于测试
所有功能都没问题
9、常见问题
问题一:up、run 和 start 之间有什么区别?
通常,你想要 docker compose up. 用于 up 启动或重新启动 docker-compose.yml。在默认的“附加”模式下,会看到来自所有容器的所有日志。在“分离”模式 ( -d) 中,启动容器后 Compose 退出,但容器继续在后台运行
该 docker compose run 命令用于运行“一次性”或“临时”任务。它需要您要运行的服务名称,并且只为正在运行的服务所依赖的服务启动容器。用于 run 运行测试或执行管理任务,例如从数据卷容器中删除或添加数据。该 run 命令的作用类似于 docker run -ti 它打开容器的交互式终端并返回与容器中进程的退出状态匹配的退出状态
docker compose start 命令仅对重新启动先前创建但已停止的容器有用。它从不创建新容器
问题二:如何在同一主机上运行 Compose 文件的多个副本?
Compose 使用项目名称为项目的所有容器和其他资源创建唯一标识符。要运行项目的多个副本,请使用-p 命令行选项 或 COMPOSE_PROJECT_NAME 环境变量设置自定义项目名称
问题三:可以控制服务启动顺序吗?
可以控制启动顺序,通过依赖指定(depends_on),并且可以配合 healthcheck 等健康检查成功以后再启动
相关文章:

Docker学习——⑧
文章目录 1、什么是 Docker Compose(容器编排)2、为什么要 Docker Compose?3、Docker Compose 的安装4、Docker Compose 的功能和使用场景5、Docker Compose 文件(docker-compose.yml)5.1 文件语法版本5.2 文件基本结构及常见指令 6、Docker …...
力扣刷题第二十一天--栈与队列
前言 周末玩了两天,s赛看的难受。。。还是和生活对线吧 内容 一、用栈实现队列 232.用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类&#…...

Python基础-解释器安装
一、下载 网址Welcome to Python.orgPython更新到13了,我们安装上一个12版本。 这里我保存到网盘里了,不想从官网下的,可以直接从网盘里下载。 链接:百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间…...

MySQL(14):视图
数据库对象 对象描述表(TABLE)表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记录数据字典就是系统表,存放数据库相关信息的表。系统表的数据通常由数据库系统维护,程序员通常不应该修改,只…...

Blazor 附件上传和下载功能
效果图 page "/uploadFile" inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment inject ToastService ToastService inject DownloadService DownloadService<h3>UploadFile</h3><Button OnClick"ButtonClick" C…...

Git 安装配置
目录 Linux 平台上安装 Debian/Ubuntu Centos/RedHat 源码安装 Windows 平台上安装 Mac 平台上安装 Git 配置 用户信息 文本编辑器 差异分析工具 查看配置信息 在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。 Git …...

Center Smoothing Certified Robustness for Networks with Structured Outputs
文章目录 Center Smoothing: Certified Robustness for Networks with Structured OutputsSummaryResearch ObjectiveProblem StatementMethodsEvaluationConclusionNotesGaussian Smoothing常用希腊字母霍夫丁不等式(Hoeffdings inequality)1.简述2.霍夫…...

C#几种截取字符串的方法
在C#编程中,经常需要对字符串进行截取操作,即从一个长字符串中获取所需的部分信息。本文将介绍几种常用的C#字符串截取方法,并提供相应的示例代码。 目录 1. 使用Substring方法2. 使用Split方法3. 使用Substring和IndexOf方法4. 使用Regex类…...

【PG】PostgreSQL高可用方案repmgr部署(非常详细)
目录 简介 1 概述 1.1 术语 1.2 组件 1.2.1 repmgr 1.2.2 repmgrd 1.3 Repmgr用户与元数据 2 安装部署 2.0 部署环境 2.1 安装要求 2.1.1 操作系统 2.1.2 PostgreSQL 版本 2.1.3 操作系统用户 2.1.4 安装位置 2.1.5 版本要求 2.2 安装 2.2.1 软件包安装 2.2…...
Linux Makefile配置问题
编写一个简单的工程文件,制作Makefile需要包含lpthread,当Makefile写为如下配置时 #CROSSCOMPILE : arm-linux- CROSSCOMPILE :CFLAGS : -Wall -O2 -c CFLAGS -I$(PWD)LDFLAGS : -lpthread LDFLAGS -lm -ldlCC : $(CROSSCOMPILE)gcc #LD :…...
k8s篇之underlay网络和overlay区别
k8s中underlay网络和overlay区别 一、网络 1 Overlay网络: Overlay叫叠加网络也叫覆盖网络,指的是在物理网络的基础之上迭代实现新的虚拟网络,即可使网络中的容器可以互相通信。 优点是对物理网络的兼容性比较好,可以实现pod的…...

掉瓶子小游戏
欢迎来到程序小院 掉瓶子 玩法:旋转的瓶子,根据瓶子方向,点击鼠标左键瓶子掉落,从桌面中间掉下即得1分,卡在桌边瓶子碎了游戏结束,快去掉瓶子吧^^。开始游戏https://www.ormcc.com/play/gameStart/203 htm…...

Elasticsearch7 入门 进阶
1、全文检索 1.1、数据分类 按数据分类的话,主要可以分为以下三类: 结构化数据:固定格式、有限长度,比如mysql存的数据非结构化数据:不定长、无固定格式,比如邮件、Word文档、日志等半结构化数据…...
你是怎么封装微信小程序的数据请求的?
当封装微信小程序的数据请求时,可以采用一种模块化的方法,将请求逻辑与界面逻辑分离,以提高代码的可维护性和可扩展性。以下是一个基于前言、高质量代码、理解、优缺点和结尾的范例: 前言 在微信小程序中,数据请求是…...
C++ vector中capacity()和size() 的区别
size是指容器当前拥有元素的个数, capacity是指容器在必须分配新的存储空间之前可以存放的元素总数。 如vector<int> ivect(10),ivect.capacity()10,ivect.size()0, 当向ivect中插入元素时,只要没有超过10个,那么capacity就…...

【Redis】redis-server和redis-cli
上一篇《redis 的下载和安装》 https://blog.csdn.net/m0_67930426/article/details/134341071?spm1001.2014.3001.5501 安装完之后开始使用 打开客户端之前需要先打开服务端 redis-server 直接使用该命令打开就行 然后在打开客户端 redis-cli 使用ping命令查看是否连接服…...
【系统架构设计】架构核心知识: 2.4 系统建模过程和系统设计
目录 一 系统建模过程 1 结构化建模 2 信息工程建模方法 3 面向对象建模方法...

企业电子招标采购系统源码之从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理
功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查看所…...
ubantu libssl.so.1.1: cannot open shared object file
libssl.so.1.1: cannot open shared object file 使用 Ubuntu 22.04 时,有时候会遇到如下错误 error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory 这是因为Ubuntu 22.04 默认使用的是 openssl3.0 …...

python matlplotlib/seaborn 绘制曲线的平均值标准差阴影图
1. seaborn 旧版本(0.8.1)中使用tsplot,新版本中使用lineplot 直线代表均值,阴影代表meanstd(带有置信区间,参数ci) import seaborn as sns import matplotlib.pyplot as plt import numpy as np import pandas as p…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...