深入讲解 Docker 及实践

Docker 是现代化应用开发、测试和生产环境部署中不可或缺的工具。它能够为开发人员提供与生产环境一致的开发环境,同时支持高效的容器化部署、资源隔离、容器编排等高级功能。尤其在微服务架构和云原生应用中,Docker 更是提供了简化的流程和高效的可扩展性。

一、Docker 基本概念与工作原理回顾

1.1 Docker 架构解析

Docker 架构包括两部分:Docker ClientDocker Daemon,以及 Docker RegistryDocker Container

  • Docker Daemon (dockerd):是 Docker 的后台服务,负责管理容器的生命周期,处理所有与 Docker 客户端交互的请求,管理容器、镜像、网络和卷等资源。
  • Docker Client:用户与 Docker Daemon 交互的工具,可以是命令行工具(如 docker 命令)或程序化 API。
  • Docker Registry:存储 Docker 镜像的地方,最常用的是 Docker Hub,用户可以从中拉取镜像,也可以上传自定义镜像。
  • Docker Container:容器是镜像的运行时实例,它通过 Docker Daemon 启动,并在一个隔离的环境中运行应用。

1.2 Docker 镜像与容器的关系

  • 镜像 是只读的,包含运行应用所需的所有文件系统和依赖,容器是镜像的一个运行实例,包含一个可写层,能够对文件进行修改。
  • 容器之间的文件系统是独立的,即使多个容器使用相同的镜像,它们的文件系统也不会相互干扰。

二、实践:端口映射、文件映射、替代本地开发环境

2.1 端口映射

在 Docker 中,容器和宿主机之间的网络是隔离的,因此如果我们希望容器中的服务能够被宿主机或外部网络访问,就必须配置端口映射。端口映射的格式是 -p <host_port>:<container_port>,用于将宿主机的端口映射到容器内的端口。

示例:Flask Web 应用端口映射

假设我们已经通过 Dockerfile 构建了一个 Python Flask 应用,现在需要将容器内的 Flask 应用端口(5000)映射到宿主机的 5000 端口:

docker run -d -p 5000:5000 flask-app
  • -p 5000:5000:宿主机的 5000 端口映射到容器的 5000 端口,意味着宿主机访问 http://localhost:5000 时,实际访问的是容器内的 Flask 应用。

2.2 文件映射(Volume Mapping)

容器中的数据存储是临时的,容器停止或删除后,容器内的数据会丢失。因此,文件映射 是一种将宿主机的目录与容器内的目录进行绑定的机制,用于持久化数据或共享文件。

示例:MySQL 数据持久化

假设你正在运行一个 MySQL 容器,并希望将容器中的数据库文件持久化到宿主机的 /data/mysql 目录,防止容器删除后数据丢失。

docker run -d -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:latest
  • -v /data/mysql:/var/lib/mysql:将宿主机的 /data/mysql 目录挂载到容器内的 /var/lib/mysql 目录,这样即使容器被删除,数据也会保留在宿主机上。

2.3 使用 Docker 环境替代本地开发环境

Docker 允许我们在本地快速搭建一个与生产环境相同的开发环境,避免了开发人员由于操作系统差异、软件版本不同等问题产生的“在我电脑上能跑”问题。

示例:使用 Docker Compose 配置多容器开发环境

假设我们有一个 Node.js 应用和一个 PostgreSQL 数据库,需要在本地开发环境中一起使用。我们可以使用 Docker Compose 来定义和管理这两个容器。

  1. 创建 docker-compose.yml 文件

    version: "3"
    services:app:image: node:14working_dir: /appvolumes:- .:/appcommand: npm startports:- "3000:3000"db:image: postgresenvironment:POSTGRES_PASSWORD: examplevolumes:- db-data:/var/lib/postgresql/dataports:- "5432:5432"volumes:db-data:
    
    • app 服务使用 Node.js 镜像,并挂载本地代码到 /app
    • db 服务使用 PostgreSQL 镜像,定义了数据库密码并将数据存储到宿主机的卷中。
  2. 启动环境

    在项目根目录下运行以下命令:

    docker-compose up
    

    这将启动 Node.js 应用和 PostgreSQL 数据库容器,并确保它们能够一起工作。

  3. 开发与调试

    • 在本地开发过程中,所有修改的代码会实时反映到容器内,避免了环境不一致的问题。
    • 如果你需要对数据库进行开发,可以直接在 db 服务中进行操作。

