网络工程师需要熟悉Docker吗?我觉得不需要精通,但是得懂基础
你好,这里是网络技术联盟站,我是瑞哥。
Docker,这个字眼大家不陌生吧,不过作为网络工程师可能平时接触不到,如果在看文章的是运维人员,那么70%以上的运维人员都会跟Docker打交道。即使网工用不到,作为非常火爆热门的技术,也希望大家能坚持看50%的文章,熏陶一下技术。
Docker由Solomon Hykes于2013年推出,最初是一个开源项目,旨在简化开发人员在开发、测试和生产环境中部署应用程序的过程。Docker通过容器技术提供了一种轻量级的虚拟化解决方案,使应用程序可以在任何环境中一致地运行。随着Docker的普及,DevOps和云计算领域的工作方式发生了深刻变化,Docker已成为现代软件开发和部署的重要工具。
在现代软件开发中,快速迭代和持续交付变得至关重要。Docker的出现使得开发人员可以轻松创建、共享和运行应用程序,从而提高了开发效率,降低了环境不一致性带来的问题。此外,Docker的隔离特性增强了系统的安全性和稳定性,使其在微服务架构和云原生应用中得到了广泛应用。
目录:
-
容器技术
-
容器与虚拟机的区别
-
容器化的优点
-
Docker的基本概念
-
镜像 (Image)
-
容器 (Container)
-
仓库 (Repository)
-
Docker引擎 (Docker Engine)
-
Docker架构
-
Docker客户端与服务端
-
Docker的组件
-
安装Docker
-
Docker镜像
-
Docker镜像的基础操作
-
构建Docker镜像
-
优化Docker镜像
-
管理镜像
-
Docker容器
-
Docker容器的基本操作
-
容器的生命周期管理
-
容器网络
-
容器日志与调试
-
Docker仓库与Docker Hub
-
使用Docker Hub
-
私有Docker仓库
-
Docker仓库的高级功能
-
Docker Compose
-
Docker Compose的基本概念
-
Docker Compose文件格式
-
Docker Compose的基本操作
-
Docker Compose的高级功能
-
Docker Swarm
-
Docker Swarm的基本概念
-
设置和管理Docker Swarm集群
-
创建和管理Swarm服务
-
⏰写在最后
-
Docker的基础概念
-
Docker的基本操作
-
数据管理与网络
-
Docker Compose
-
Docker Swarm
💡 如果已经有Docker基础的朋友,可以直接滑到最后总结部分进行查漏补缺!
容器技术
容器与虚拟机的区别
-
虚拟机 (VM)
-
VM包含完整的操作系统,并在虚拟化层之上运行多个操作系统实例。
-
VM需要更多的系统资源(CPU、内存、存储)来管理这些操作系统实例。
-
容器 (Container)
-
容器共享主机操作系统的内核,具有独立的文件系统、进程和网络空间。
-
容器更轻量级,启动速度快,占用资源少。
特性 | 虚拟机 | 容器 |
---|---|---|
启动时间 | 几分钟 | 几秒 |
资源开销 | 高(包含操作系统内核) | 低(共享主机操作系统内核) |
性能 | 中等 | 高(更接近主机性能) |
隔离级别 | 强(完全隔离) | 较弱(共享内核) |
适用场景 | 多种操作系统和更高安全隔离需求 | 快速部署、微服务、开发测试等 |
容器化的优点
-
快速启动:容器可以在几秒钟内启动,提高了开发和部署效率。
-
轻量级:容器共享主机操作系统内核,占用更少的系统资源。
-
一致性:确保应用程序在开发、测试和生产环境中的行为一致,减少“环境问题”。
-
便捷性:容器化应用可以打包成独立的单元,便于分发、复制和管理。
-
可移植性:容器化应用可以在任何支持Docker的平台上运行,无需修改代码。
Docker的基本概念
镜像 (Image)
Docker镜像是一个轻量级、独立、可执行的软件包,包含了运行某个应用程序所需的全部内容,包括代码、运行时、库、环境变量和配置文件。镜像是只读的,当容器启动时,Docker会在镜像的顶部添加一个可写层。
容器 (Container)
容器是镜像的一个运行实例,它包括了镜像中的所有内容以及一个可写层。容器是独立的、可移植的单元,可以在任何支持Docker的平台上运行。
仓库 (Repository)
Docker仓库是存储和分发镜像的地方。Docker Hub是官方的公共仓库,用户也可以搭建私有仓库来存储自己的镜像。仓库中可以包含多个镜像,每个镜像可以有不同的标签(Tag)。
Docker引擎 (Docker Engine)
Docker引擎是一个轻量级的运行时和工具集,用于创建和管理容器。它包括以下组件:
-
Docker守护进程 (Docker Daemon):负责管理容器的生命周期。
-
Docker CLI (命令行界面):用于与Docker守护进程交互的命令行工具。
-
Docker Registries (镜像仓库):存储和分发Docker镜像。
Docker架构
Docker客户端与服务端
Docker采用了客户端-服务端(Client-Server)架构,客户端通过Docker CLI与服务端的Docker守护进程通信。Docker CLI发送命令给Docker守护进程,后者负责执行这些命令(如构建、运行和分发容器)。
Docker的组件
-
Docker守护进程 (Docker Daemon):后台进程,负责管理Docker对象(如镜像、容器、网络和卷)。
-
Docker CLI:命令行工具,用户通过它与Docker守护进程通信。
-
Docker Registries:存储和分发Docker镜像的地方,包含公共的Docker Hub和私有的Docker Registry。
安装Docker
-
Windows
-
下载并安装Docker Desktop for Windows。
-
启动Docker Desktop并进行基本配置。
-
验证安装:在命令行中运行
docker --version
。 -
macOS
-
下载并安装Docker Desktop for Mac。
-
启动Docker Desktop并进行基本配置。
-
验证安装:在终端中运行
docker --version
。 -
Linux
-
更新APT包索引:
sudo apt-get update
-
安装必要的包:
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
-
添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
-
设置Docker的稳定版仓库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
-
安装Docker Engine:
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
-
验证安装:
sudo docker --version
-
以Ubuntu为例:
Docker镜像
Docker镜像是构建容器的基础,它包含了应用程序运行所需的所有依赖和配置。镜像是不可变的,每次运行镜像时都会生成一个新的容器实例。
常见的Docker镜像源包括:
-
Docker Hub:最广泛使用的公共镜像库,包含了大量官方和社区维护的镜像。
-
私有镜像库:用户可以搭建自己的Docker Registry来存储和管理私有镜像。
Docker镜像的基础操作
拉取镜像 (docker pull)
docker pull
命令用于从镜像仓库拉取镜像。语法如下:
docker pull <镜像名>:<标签>
例如,拉取官方的nginx镜像:
docker pull nginx:latest
查看镜像 (docker images)
docker images
命令用于列出本地存储的所有Docker镜像。语法如下:
docker images
示例输出:
删除镜像 (docker rmi)
docker rmi
命令用于删除本地的Docker镜像。语法如下:
docker rmi <镜像ID或镜像名>:<标签>
例如,删除nginx镜像:
docker rmi nginx:latest
构建Docker镜像
Dockerfile是一个文本文件,包含了构建Docker镜像所需的一系列指令。每个指令在构建过程中创建镜像的一层。常用的Dockerfile指令包括:
-
FROM
:指定基础镜像 -
RUN
:在镜像内执行命令 -
COPY
:将文件从宿主机复制到镜像内 -
CMD
:指定容器启动时要执行的命令
Dockerfile指令
- FROM
FROM ubuntu:20.04
指定基础镜像为Ubuntu 20.04。
- RUN
RUN apt-get update && apt-get install -y nginx
在镜像内执行命令,安装nginx。
- COPY
COPY . /app
将当前目录下的所有文件复制到镜像内的/app目录。
- CMD
CMD ["nginx", "-g", "daemon off;"]
指定容器启动时执行的命令。
构建镜像 (docker build)
docker build
命令用于根据Dockerfile构建镜像。语法如下:
docker build -t <镜像名>:<标签> <Dockerfile路径>
例如,构建一个名为mynginx的镜像:
docker build -t mynginx:latest .
优化Docker镜像
多阶段构建
多阶段构建可以在一个Dockerfile中使用多个FROM指令,减少最终镜像的大小。例如:
# 第一阶段:构建应用程序 FROM golang:1.16 as builder WORKDIR /app COPY . . RUN go build -o myapp # 第二阶段:创建最终镜像 FROM alpine:latest WORKDIR /app COPY --from=builder /app/myapp . CMD ["./myapp"]
镜像瘦身技巧
-
使用轻量级基础镜像:如Alpine Linux。
-
减少镜像层数:合并多个RUN指令。
-
清理不必要的文件:在Dockerfile中删除临时文件。
管理镜像
标签用于标识镜像的不同版本。通过标签,用户可以方便地管理和拉取特定版本的镜像。例如:
docker tag nginx:latest mynginx:v1.0
通过合理使用标签和版本控制系统(如Git),可以有效管理镜像的不同版本,确保应用程序在各个环境中的一致性。
Docker容器
Docker容器是运行在Docker引擎上的独立运行环境。每个容器都是从一个镜像启动的,并在镜像的基础上添加一个可写层。容器提供了应用程序的隔离环境,使其运行所需的所有依赖和配置都封装在容器内。
镜像是静态的文件系统和应用程序配置的组合,而容器是镜像的运行实例。当我们启动一个容器时,Docker会在镜像的基础上创建一个可写层,从而使容器变得可操作。镜像可以被多次使用来创建多个容器。
Docker容器的基本操作
创建并启动容器 (docker run)
docker run
命令用于创建并启动一个容器。语法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
例如,运行一个nginx容器:
docker run -d -p 80:80 nginx
此命令会下载nginx镜像(如果本地没有),然后在后台运行一个nginx容器,并将主机的80端口映射到容器的80端口。
停止与重启容器 (docker stop, docker start)
- 停止容器
docker stop <容器ID或容器名>
例如,停止一个名为mynginx的容器:
docker stop mynginx
- 重启容器
docker start <容器ID或容器名>
例如,重启mynginx容器:
docker start mynginx
进入容器 (docker exec, docker attach)
- 使用
docker exec
进入容器
docker exec
命令用于在运行的容器内执行命令。语法如下:
docker exec -it <容器ID或容器名> <命令>
例如,进入一个正在运行的容器的bash环境:
docker exec -it mynginx /bin/bash
- 使用
docker attach
连接到容器
docker attach
命令用于连接到一个运行中的容器。语法如下:
docker attach <容器ID或容器名>
例如,连接到mynginx容器:
docker attach mynginx
容器的生命周期管理
容器的状态管理
- 查看运行中的容器
docker ps
该命令列出所有正在运行的容器。
- 查看所有容器(包括停止的)
docker ps -a
- 删除容器
docker rm <容器ID或容器名>
例如,删除mynginx容器:
docker rm mynginx
持久化存储 (Volumes)
Docker容器中的数据默认是临时的,当容器删除时,数据也随之删除。为了持久化数据,我们可以使用卷(Volumes)。
- 创建卷
docker volume create <卷名>
例如,创建一个名为myvolume的卷:
docker volume create myvolume
- 使用卷
在运行容器时挂载卷:
docker run -d -p 80:80 -v myvolume:/data nginx
该命令将myvolume挂载到容器内的/data目录。
- 查看卷
docker volume ls
- 删除卷
docker volume rm <卷名>
容器网络
Docker的网络模式
Docker提供了多种网络模式,用于配置容器之间的通信。
- 桥接网络 (Bridge Network)
默认网络模式。每个容器连接到一个桥接网络,可以通过容器IP进行通信。
docker run --network bridge <镜像>
- 主机网络 (Host Network)
容器与主机共享网络栈。
docker run --network host <镜像>
- 无网络 (None Network)
容器不连接到任何网络。
docker run --network none <镜像>
自定义网络
- 创建自定义桥接网络
docker network create <网络名>
例如,创建一个名为mynetwork的自定义桥接网络:
docker network create mynetwork
- 将容器连接到自定义网络
docker run --network mynetwork <镜像>
容器间通信
通过自定义网络,可以使用容器名直接进行通信。例如,在mynetwork中运行两个容器,一个容器可以通过另一个容器的名字进行通信:
docker run -d --network mynetwork --name container1 nginx docker run -d --network mynetwork --name container2 nginx
此时,container2可以通过ping container1
与container1通信。
容器日志与调试
容器日志查看 (docker logs)
docker logs
命令用于查看容器的日志。语法如下:
docker logs <容器ID或容器名>
例如,查看mynginx容器的日志:
docker logs mynginx
容器调试技巧
- 查看容器内进程
docker top <容器ID或容器名>
- 检查容器的资源使用情况
docker stats <容器ID或容器名>
- 导出容器的元数据
docker inspect <容器ID或容器名>
Docker仓库与Docker Hub
Docker仓库用于存储和分发Docker镜像,方便开发团队之间共享应用程序。Docker仓库分为公共仓库和私有仓库。公共仓库如Docker Hub,提供了大量的开源镜像资源;私有仓库则用于存储企业内部的专有镜像,保障安全和合规。
Docker Hub是最广泛使用的Docker公共仓库,提供了海量的官方和社区镜像。用户可以从Docker Hub拉取、推送镜像,并使用Docker Hub的CI/CD集成功能。
使用Docker Hub
创建Docker Hub账户
- 访问 Docker Hub
https://hub.docker.com
。
-
点击“Sign Up”按钮进行注册。
-
填写相关信息并完成账户注册。
登录Docker Hub
在命令行中使用docker login
命令登录Docker Hub:
docker login
输入Docker Hub的用户名和密码即可完成登录。
拉取镜像 (docker pull)
从Docker Hub拉取镜像非常简单,使用docker pull
命令:
docker pull <镜像名>:<标签>
例如,拉取官方的Python镜像:
docker pull python:3.9
推送镜像 (docker push)
要推送镜像到Docker Hub,首先需要给镜像打标签,然后推送:
- 给镜像打标签:
docker tag <本地镜像ID或名称>:<标签> <Docker Hub用户名>/<镜像名>:<标签>
例如,将本地镜像myapp打标签为Docker Hub的myapp:
docker tag myapp:latest myusername/myapp:latest
- 推送镜像:
docker push <Docker Hub用户名>/<镜像名>:<标签>
例如,推送myapp镜像:
docker push myusername/myapp:latest
管理镜像库
在Docker Hub网站上可以管理自己的镜像库,包括创建新的仓库、设置仓库的可见性(公共或私有)、查看镜像的详细信息和下载次数等。
私有Docker仓库
搭建私有仓库
Docker官方提供了一个开源的私有仓库实现——Docker Registry。可以使用官方的Registry镜像快速搭建一个私有仓库。
- 拉取Registry镜像:
docker pull registry:2
- 运行Registry容器:
docker run -d -p 5000:5000 --name myregistry registry:2
此时,私有仓库将运行在本地主机的5000端口。
推送和拉取私有仓库的镜像
- 给镜像打标签:
docker tag <本地镜像ID或名称>:<标签> localhost:5000/<镜像名>:<标签>
例如,将本地镜像myapp打标签为私有仓库的myapp:
docker tag myapp:latest localhost:5000/myapp:latest
- 推送镜像:
docker push localhost:5000/myapp:latest
- 拉取镜像:
docker pull localhost:5000/myapp:latest
安全性配置
为了提高私有仓库的安全性,可以启用SSL/TLS和基础认证。
- 启用SSL/TLS
需要生成自签名证书或从CA获取证书,并配置Registry容器使用这些证书。
生成自签名证书:
mkdir -p certs openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt
启动Registry容器时挂载证书:
docker run -d -p 5000:5000 --name myregistry \ -v $(pwd)/certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2
- 启用基础认证
需要创建一个包含用户名和密码的htpasswd文件,并配置Registry容器使用这个文件。
安装htpasswd
工具:
sudo apt-get install apache2-utils
创建htpasswd文件:
mkdir -p auth htpasswd -Bc auth/htpasswd myusername
启动Registry容器时挂载htpasswd文件:
docker run -d -p 5000:5000 --name myregistry \ -v $(pwd)/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \ registry:2
Docker仓库的高级功能
自动构建
Docker Hub提供了自动构建功能,可以与GitHub或Bitbucket集成,当代码库有新的提交时自动构建并推送镜像。
- 设置自动构建
-
在Docker Hub上创建新的仓库,选择自动构建。
-
连接到GitHub或Bitbucket,选择代码库和分支。
-
配置Dockerfile的路径和构建规则。
Webhooks
Webhooks允许Docker Hub在镜像构建完成后向指定的URL发送HTTP请求,用于触发后续的CI/CD流程。
- 配置Webhooks
-
在Docker Hub仓库的设置页面,找到Webhooks。
-
添加新的Webhook,填写目标URL。
镜像扫描
Docker Hub提供了镜像扫描功能,可以扫描镜像中的已知漏洞,帮助提高应用程序的安全性。
- 启用镜像扫描在Docker Hub仓库的设置页面,启用镜像扫描功能。每次推送新镜像时,Docker Hub将自动进行安全扫描,并提供扫描报告。
Docker Compose
Docker Compose 是用于定义和运行多容器Docker应用程序的工具。通过一个简单的YAML文件,用户可以配置应用程序需要的所有服务,并使用单个命令启动和停止这些服务。Compose 是开发、测试和部署微服务架构应用的利器。
Docker Compose 通常与Docker一起安装,但也可以单独安装。以下是在不同平台上的安装步骤:
- Linux:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
- MacOS: 使用 Homebrew 安装
brew install docker-compose
- Windows: Docker Desktop 自带Docker Compose,安装 Docker Desktop 即可。
Docker Compose的基本概念
服务(Services)
在Docker Compose中,服务定义了一个容器的配置。一个服务可以是数据库、Web服务器等。Compose文件通过services关键字定义多个服务,每个服务对应一个容器。
网络(Networks)
Compose允许定义多个网络,服务可以连接到这些网络中进行通信。默认情况下,Compose会为所有服务创建一个默认网络。
卷(Volumes)
卷用于持久化存储。Compose允许定义卷,并将其挂载到服务的容器中。
Docker Compose文件格式
一个简单的docker-compose.yml
文件示例如下:
version: '3' services: web: image: nginx ports: - "80:80" db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example
版本(Version)
Compose文件的版本定义了语法的格式,不同版本支持的功能有所不同。建议使用最新的版本(如3或3.8)。
version: '3.8'
服务配置详解
-
image: 指定使用的镜像
-
build: 指定构建镜像的上下文路径和Dockerfile
-
ports: 端口映射
-
environment: 环境变量
-
volumes: 卷的挂载
services: web: image: nginx ports: - "80:80" volumes: - ./html:/usr/share/nginx/html db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example volumes: - db_data:/var/lib/mysql
网络配置
默认情况下,所有服务都连接到一个名为default
的网络。可以定义自定义网络:
networks: frontend: backend:
并将服务连接到这些网络:
services: web: networks: - frontend db: networks: - backend
卷配置
在Compose文件中可以定义卷:
volumes: db_data:
并将其挂载到服务的容器中:
services: db: volumes: - db_data:/var/lib/mysql
Docker Compose的基本操作
启动和停止服务 (docker-compose up, docker-compose down)
- 启动服务:
docker-compose up
该命令将启动Compose文件中定义的所有服务,并在控制台中输出日志。
- 后台运行服务:
docker-compose up -d
- 停止服务:
docker-compose down
查看服务状态 (docker-compose ps)
docker-compose ps
命令用于查看当前运行的服务状态:
docker-compose ps
重启服务 (docker-compose restart)
docker-compose restart
命令用于重启服务:
docker-compose restart <服务名>
查看服务日志 (docker-compose logs)
docker-compose logs
命令用于查看服务的日志:
docker-compose logs <服务名>
Docker Compose的高级功能
多环境配置
通过使用多个Compose文件,可以为不同的环境(如开发、测试、生产)定义不同的配置。
- 基础Compose文件 (
docker-compose.yml
):
version: '3.8' services: web: image: nginx ports: - "80:80"
- 覆盖Compose文件 (
docker-compose.override.yml
):
version: '3.8' services: web: environment: - NGINX_ENV=development
- 启动服务时,会自动应用覆盖文件:
docker-compose up
- 自定义环境Compose文件:
例如,为生产环境创建docker-compose.prod.yml
:
version: '3.8' services: web: environment: - NGINX_ENV=production
启动时指定环境文件:
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
扩展服务
通过scale选项可以扩展服务的副本数量,用于负载均衡和高可用。
- 扩展服务副本:
docker-compose up -d --scale web=3
以上命令将启动3个web服务的副本。
依赖管理
可以通过depends_on选项管理服务启动的依赖关系。例如,web服务依赖于db服务:
services: web: image: nginx depends_on: - db db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example
假设我们要构建一个简单的Web应用程序,包括一个前端服务(使用nginx)、一个后端服务(使用Node.js)和一个数据库服务(使用MySQL)。
创建一个docker-compose.yml
文件,定义前端、后端和数据库服务:
version: '3.8' services: frontend: image: nginx:latest ports: - "80:80" volumes: - ./frontend:/usr/share/nginx/html networks: - app-network backend: build: context: ./backend dockerfile: Dockerfile ports: - "3000:3000" networks: - app-network db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: appdb volumes: - db_data:/var/lib/mysql networks: - app-network networks: app-network: volumes: db_data:
创建必要的目录和文件:
- 前端目录结构:
frontend/ └── index.html
- 后端目录结构:
backend/ ├── Dockerfile └── app.js
编写前端的index.html
:
<!DOCTYPE html> <html> <head> <title>My App</title> </head> <body> <h1>Hello from Nginx</h1> </body> </html>
编写后端的Dockerfile
:
FROM node:14 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["node", "app.js"]
编写后端的app.js
:
`const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello from Node.js'); }); app.listen(port, () => { console.log(`Server is running on http://localhost:${port}`); }); `
启动应用:
docker-compose up -d
此时,应用的前端服务通过http://localhost访问,后端服务通过http://localhost:3000访问。
Docker Swarm
Docker Swarm是Docker原生的容器编排工具,用于在多主机上管理和编排Docker容器。Swarm集群由多个Docker引擎组成,提供了高可用性、扩展性和负载均衡等功能。使用Swarm,开发者可以像管理单个Docker实例一样,管理整个集群中的多个节点和容器。
Docker Swarm和Kubernetes是两种主要的容器编排工具。Swarm集成在Docker中,使用简单,适合中小型项目;Kubernetes功能强大,适合大规模复杂应用。根据项目需求选择合适的编排工具,是提升开发和运维效率的关键。
Docker Swarm的基本概念
节点(Nodes)
Swarm集群由多个节点组成。每个节点都是一个运行Docker的主机,分为管理节点(Manager Node)和工作节点(Worker Node)。管理节点负责集群管理和任务调度,工作节点负责实际运行容器。
服务(Services)
服务是Swarm管理的基本单位。服务定义了应用程序的容器镜像、运行参数和数量。Swarm会根据服务定义在集群中部署和管理容器。
任务(Tasks)
任务是服务的具体实例。每个任务对应一个运行中的容器,Swarm负责调度和管理任务,确保服务的高可用性和负载均衡。
堆栈(Stacks)
堆栈是由多个服务组成的应用程序。使用堆栈,开发者可以定义和管理整个应用的服务、网络和卷。堆栈文件类似于Compose文件,但适用于Swarm集群。
设置和管理Docker Swarm集群
初始化Swarm集群
在主机上初始化Swarm集群,使用docker swarm init
命令:
docker swarm init --advertise-addr <管理节点IP>
初始化成功后,命令行会输出加入Swarm集群的命令和token。
加入和离开Swarm集群
在工作节点上,使用docker swarm join
命令加入集群:
docker swarm join --token <worker-token> <管理节点IP>:2377
使用docker swarm leave
命令离开集群:
docker swarm leave
在管理节点上使用docker swarm leave --force
命令强制离开并停止集群:
docker swarm leave --force
管理节点和角色
- 查看节点列表:
docker node ls
- 提升节点为管理节点:
docker node promote <节点ID>
- 降级管理节点为工作节点:
docker node demote <节点ID>
创建和管理Swarm服务
创建服务
使用docker service create
命令创建服务:
docker service create --name <服务名> --replicas <副本数量> <镜像>
例如,创建一个运行nginx的服务:
docker service create --name web --replicas 3 -p 80:80 nginx
更新服务
使用docker service update
命令更新服务:
docker service update --replicas <新的副本数量> <服务名>
例如,将web服务的副本数量更新为5:
docker service update --replicas 5 web
删除服务
使用docker service rm
命令删除服务:
docker service rm <服务名>
例如,删除web服务:
docker service rm web
查看服务状态
使用docker service ls
命令查看服务列表:
docker service ls
使用docker service ps
命令查看服务的任务状态:
docker service ps <服务名>
Swarm支持服务的滚动更新,确保应用程序在更新过程中保持高可用性。使用docker service update
命令并指定更新参数:
docker service update --image <新镜像> <服务名>
例如,更新web服务的镜像:
docker service update --image nginx:latest web
如果服务更新出现问题,可以使用docker service rollback
命令回滚到上一个版本:
docker service rollback <服务名>
Swarm支持创建覆盖网络,使容器可以跨主机通信。使用docker network create
命令创建覆盖网络:
docker network create --driver overlay <网络名>
然后在服务创建时指定网络:
docker service create --name <服务名> --network <网络名> <镜像>
Swarm支持配置和密钥管理,确保敏感信息安全地传递给服务。使用docker config
和docker secret
命令管理配置和密钥。
例如,创建一个配置:
echo "my-config-data" | docker config create my-config -
在服务创建时使用配置:
docker service create --name <服务名> --config source=my-config,target=/path/in/container <镜像>
⏰写在最后
Docker作为现代容器化技术的核心,极大地改变了软件开发、测试和部署的方式。
最后我们来个简单的总结,方便大家快速的掌握本文内容,能看到最后的勇士,可以好好记总结部分。
Docker的基础概念
-
容器(Container):轻量级、独立的可执行软件包,包括应用程序及其所有依赖项。
-
镜像(Image):不可变的容器模板,用于创建容器。
-
Docker引擎(Docker Engine):运行Docker容器的核心引擎。
-
Dockerfile:构建Docker镜像的脚本,定义了镜像的构建过程。
Docker的基本操作
-
镜像操作:
-
docker pull
:从Docker Hub拉取镜像。 -
docker build
:根据Dockerfile构建镜像。 -
docker push
:将镜像推送到Docker Hub。 -
容器操作:
-
docker run
:启动容器。 -
docker stop
:停止容器。 -
docker rm
:删除容器。 -
docker exec
:在运行中的容器内执行命令。
数据管理与网络
-
卷(Volume):持久化存储,独立于容器生命周期。
-
创建和管理卷:
docker volume create
、docker volume ls
、docker volume rm
。 -
卷挂载:在
docker run
命令中使用-v
选项。 -
网络(Network):容器之间通信的桥梁。
-
创建和管理网络:
docker network create
、docker network ls
、docker network rm
。 -
网络模式:Bridge、Host、Overlay等。
Docker Compose
-
定义和运行多容器应用:
-
使用YAML文件定义服务、网络和卷。
-
启动和管理服务:
docker-compose up
、docker-compose down
、docker-compose ps
。 -
高级功能:
-
多环境配置:通过多个Compose文件支持不同环境配置。
-
扩展服务:通过
docker-compose scale
扩展服务副本。
Docker Swarm
-
集群管理和编排:
-
初始化Swarm集群:
docker swarm init
。 -
加入和离开集群:
docker swarm join
、docker swarm leave
。 -
管理节点和服务:
docker node
、docker service
。 -
高级功能:
-
服务滚动更新和回滚:
docker service update
、docker service rollback
。 -
配置和密钥管理:
docker config
、docker secret
。 -
多主机网络:通过Overlay网络实现跨主机通信。
`黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
相关文章:
网络工程师需要熟悉Docker吗?我觉得不需要精通,但是得懂基础
你好,这里是网络技术联盟站,我是瑞哥。 Docker,这个字眼大家不陌生吧,不过作为网络工程师可能平时接触不到,如果在看文章的是运维人员,那么70%以上的运维人员都会跟Docker打交道。即使网工用不到ÿ…...
c++初级-2-引用
文章目录 引用一、引用的定义二、引用做函数参数三、引用作为返回对象四、引用的本质五、常量引用 引用 即给一个变量起别名。 一、引用的定义 int a 10;//引用int& b a;cout << "a " << a << endl;cout << "b " <&l…...
如何清理电脑内存?让电脑运行如飞!
电脑内存(RAM)的清理对于维持系统的流畅运行至关重要。随着使用时间的增加,系统内存会被各种应用程序和后台进程占用,导致系统响应变慢,甚至出现卡顿现象。通过有效地清理内存,可以提升电脑的性能ÿ…...
[数据集][目标检测]人员状态跑睡抽烟打电话跌倒检测数据集4943张5类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4943 标注数量(xml文件个数):4943 标注数量(txt文件个数):4943 标注…...
Java8 - Stream API 处理集合数据
Java 8的Stream API提供了一种功能强大的方式来处理集合数据,以函数式和声明式的方式进行操作。Stream API允许您对元素集合执行操作,如过滤、映射和归约,以简洁高效的方式进行处理。 下面是Java 8 Stream API的一些关键特性和概念ÿ…...
漫步5G-A City,一份独属于上海的浪漫
作家亨利詹姆斯曾写道,“城市漫步,让我接触到了这个世界上最好的东西”。 用漫无目的地行走,来体验和观察一座城市,上海凭借丰富多元的文化特质,成为citywalk这种浪漫生活方式的流行地。 无论你是漫步在美术馆、画廊林…...
SpringBoot 如何处理跨域请求?你说的出几种方法?
引言:在现代的Web开发中,跨域请求(Cross-Origin Resource Sharing,CORS)是一个常见的挑战。随着前后端分离架构的流行,前端应用通常运行在一个与后端 API 不同的域名或端口上,这就导致了浏览器的…...
OV SSL证书年度成本概览:为企业安全护航的经济之选
在当今数字化时代,企业网站不仅是品牌展示的窗口,更是与客户沟通的桥梁。然而,随着网络威胁的不断升级,保护网站安全成为了企业不可忽视的任务。SSL证书,特别是OV SSL证书,因其对企业身份的严格验证&#x…...
歌尔气压计SPA06-003在无人机的创新应用
随着科技的不断进步,各类智能设备的功能日益强大,其中气压计作为一种能够测量大气压力的传感器,已被广泛应用于多种领域。歌尔气压计以其高精度、低功耗的特点,在无人机和智能手表上的应用尤为突出,为这两个领域的产品…...
python3多文件操作
1 介绍 有两个.py文件,分别为main.py和util.py,执行main.py时,调用util.py当中的函数。 main.py内容如下, import util if __name__ "__main__":a [3.0,4.0]length util.get_length_from_vec(a)print(f"leng…...
312. 戳气球
312. 戳气球 题目链接:312. 戳气球 代码如下: //参考链接:https://leetcode.cn/problems/burst-balloons/solutions/336390/chuo-qi-qiu-by-leetcode-solution class Solution { public:int maxCoins(vector<int>& nums) {int nnums.size()…...
深入理解C++中的锁
目录 1.基本互斥锁(std::mutex) 2.递归互斥锁(std::recursive_mutex) 3.带超时机制的互斥锁(std::timed_mutex) 4.带超时机制的递归互斥锁(std::recursive_timed_mutex) 5.共享…...
压缩pdf文件大小,压缩pdf文件大小软件哪个好
在数字化时代,PDF文件因其卓越的跨平台兼容性和稳定性而成为工作与学习的好帮手。然而,当PDF文件体积过大时,传输和存储便成了一项挑战。别担心,本文将为你揭秘如何快速压缩PDF文件,让你的文档轻装上路! 压…...
难道 Java 已经过时了?
当一门技术已经存在许多年了,它可能会失去竞争力,而后黯然退场,默默地离开,这对大部分的人来说就已经算是过时了。 Java 于 1995 年正式上线,至今已经走过了 27 个年头,在众多编程技术里算是年龄比较大的语…...
华为OD机考题(HJ32 密码截取)
前言 经过前期的数据结构和算法学习,开始以OD机考题作为练习题,继续加强下熟练程度。有需要的可以同步练习下。 描述 Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA&…...
【高考志愿】测绘科学与技术
目录 一、专业介绍 1.1 专业概述 1.2 专业方向 1.3 课程内容 二、就业前景 三、报考注意事项 四、测绘科学与技术专业排名 五、职业规划与未来发展 高考志愿选择测绘科学与技术专业,对于许多有志于空间信息技术领域发展的学生来说,无疑是一个极具…...
SpringBoot异步接口实现 提升吞吐量
前言 Servlet 3.0之前:HTTP请求由单一线程处理。Servlet 3.0之后:支持异步处理,提高系统吞吐量。 SpringBoot 异步接口实现方式 AsyncContext:Servlet层级,不常用。Callable:使用java.util.concurrent.C…...
C语言快速学习笔记
学习网站:C 语言教程 | 菜鸟教程 (runoob.com)C 语言教程 | 菜鸟教程 (runoob.com)C 语言教程 | 菜鸟教程 (runoob.com) 这个网站知识完整,讲解清晰。 在线C语言编程工具:菜鸟教程在线编辑器 (runoob.com) 国外学习网站:C语言介…...
如何选择易用性高的项目管理软件?
随着项目管理在各行各业的广泛应用,选择一款易用性高的项目管理软件变得越来越重要。易用性高的软件可以帮助企业提高工作效率,降低管理成本,同时还能提升团队之间的协作能力。那么,如何选择一款易用性高的项目管理软件呢…...
vue3基于uni-app 封装小程序request请求
const BASE_URL https://47.122.26.142; // 替换为你的 API 基础 URL const token uni.getStorageSync(token);const request (url: string, method: any, data {}, headers {}) > {return new Promise((resolve, reject) > {uni.request({url: ${BASE_URL}${url},m…...
YOLO在目标检测与视频轨迹追踪中的应用
YOLO在目标检测与视频轨迹追踪中的应用 引言 在计算机视觉领域,目标检测与视频轨迹追踪是两个至关重要的研究方向。随着深度学习技术的飞速发展,尤其是卷积神经网络(CNN)的广泛应用,目标检测与视频轨迹追踪的性能得到…...
版本控制系统:Git 纯应用(持续更新)
基本操作 ctrl上行键:上次代码 本地仓库:Git init 新建文件:touch xxxx.xxx 查看状态:Git status 文件从工作区——暂存区:Git add ./文件名(.是通配符代表所有) 暂存区——仓库:Git commit -m &…...
从0开始搭建vue项目
#先查下电脑有没有安装过node和npm node -v npm -v #安装vue npm install -g vue #安装webpack npm install webpack -g 都安装好后,进入你想创建的文件夹内 创建名字:vue init webpack <project_name> 就默认回车 然后根据项目需求Y/n 比如…...
Java框架常见面试题
在Java框架面试中,面试官通常会考察候选人对常见Java框架的理解、使用经验以及解决问题的能力。以下是一些常见的Java框架面试题及其详细回答: 1. Spring框架相关问题 问题:Spring框架的核心组件有哪些?它们各自的作用是什么&am…...
linux c 应用编程定时器函数
在 Linux C 应用编程中,对于多线程编程中的定时器函数使用,通常可以借助 pthread 库和系统提供的定时器相关的函数来实现。 首先,常见的定时器函数有 setitimer() 和 alarm() 。setitimer() 函数可以更精确地设置定时器,它可以设…...
设备调试上位机GUI
C Fast Qt C 前端 原来真的不需要在 design 上画来画去,有chat-gpt 那里不知道问哪里 全是组件拼起来的,不需要画,最后发现其实也是定式模式,跟着AI 学套路 最终前端界面 鼠标邮件绑定几个功能 太nice 了 在再加一个全局的日志模块 yyds MVC 的架构, 视图…...
项目管理系统厂商:奥博思发布《项目管理系统助力 IPD 高效落地》演讲
一场题为:“标准为基,项目之上 ,持续提升 PMO 卓越中心”的全国 PMO 专业人士年度盛会在京召开。会议围绕 PMO 卓越中心能力提升、项目管理标准化、项目管理体系建设等核心话题力邀业界专家、卓有建树的 PMO 实践精英来演讲、交流、分享。 奥…...
Java项目总结1
1.什么是面向对象(此对象非彼对象) “面向对象的方法主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用…...
Java中的类加载机制详解
Java中的类加载机制详解 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 类加载机制概述 在Java中,类加载机制是Java虚拟机(JVM)将.class文件加载到内存中并转换…...
SwiftUI 中 Grid 内多个 NavigationLink 同时发生导航之诡异问题的解决
问题现象 不知小伙伴们发现了没有?在 SwiftUI 中如果有多个 NavigationLink 视图嵌入在 Grid(包括 LazyVGrid 和 LazyHGrid)容器中,点击其中任意一个 NavigationLink 都会导致所有导航一起发生。 如上图所示,点击 Grid 中任何一个 NavigationLink,所有 NavigationLink 都…...
51单片机第21步_将TIM0用作两个8位定时器同时将TIM1用作波特率发生器
本章重点讲解将TIM0用作两个8位定时器,同时将TIM1用作波特率发生器。 当定时器T0在方式3时,T1不能产生中断,但可以正常工作在方式0、1、2下,大多数情况下,T1将用作串口的波特率发生器。 1、定时器0工作在模式3框图&a…...
API-元素尺寸与位置
学习目标: 掌握元素尺寸与位置 学习内容: 元素尺寸与位置仿京东固定导航栏案例实现bilibili点击小滑块移动效果 元素尺寸与位置: 使用场景: 前面案例滚动多少距离,都是我们自己算的,最好是页面滚动到某个…...
C语言中的基础指针操作
在C语言中,指针是一个非常重要的概念,它提供了直接访问内存地址的能力。指针变量用于存储内存地址,而不是数据值,在某种意义上和门牌号具有相似含义:指针是一个变量,其存储的是另一个变量的内存地址&#x…...
LabVIEW环境下OCR文字识别的实现策略与挑战解析
引言 在自动化测试领域,OCR(Optical Character Recognition,光学字符识别)技术扮演着重要角色,它能够将图像中的文字转换成机器可编辑的格式。对于使用LabVIEW约5个月,主要进行仪器控制与数据采集的你而言…...
中英双语介绍美国的州:堪萨斯州(Kansas)
中文版 堪萨斯州简介 堪萨斯州(Kansas)位于美国中部,以其广阔的平原、丰富的农业资源和多样的文化遗产而著称。以下是对堪萨斯州的详细介绍,包括其地理位置、人口、经济、教育、文化和主要城市。 地理位置 堪萨斯州位于美国中…...
信息收集---端口服务信息收集
1. 什么是端口 是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45…...
Python知识点背诵手册,超详细知识梳理
一、手册介绍 《Python知识点背诵手册》是一份详尽的Python学习资料,旨在帮助学习者系统地掌握Python语言的基础知识和进阶技能。该手册将Python的所有关键语法和概念进行了精炼的总结,并以易于理解和记忆的方式呈现。以下是手册的主要特点和内容概述&a…...
【Pytorch实用教程】如何在多个GPU上使用分布式数据并行进行训练模型
文章目录 1. 代码(可直接运行,含随机生成的训练数据)2. 代码的详细解释2.1. 导入必要的库和模块2.2. 设置每个进程的初始设置2.3. 随机生成数据集类 `RandomDataset`2.4. 训练函数 `train`1. 代码(可直接运行,含随机生成的训练数据) 以下是一个基于PyTorch的多GPU分布式…...
PIL,OpenCV,Pytorch处理图像时的通道顺序(颜色,长宽深)
项目颜色通道顺序长宽通道顺序数据类型取值范围PILRGBHWCndarray0-255 (byte)OpenCVBGRHWCndarray0-255 (byte)PyTorchRGB/BGR (取决于如何读取)(N)CHWtensor0-1 (float, 标准化后); 0-255 (int, 未标准化) 注意以下几点: 颜色通道顺序:PIL默认使用RGB顺…...
经纬恒润亮相2024世界智能产业博览会
近日,以“智行天下 能动未来”为主题的2024世界智能产业博览会(以下简称“智博会”)在国家会展中心(天津)成功举办。本次智博会上,经纬恒润自主研发的汽车电子产品联合天津(西青)国家…...
Python序列化和反序列化
一.序列化和反序列化 在Python中,序列化(Serialization)和反序列化(Deserialization)是处理对象数据的过程,主要用于对象的存储或网络传输。 序列化(Serialization) 序列化是将Pyth…...
Stream toArray 好过collect
toArray 比collect 更好用,这样就不需要判断Null。 if(_user.getUserRole()!null) {_user.setRole(_roleList.stream().filter(_e->_e.getRoleId()_user.getUserRole()).toArray(Role[]::new)[0]); } if(_user.getUserRole()!null) {_user.setRole(_roleList.s…...
qt/c++/mysql教务管理系统
简介 qt/c/mysql教务管理系统 学生端,教师端,管理员端 演示 qt/c/mysql教务管理系统 源码获取 printf("白嫖勿扰,需要的加v%s","ywj17347418171");...
Echarts公共方法
Vue引入Echarts install 1.安装Echartsnpm install echarts --save 2.项目全局引入形式--#main.js 全局引入形式import * as echarts from "echarts"Vue.prototype.$echarts echarts 公共方法JS /*** author: wangjie* description: 通用echarts图表封装* date: …...
鸿蒙学习(二)
文章目录 1、弹窗2、走马灯(实现轮播图效果)3、注解6、多选框、单选框7、Stack8、TextTimer9、DatePicker 1、弹窗 显示提示信息或者用于用户交互 导入模块 prompt 接口 showToast:显示toast showDialog:显示对话框 showContextMenu:显示上下文菜单 sh…...
企业机构营销目前106短信群发还有用吗?此文告诉你该如何抉择!
在当今竞争激烈的企业营销环境中,106短信群发平台依然是众多企业机构青睐的营销工具之一。尽管互联网技术的发展带来了多样化的沟通方式,但106短信群发凭借其直达性强、成本低廉、覆盖广泛等优势,仍然保持着不错的营销效果。然而,…...
DJYGUI AI低代码图形编程开发平台:开启嵌入式软件图形编程新纪元
在科技高速发展的当今时代,软件开发行业对创新和高效的需求日益增长。DJYGUI AI低代码图形编程开发平台的出现,为智能屏、物联屏、串口屏等嵌入式显示设备领域带来了全新的机遇。该平台由都江堰操作系统 AI 代码自动生成平台研发,具有显著的优…...
为什么不能在foreach中删除元素
文章目录 快速失败机制(fail-fast)for-each删除元素为什么报错原因分析逻辑分析 如何正确的删除元素remove 后 breakfor 循环使用 Iterator 总结 快速失败机制(fail-fast) In systems design, a fail-fast system is one which i…...
python学习-tuple及str
为什么需要元组 定义元组 元组的相关操作 元组的相关操作 - 注意事项 元组的特点 字符串 字符串的下标(索引) 同元组一样,字符串是一个:无法修改的数据容器。 如果必须要修改字符串,只能得到一个新的字符串ÿ…...
Python深度理解系列之【排序算法——冒泡排序】
读者大大们好呀!!!☀️☀️☀️ 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️木道寻的主页 文章目录 🔥前言🚀冒泡排序python实现算法实现图形化算法展示 ⭐️⭐️⭐️总结 🔥前…...
【Unity 3D角色移动】
【Unity 3D角色移动】 在Unity 3D中实现角色移动通常涉及到几个关键步骤,包括设置角色的物理属性、处理输入、更新角色的位置以及动画同步。下面是实现基本3D角色移动的步骤和示例代码: 步骤1:设置角色的物理属性 角色通常使用Character Co…...
qt 开发笔记堆栈布局的应用
1.概要 画面中有一处位置,有个按钮点击后,这片位置完全换成另一个画面,这中情况特别适合用堆栈布局。 //堆栈布局的应用 #include <QStackedLayout> QStackedLayout *layout new QStackedLayout(this); layout->setCurrentIndex(…...
图解 Kafka 架构
写在前面 Kafka 是一个可横向扩展,高可靠的实时消息中间件,常用于服务解耦、流量削峰。 好像是 LinkedIn 团队开发的,后面捐赠给apache基金会了。 kafka 总体架构图 Producer:生产者,消息的产生者,是消息的…...
Toast.success is not a function
参考:解决vue3中按需引用Toast,使用Toast方法时报is not a function问题_toast is not a function-CSDN博客 说一下自己的项目: 项目背景是伙伴匹配系统 在做根据标签搜索用户的前后端联调的过程中: 发现了这个问题: 从页面的…...
ubuntu apt命令 出现红色弹框 Daemons using outdated libraries
1. 弹框没截图,是因为ubuntu22.04一个新特性导致的,由 needrestart 命令触发,默认情况是交互性质的,也就是会中断在这里需要手动要处理提示。 2. 修改/etc/needrestart/needrestart.conf 文件,将 #$nrconf{restart} …...
算法练习——数素数
题目 题目描述 令Pi表示第i(i从1开始计数)个素数。现任给两个正整数M < N < 10000,请输出PM到PN的所有素数。 输入描述: 输入在一行中给出M和N,其间以空格分隔。 输出描述: 输出从PM到PN的所有素数,每10个…...
简化销售流程升级购物体验电商网购节创新举措促消费
今年“618电商网购节”,各大平台加强创新、简化流程,积极疏通消费堵点。多位专家表示,随着消费品以旧换新等政策落地,加上电商平台的创新举措,今年电商网购节持续激发消费市场活力,推动消费进一步回升。人工智能加快渗透取消预售模式是今年“618电商网购节”的最大变化。…...
马斯克:若苹果在操作系统层面集成OpenAI,我将禁止苹果设备进入我的公
文|编辑部整理 编辑|大风马斯克:若苹果在操作系统层面集成OpenAI,我将禁止苹果设备进入我的公司马斯克表示,如果苹果与OpenAI合作,在操作系统层面整合ChatGPT,我将禁止那些携带苹果设备的人来访。届时,访客将需要在公司大门口接受针对苹果设备的设备检查。马斯克提及,“…...
24万落地,德系标杆SUV上新,标配丰富,诚意不输国产!
5月30日晚,上汽大众途观L Pro正式上市,全系共推出6款车型,售价23.68-26.68万元。新车采用全新外观设计,并且在智能化方面进行了升级,为了更好满足中国消费者需求,途观L Pro提供了部分中国消费者独享配置,并且与国内例如科大讯飞、大疆车载等企业合作,提供更适合中国消费…...
姜堰开发区紧扣“三个一”扎实开展防灾减灾宣传活动
近日,姜堰经济开发区结合区域特点,围绕“人人讲安全、个个会应急——着力提升基层防灾避险能力”宣传主题,开展“三个一”宣传活动,包括“一场防灾减灾科普宣教、一次防灾减灾应急演练和一次主题宣传进社区活动”,以点带面,全方位宣传灾害知识和防范技能,提升公众应急避…...
win10如何查看本机ip地址?三招搞定,快来试试吧
在数字化时代,IP地址作为网络设备的唯一标识,对于计算机使用者来说具有重要意义。无论是为了进行网络设置、远程连接,还是解决网络问题,了解如何查看本机IP地址都是一项必备技能。对于使用Windows 10操作系统的用户来说࿰…...
前端Vue小兔鲜儿电商项目实战Day01
一、项目介绍 1. 项目技术栈 2. 项目规模 3. 项目亮点 4. 课程安排 5. 适合人群 二、Vue3组合式API体验 1. 通过一个Counter案例体验Vue3新引入的组合式API ①Vue2的代码 <template><button click"addCount"> {{ count }}</button> </templ…...