2.4 Docker 环境与生产环境替换

通过使用 Docker,开发人员能够在本地和生产环境中保持一致的环境。Docker 提供的隔离和资源管理功能,确保了开发、测试和生产环境中的行为一致。

  • 本地开发环境:通过 Docker Compose 可以快速搭建本地开发环境,包含应用服务和数据库等。
  • 生产环境:在生产环境中,可以使用 Docker Swarm 或 Kubernetes 来进行容器编排和自动化部署。

2.5 横向扩展部署与负载均衡

在应用流量增长时,我们需要通过横向扩展来扩容服务。Docker 容器非常适合这种扩展方式,可以通过 Docker Compose、Docker Swarm 或 Kubernetes 来实现。

使用 Docker Compose 扩展服务

通过 Docker Compose,我们可以轻松增加容器副本,确保高可用性和负载均衡。

version: "3"
services:web:image: nginxdeploy:replicas: 3ports:- "80:80"
  • deploy.replicas:指定服务的副本数量,此例中 nginx 服务有 3 个副本。
  • 这样设置后,Docker Compose 会启动 3 个 nginx 容器实例,确保负载均衡和高可用性。
使用 Docker Swarm 扩展服务
  1. 初始化 Swarm 集群

    在主节点上运行以下命令来初始化 Swarm:

    docker swarm init
    
  2. 创建服务并扩展

    在 Swarm 集群中创建一个 Web 服务并设置 3 个副本:

    docker service create --name webapp --replicas 3 -p 80:80 nginx
    

    这将启动一个包含 3 个副本的 nginx 服务,Swarm 会自动处理负载均衡。

  3. 管理服务

    使用 docker service 命令来管理服务副本、扩展或缩减容器数量:

    docker service scale webapp=5
    

    该命令将 webapp 服务的副本数扩展到 5 个。

2.6 Kubernetes 横向扩展

Kubernetes 提供了更强大的容器编排和横向扩展功能,支持自动伸缩、健康检查、负载均衡等。

示例:使用 Kubernetes 扩展服务
  1. 部署 Pod

    通过 kubectl 创建一个包含多个副本的 Pod 服务:

    apiVersion: apps/v1
    kind: Deployment
    metadata:name: nginx-deployment
    spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latest
使用 `kubectl apply -f nginx-deployment.yaml` 创建服务,Kubernetes 会自动管理多个副本的容器。2. **自动扩展**:Kubernetes 可以根据负载自动扩展容器副本:```bashkubectl autoscale deployment nginx-deployment --min=1 --max=10 --cpu-percent=50

当容器的 CPU 使用率超过 50% 时,Kubernetes 会自动增加容器副本。


非常感谢你的耐心和反馈,我会继续深入讲解 Docker 的实践应用,并涵盖更多高级使用场景。我们接下来将继续深入探讨 Docker 的高级功能,包括:多环境配置、持久化存储、日志管理、安全性、网络管理、Docker Compose 和 Kubernetes 的高级用法 等。


三、Docker 高级功能解析与实践

3.1 多环境配置与管理

在开发中,我们常常需要处理不同环境(如开发环境、测试环境、生产环境)的配置和管理。Docker 使得这些环境管理变得更加简便,通过 Docker Compose 和多环境配置,我们可以为不同环境提供不同的配置文件或变量。

3.1.1 使用 Docker Compose 管理多环境配置

Docker Compose 使得我们能够在一个 YAML 文件中定义多个服务,同时也支持在不同的环境中使用不同的配置文件。通过 docker-compose.override.yml 文件,可以实现不同环境下的配置覆盖。

示例:开发与生产环境的多配置管理

  1. 基础的 docker-compose.yml 配置

    version: "3"
    services:app:image: node:14working_dir: /appvolumes:- .:/appports:- "3000:3000"
    
  2. 开发环境覆盖配置 docker-compose.override.yml

    在开发环境下,我们可能需要启用一些特定的配置,比如将开发代码挂载到容器中,开启调试模式等:

    version: "3"
    services:app:environment:- NODE_ENV=developmentvolumes:- .:/appports:- "3000:3000"
    
  3. 生产环境配置 docker-compose.prod.yml

    在生产环境中,我们可能希望禁用调试信息,使用生产版本的镜像,并连接到真实的数据库服务:

    version: "3"
    services:app:image: my-app-prodenvironment:- NODE_ENV=productionports:- "80:3000"networks:- prod-networknetworks:prod-network:driver: bridge
    
  4. 使用不同的配置启动 Docker Compose

    • 在开发环境中:

      docker-compose up
      
    • 在生产环境中:

      docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
      

通过这种方式,我们可以根据不同的环境要求,动态调整服务的配置。

3.2 持久化存储:管理数据卷

Docker 默认情况下是无状态的,也就是说,当容器删除时,容器内的数据会丢失。为了持久化数据,我们使用 Docker Volumes 来挂载宿主机的文件系统或使用外部存储服务来保存数据。

3.2.1 创建与使用数据卷(Volumes)
  1. 创建一个名为 my-volume 的卷

    docker volume create my-volume
    
  2. 将卷挂载到容器中

    假设我们运行一个 MySQL 容器,并希望将数据库的数据存储在 my-volume 卷中:

    docker run -d -v my-volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:latest
    
  3. 查看 Docker 卷

    查看系统中所有的 Docker 卷:

    docker volume ls
    
  4. 数据卷备份与恢复

    • 备份卷

      docker run --rm -v my-volume:/volume -v $(pwd):/backup busybox tar czf /backup/backup.tar.gz /volume
      
    • 恢复卷

      docker run --rm -v my-volume:/volume -v $(pwd):/backup busybox tar xzf /backup/backup.tar.gz -C /volume
      
3.2.2 使用绑定挂载(Bind Mounts)

除了数据卷,Docker 还支持 绑定挂载,允许你将宿主机的具体文件或目录挂载到容器中。它特别适用于开发环境,可以实时同步本地文件和容器中的文件。

  1. 示例:将宿主机目录挂载到容器中

    docker run -d -v /path/on/host:/path/in/container my-app
    
  2. 实时修改本地文件

    使用绑定挂载时,容器内的文件和宿主机的文件实时同步。比如,在开发 Web 应用时,你可以编辑宿主机上的文件,容器内的应用自动感知这些变化,无需重新构建镜像。

3.3 Docker 日志管理

在容器化的应用中,日志管理尤为重要,尤其是在生产环境中。Docker 提供了多种日志驱动来帮助收集和管理容器日志。

3.3.1 使用 Docker 的默认日志驱动
  1. 查看容器日志

    使用 docker logs 查看容器的标准输出和标准错误日志:

    docker logs <container_id>
    
  2. 查看实时日志

    docker logs -f <container_id>
    
3.3.2 配置 Docker 日志驱动

Docker 支持多种日志驱动,如 json-file(默认)、syslogfluentdawslogs 等,可以通过设置容器的 --log-driver 参数来选择不同的日志存储方式。

例如,将日志发送到 syslog

docker run --log-driver=syslog my-app
3.3.3 集成日志管理工具

在生产环境中,容器的日志量通常较大,使用日志管理工具(如 ELK Stack 或 Fluentd)来集中管理日志非常重要。你可以通过配置 Docker 日志驱动,将日志发送到远程服务器或者日志分析平台。

3.4 Docker 网络管理与服务发现

Docker 提供了多种网络模式和服务发现机制,确保容器之间能够高效、安全地通信。

3.4.1 Docker 网络模式
  • bridge(默认模式):为容器创建一个私有的网络接口,并通过宿主机与外部通信。
  • host:容器直接使用宿主机的网络接口,不进行网络隔离。
  • none:容器没有网络接口。
  • container:将容器的网络接口与另一个容器共享。
3.4.2 Docker Compose 中的网络配置

在 Docker Compose 中,服务间的网络是自动创建的,但我们也可以手动配置网络。

示例:创建自定义网络并配置服务

version: "3"
services:app:image: node:14networks:- my-networkdb:image: postgresnetworks:- my-networknetworks:my-network:driver: bridge

在上面的配置中,appdb 服务都连接到了同一个名为 my-network 的自定义网络。

3.4.3 服务发现与负载均衡

在 Docker Compose 中,服务名称(如 appdb)自动成为 DNS 名称,可以通过这些名称进行服务间通信。Docker Compose 会自动处理负载均衡。

例如,容器 app 可以通过 http://db 访问容器 db 提供的服务。

3.5 Docker 安全性

Docker 提供了一些安全性措施来保证容器的隔离性和宿主机的安全。理解 Docker 安全最佳实践,能够确保你在容器化环境中的应用不受攻击。

3.5.1 用户与权限管理

Docker 默认运行在 root 用户下,因此建议使用 非 root 用户 来运行容器。你可以通过以下方式在 Dockerfile 中创建非 root 用户:

FROM node:14
RUN useradd -ms /bin/bash myuser
USER myuser
3.5.2 使用 Seccomp 和 AppArmor
  • Seccomp:通过配置 seccomp 配置文件来限制容器可以使用的系统调用,从而增加安全性。
  • AppArmor:可以为容器配置安全策略,限制容器访问宿主机资源的权限。
3.5.3 使用 Docker Content Trust

启用 Docker Content Trust (DCT) 可以确保你从 Docker Hub 拉取的镜像是经过签名和验证的,避免使用不安全的镜像。

export DOCKER_CONTENT_TRUST=1
docker pull my-image

四、Kubernetes 高级用法与扩展

4.1 Kubernetes 的容器编排与服务发现

Kubernetes 提供了更加复杂的容器编排和自动扩展功能,支持服务发现、负载均衡、自动扩展等多种功能。在 Docker Sw

arm 和 Kubernetes 中,横向扩展的操作基本类似,Kubernetes 的优势在于支持大规模分布式系统的管理和调度。

4.2 Kubernetes 的服务和网络

  • Pod:Kubernetes 中的最小部署单元,可以包含一个或多个容器。
  • Deployment:Kubernetes 用来管理应用生命周期的资源对象,能够自动进行副本管理、扩展、更新。
  • Service:Kubernetes 内部的负载均衡组件,负责将流量路由到不同的 Pod。

通过 Kubernetes 可以方便地进行自动化部署、扩展和高可用性管理,特别适合大型应用和微服务架构。


好的,让我们继续深入探讨 Docker 和 Kubernetes 的高级功能以及它们在实际开发、运维中的应用。接下来将包括 Docker 网络与安全管理Kubernetes 高级操作容器的资源限制与调度多云与跨云部署 等内容,进一步扩展实践场景和解决方案。


五、Docker 网络与安全管理

5.1 Docker 网络深入剖析

Docker 提供了多种网络模式,以确保容器之间能够有效地进行通信和隔离。在容器化的环境中,理解和配置网络至关重要,尤其是在复杂的多容器应用中。以下是 Docker 网络的几种常见模式和高级用法。

5.1.1 网络模式:Bridge、Host、Overlay
  1. Bridge 网络:这是 Docker 默认的网络模式,适用于单机 Docker 环境。Docker 会为每个容器分配一个虚拟网卡,所有容器通过 Docker 的虚拟网络桥接在一起,形成一个内部的私有网络,容器间可以通过 IP 地址通信。

  2. Host 网络:容器直接使用宿主机的网络栈,在这种模式下,容器不会被隔离在一个独立的网络命名空间内。此模式适用于高性能的场景,因为容器与宿主机共享网络堆栈,但也会牺牲隔离性。

  3. Overlay 网络:适用于多主机容器通信,Docker Swarm 和 Kubernetes 都使用 Overlay 网络来跨多个主机连接容器。通过 Overlay 网络,容器可以在不同的宿主机上通信,像在同一个网络中一样。

5.1.2 Docker Compose 中的网络配置

在 Docker Compose 中,可以显式指定容器使用的网络,或者让 Compose 自动创建网络。下面是一个多容器应用的 Docker Compose 配置示例,包含自定义网络。

version: '3'
services:web:image: nginxnetworks:- frontendapp:image: my-appnetworks:- backenddb:image: postgresnetworks:- backendnetworks:frontend:driver: bridgebackend:driver: overlay

在此例中,frontendbackend 是两个独立的网络,web 服务连接 frontend 网络,而 appdb 服务连接 backend 网络。Docker 会在运行时自动为每个网络分配 IP 地址,并管理网络流量。

5.1.3 Docker 网络插件

Docker 支持通过插件扩展网络功能,可以集成第三方网络插件,如 WeaveCalicoCilium 等,来满足更复杂的网络需求。例如,Calico 插件不仅提供容器网络,还提供基于 IP 的安全策略。

5.1.4 容器间通信与 DNS

Docker 默认会为每个容器分配一个 DNS 名称,容器可以通过这些 DNS 名称互相通信。对于多容器应用,容器间的通信通常通过服务名(如在 Docker Compose 中定义的服务名)来访问。

例如,假设你在 Docker Compose 配置文件中定义了一个 db 服务,web 服务可以通过 db:5432 来访问数据库,而不需要通过 IP 地址。

5.1.5 Docker 网络隔离与防火墙

对于多租户环境或需要严格隔离的场景,Docker 提供了网络隔离功能。通过 Docker 的网络管理工具,我们可以为不同的容器配置不同的网络,并应用防火墙规则,限制容器之间的通信。

docker network create --driver bridge --subnet 172.18.0.0/16 mynetwork

此命令创建了一个自定义桥接网络 mynetwork,并为容器分配了 172.18.0.0/16 的子网。可以根据需要配置防火墙规则和网络访问控制,确保容器的安全性。

5.2 Docker 安全性深入剖析

容器的安全性一直是 Docker 技术中关注的重点,尤其在生产环境中。以下是一些提升 Docker 安全性的最佳实践。

5.2.1 容器运行时安全:限制容器权限

默认情况下,Docker 容器会以 root 用户运行,这可能会带来安全风险。为降低容器中运行的进程的权限,可以通过以下方式配置容器:

  1. 以非 root 用户运行容器

    在 Dockerfile 中创建一个非 root 用户,并指定该用户运行应用:

    FROM node:14
    RUN useradd -ms /bin/bash myuser
    USER myuser
    
  2. 使用 --user 参数运行容器

    docker run --user 1001:1001 myapp
    

    这将确保容器中的应用以非 root 用户运行,从而避免容器内进程拥有过高的权限。

5.2.2 容器隔离:使用 SELinux 或 AppArmor
  • SELinuxAppArmor 是 Linux 内核中的安全模块,用于强制访问控制。Docker 可以与这些安全模块集成,为容器提供更强的安全隔离。例如,通过配置 AppArmor 策略来限制容器访问主机的敏感资源。
5.2.3 使用 Docker Content Trust(DCT)

启用 Docker Content Trust 可以确保拉取的镜像是经过签名的,避免从不可信的源拉取恶意镜像。

export DOCKER_CONTENT_TRUST=1
docker pull my-app

启用 DCT 后,Docker 会强制要求镜像签名,只有经过验证的镜像才会被拉取。

5.2.4 资源限制与审计

通过 Docker 配置资源限制(如 CPU、内存)和审计策略,可以进一步提高容器的安全性。例如,使用 --memory--cpu-shares 参数限制容器的资源使用,避免容器占用过多资源影响宿主机和其他容器。

docker run --memory="512m" --cpu-shares=512 myapp

5.3 Docker 与多云部署

随着云计算的发展,越来越多的公司采用多云架构来提高服务的可靠性、可用性和成本效益。Docker 在多云环境中的部署和管理也越来越重要。

5.3.1 Docker Swarm 与 Kubernetes 多云支持
  • Docker Swarm:Docker 原生支持的集群管理工具,能够在多个云平台上协调管理容器。Docker Swarm 可以通过 overlay 网络连接不同云平台上的容器,并支持负载均衡和服务发现。

  • Kubernetes:作为一个更加广泛使用的容器编排工具,Kubernetes 支持跨多个云平台的容器部署和管理。Kubernetes 可以自动检测节点、自动扩展服务,并支持横向扩展容器。

5.3.2 跨云部署的挑战与解决方案

跨云部署面临的主要挑战包括网络互通、存储共享、服务发现等问题。解决这些问题的方法包括:

  • 跨云网络连接:使用 VPN 或专用网络连接不同云平台上的容器网络。
  • 云原生存储:使用云提供商的持久化存储解决方案,如 AWS EBS、Azure Disk 或 Google Persistent Disks。
  • 服务发现与负载均衡:使用 Kubernetes 的服务发现和负载均衡功能,在不同云平台上的容器之间实现自动流量路由。

5.4 Kubernetes 高级操作与资源调度

Kubernetes 作为一种容器编排工具,支持强大的调度功能,能够管理大规模的容器化应用。以下是 Kubernetes 中的一些高级操作和资源调度技巧。

5.4.1 Pod 与容器的资源限制

Kubernetes 允许对每个 Pod 和容器设置资源限制,避免资源争用和 OOM(内存溢出)等问题。

apiVersion: v1
kind: Pod
metadata:name: my-app
spec:containers:- name: my-app-containerimage: my-app:latestresources:requests:memory: "512Mi"cpu: "0.5"limits:memory: "1Gi"cpu: "1"
  • requests:表示容器启动时请求的资源。
  • limits:表示容器可以使用的最大资源。
5.4.2 自动扩展:Horizontal Pod Autoscaler

Kubernetes 提供了 Horizontal Pod Autoscaler,根据 CPU 或内存使用情况自动扩展 Pod 数量。

kubectl autoscale deployment my-app --cpu-percent=50 --min=1 --max=10

此命令会根据 CPU 使用率自动扩展 my-app 部署的副本数,当 CPU 使用率超过 50% 时,Kubernetes 会

增加副本数,最多扩展到 10 个副本。

5.4.3 自定义调度策略:Affinity 和 Taints/Tolerations

Kubernetes 允许使用 AffinityTaints/Tolerations 来实现容器调度的细粒度控制。

  • Node Affinity:允许指定 Pod 调度到特定类型的节点。
  • Taints/Tolerations:允许为节点设置 污点,只有具备相应 容忍 的 Pod 才能调度到这些节点。
apiVersion: apps/v1
kind: Deployment
metadata:name: my-app
spec:replicas: 3template:spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: "disktype"operator: Invalues:- ssd

以上配置确保 my-app 部署的容器只能在带有 disktype=ssd 标签的节点上运行。


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

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

相关文章

慧集通(DataLinkX)iPaaS集成平台-数据流程之流程透明化调试功能简介

在线运行流程 查看运行状态 流程第一次执行状态显示 流程第二次执行状态显示&#xff08;由于订单已同步到七星ERP中&#xff0c;由于还是这些订单所以第二次同步时就报错了&#xff09; 点击查看节点组件的详细入参与出参信息 U8C销售订单读取组件执行时详情 入参-查询条件…

数据集-目标检测系列- 电话 测数据集 call_phone >> DataBall

数据集-目标检测系列- 电话 测数据集 call DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” 贵在坚持&#xff01; …

【PPTist】公式编辑、插入音视频、添加动画

一、插入公式 点击公式的时候 latexEditorVisible 会变成 true src/views/Editor/CanvasTool/index.vue <Modalv-model:visible"latexEditorVisible" :width"880" ><LaTeXEditor close"latexEditorVisible false"update"data &…

istio-proxy oom问题排查步骤

1. 查看cluster数量 cluster数量太多会导致istio-proxy占用比较大的内存&#xff0c;此时需检查是否dr资源的host设置有配置为* 2. 查看链路数据采样率 若采样率设置过高&#xff0c;在压测时需要很大的内存来维护链路数据。可以调低采样率或增大istio-proxy内存。 检查iop中…

【数据库】四、数据库管理与维护

文章目录 四、数据库管理与维护1 安全性管理2 事务概述3 并发控制4 备份与恢复管理 四、数据库管理与维护 1 安全性管理 安全性管理是指保护数据库&#xff0c;以避免非法用户进行窃取数据、篡改数据、删除数据和破坏数据库结构等操作 三个级别认证&#xff1a; 服务器级别…

rhcsa练习(3)

1 、创建文件命令练习&#xff1a; &#xff08; 1 &#xff09; 在 / 目录下创建一个临时目录 test &#xff1b; mkdir /test &#xff08; 2 &#xff09;在临时目录 test 下创建五个文件&#xff0c;文件名分别为 passwd &#xff0c; group &#xff0c; bashrc &#x…

如何设计一个注册中心?以Zookeeper为例

这是小卷对分布式系统架构学习的第8篇文章&#xff0c;在写第2篇文章已经讲过服务发现了&#xff0c;现在就从组件工作原理入手&#xff0c;讲讲注册中心 以下是面试题&#xff1a; 某团面试官&#xff1a;你来说说怎么设计一个注册中心&#xff1f; 我&#xff1a;注册中心嘛&…

【云商城】高性能门户网构建

第3章 高性能门户网构建 网站门户就是首页 1.OpenResty 百万并发站点架构 ​ 1).OpenResty 特性介绍 ​ 2).搭建OpenResty ​ 3).Web站点动静分离方案剖析 2.Lua语法学习 ​ 1).Lua基本语法 3.多级缓存架构实战 ​ 1).多级缓存架构分析 用户请求网站&#xff0c;最开始…

Cognitive architecture 又是个什么东东?

自Langchain&#xff1a; https://blog.langchain.dev/what-is-a-cognitive-architecture/ https://en.wikipedia.org/wiki/Cognitive_architecture 定义 A cognitive architecture refers to both a theory about the structure of the human mind and to a computational…

js代理模式

允许在不改变原始对象的情况下&#xff0c;通过代理对象来访问原始对象。代理对象可以在访问原始对象之前或之后&#xff0c;添加一些额外的逻辑或功能。 科学上网过程 一般情况下,在访问国外的网站,会显示无法访问 因为在dns解析过程,这些ip被禁止解析,所以显示无法访问 引…

多目标优化算法之一:基于分解的方法

在多目标优化算法中,“基于分解的方法”通常指的是将多目标优化问题(MOP)分解为多个单目标优化子问题,并同时优化这些子问题。这种方法的核心思想是通过引入权重向量或参考点,将多目标问题转化为多个标量优化问题,每个子问题都关注于原始问题的一个特定方面或视角。这样可…

【面试题】技术场景 4、负责项目时遇到的棘手问题及解决方法

工作经验一年以上程序员必问问题 面试题概述 问题为在负责项目时遇到的棘手问题及解决方法&#xff0c;主要考察开发经验与技术水平&#xff0c;回答不佳会影响面试印象。提供四个回答方向&#xff0c;准备其中一个方向即可。 1、设计模式应用方向 以登录为例&#xff0c;未…

uniapp 微信小程序内嵌h5实时通信

描述&#xff1a; 小程序webview内嵌的h5需要向小程序实时发送消息&#xff0c;有人说postMessage可以实现&#xff0c;所以试验一下&#xff0c;结果是实现不了实时&#xff0c;只能在特定时机后退、组件销毁、分享时小程序才能接收到信息&#xff08;小程序为了安全等考虑做了…

matlab编写分段Hermite插值多项式

文章目录 原理使用分段Hermite插值多项式原因公式第一类的两个插值积函数第二类的两个插值积函数 例题法一法二 代码分段 Hermite 插值的思路&#xff1a;分段 Hermite 插值多项式的构造&#xff1a;MATLAB 实现代码&#xff1a;结果如图&#xff1a;注归一化变量的作用&#x…

新时期下k8s 网络插件calico 安装

1、k8s master节点初始化完毕以后一直处于notreadey状态&#xff0c;一直怀疑是安装有问题或者是初始化有问题&#xff08;当然&#xff0c;如果真有问题要先解决这些问题&#xff09;&#xff0c;经过不断探索才发现是网络插件没有安装导致的&#xff0c;根据建议安装calico插…

《解锁图像的语言密码:Image Caption 开源神经网络项目全解析》

《解锁图像的语言密码&#xff1a;Image Caption 开源项目全解析》 一、开篇&#xff1a;AI 看图说话时代来临二、走进 Image Caption 开源世界三、核心技术拆解&#xff1a;AI 如何学会看图说话&#xff08;一&#xff09;深度学习双雄&#xff1a;CNN 与 RNN&#xff08;二&a…

【Maui】动态菜单实现(绑定数据视图)

前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架&#xff0c;用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI&#xff0c;可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。 .NET MAUI 是一款开放源代码应用&#xff0c;是 X…

FreePBX 17 on ubuntu24 with Asterisk 20

版本配置&#xff1a; FreePBX 17&#xff08;最新&#xff09; Asterisk 20&#xff08;最新Asterisk 22&#xff0c;但是FreePBX 17最新只支持Asterisk 21&#xff0c;但是21非LTS版本&#xff0c;所以选择Asterisk 20&#xff09; PHP 8.2 Maria DB (v10.11) Node J…

with as提高sql的执行效率

实战sql with cte(UNIT_ID, UNIT_NAME, PARENT_UNIT_ID, UNIT_CODE ) as (select UNIT_ID, UNIT_NAME, PARENT_UNIT_ID , UNIT_CODEfrom HPFM_UNITunion allselect t.UNIT_ID, t.UNIT_NAME, t.PARENT_UNIT_ID, t.UNIT_CODEfrom HPFM_UNIT tjoin cte on t.PARENT_UNIT_ID cte.U…

G-Star Landscape 2.0 重磅发布,助力开源生态再升级

近日&#xff0c;备受行业瞩目的 G-Star Landscape 迎来了其 2.0 版本的发布&#xff0c;这一成果标志着 GitCode 在开源生态建设方面又取得了重要进展。 G-Star Landscape仓库链接&#xff1a; https://gitcode.com/GitCode-official-team/G-Star-landscape 2024 GitCode 开…