Docker学习
🎉Docker 简介和安装
Docker 是什么
Docker 是一个应用打包、分发、部署的工具 你也可以把它理解为一个轻量的虚拟机
,它只虚拟你软件需要的运行环境,多余的一点都不要, 而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。
本文档课件配套 视频教程
跟普通虚拟机的对比
特性 | 普通虚拟机 | Docker |
---|---|---|
跨平台 | 通常只能在桌面级系统 运行,例如 Windows/Mac,无法在不带图形界面的服务器上运行 | 支持的系统非常多,各类 windows 和 Linux 都支持 |
性能 | 性能损耗大,内存占用高,因为是把整个完整系统都虚拟出来了 | 性能好,只虚拟软件所需运行环境,最大化减少没用的配置 |
自动化 | 需要手动安装所有东西 | 一个命令就可以自动部署好所需环境 |
稳定性 | 稳定性不高,不同系统差异大 | 稳定性好,不同系统都一样部署方式 |
打包、分发、部署
-
打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包
-
分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装
-
部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境,不管是在 Windows/Mac/Linux。
-
Docker 部署的优势
常规应用开发部署方式:自己在 Windows 上开发、测试 --> 到 Linux 服务器配置运行环境部署。
问题:我机器上跑都没问题,怎么到服务器就各种问题了
用 Docker 开发部署流程:自己在 Windows 上开发、测试 --> 打包为 Docker 镜像(可以理解为软件安装包) --> 各种服务器上只需要一个命令部署好
优点:确保了不同机器上跑都是一致的运行环境,不会出现我机器上跑正常,你机器跑就有问题的情况。
例如 易文档,SVNBucket 的私有化部署就是用 Docker,轻松应对客户的各种服务器。
Docker 通常用来做什么
-
应用分发、部署,方便传播给他人安装。特别是开源软件和提供私有部署的应用
-
快速安装测试/学习软件,用完就丢(类似小程序),不把时间浪费在安装软件上。例如 Redis / MongoDB / ElasticSearch / ELK
-
多个版本软件共存,不污染系统,例如 Python2、Python3,Redis4.0,Redis5.0
-
Windows 上体验/学习各种 Linux 系统
重要概念:镜像、容器
镜像:可以理解为软件安装包,可以方便的进行传播和安装。 容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器。
安装
桌面版:Docker Desktop: The #1 Containerization Tool for Developers | Docker 服务器版:Install Docker Engine | Docker Docs
启动报错解决
报错截图
解决方法: 控制面板->程序->启用或关闭 windows 功能,开启 Windows 虚拟化和 Linux 子系统(WSL2)
命令行安装 Linux 内核 wsl.exe --install -d Ubuntu
你也可以打开微软商店 Microsoft Store 搜索 Linux 进行安装,选择一个最新版本的 Ubuntu 或者 Debian 都可以
上面命令很可能你安装不了,微软商店你也可能打不开,如果遇到这个问题,参考:Microsoft Store微软应用商店打不开怎么办?完美解决方案!_微软商店打不开-CSDN博客
设置开机启动 Hypervisor bcdedit /set hypervisorlaunchtype auto
注意要用管理员权限打开 PowerShell
设置默认使用版本2 wsl.exe --set-default-version 2
查看 WSL 是否安装正确 wsl.exe --list --verbose
应该如下图,可以看到一个 Linux 系统,名字你的不一定跟我的一样,看你安装的是什么版本。 并且 VERSION 是 2
确保 BIOS 已开启虚拟化,下图检查是否已开启好
如果是已禁用,请在开机时按 F2 进入 BIOS 开启一下,不会设置的可以网上搜索下自己主板的设置方法,Intel 和 AMD 的设置可能稍有不同
出现下图错误,点击链接安装最新版本的 WSL2 https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
镜像加速源
镜像加速器 | 镜像加速器地址 |
---|---|
Docker 中国官方镜像 | https://registry.docker-cn.com |
DaoCloud 镜像站 | http://f1361db2.m.daocloud.io |
Azure 中国镜像 | https://dockerhub.azk8s.cn |
科大镜像站 | https://docker.mirrors.ustc.edu.cn |
阿里云 | https://ud6340vz.mirror.aliyuncs.com |
七牛云 | https://reg-mirror.qiniu.com |
网易云 | https://hub-mirror.c.163.com |
腾讯云 | https://mirror.ccs.tencentyun.com |
"registry-mirrors": ["https://registry.docker-cn.com"]
💻Docker 快速安装软件
直接安装的缺点
-
安装麻烦,可能有各种依赖,运行报错。例如:WordPress,ElasticSearch,Redis,ELK
-
可能对 Windows 并不友好,运行有各种兼容问题,软件只支持 Linux 上跑
-
不方便安装多版本软件,不能共存。
-
电脑安装了一堆软件,拖慢电脑速度。
-
不同系统和硬件,安装方式不一样
本文档课件配套 视频教程
Docker 安装的优点
-
一个命令就可以安装好,快速方便
-
有大量的镜像,可直接使用
-
没有系统兼容问题,Linux 专享软件也照样跑
-
支持软件多版本共存
-
用完就丢,不拖慢电脑速度
-
不同系统和硬件,只要安装好 Docker 其他都一样了,一个命令搞定所有
演示 Docker 安装 Redis
Redis 官网:Redis
官网下载安装教程只有源码安装方式,没有 Windows 版本。想要自己安装 windows 版本需要去找别人编译好的安装包。
Docker 官方镜像仓库查找 Redis :https://hub.docker.com/
一个命令跑起来:docker run -d -p 6379:6379 --name redis redis:latest
命令参考:docker run | Docker Docs
安装 Wordpress
首先创建一个docker-compose.yml文件夹
docker-compose.yml
version: '3.1'services:wordpress:image: wordpressrestart: alwaysports:- 8080:80environment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_USER: exampleuserWORDPRESS_DB_PASSWORD: examplepassWORDPRESS_DB_NAME: exampledbvolumes:- wordpress:/var/www/htmldb:image: mysql:5.7restart: alwaysenvironment:MYSQL_DATABASE: exampledbMYSQL_USER: exampleuserMYSQL_PASSWORD: examplepassMYSQL_RANDOM_ROOT_PASSWORD: '1'volumes:- db:/var/lib/mysqlvolumes:wordpress:db:
docker-compose up -d
安装 ELK
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk
内存不够解决方法 转到用户目录 cd ~
,路径类似这个:C:\Users\<UserName>
创建 .wslconfig
文件填入以下内容
[wsl2] memory=10GB # Limits VM memory in WSL 2 to 4 GB processors=2 # Makes the WSL 2 VM use two virtual processors
生效配置,命令行运行 wsl --shutdown
更多相关命令
docker ps
查看当前运行中的容器 docker images
查看镜像列表 docker rm container-id
删除指定 id 的容器 docker stop/start container-id
停止/启动指定 id 的容器 docker rmi image-id
删除指定 id 的镜像 docker volume ls
查看 volume 列表 docker network ls
查看网络列表
💽制作自己的镜像
为自己的 Web 项目构建镜像
示例项目代码:GitHub - gzyunke/test-docker: docker test project. nodejs + koa2 这是一个 Nodejs + Koa2 写的 Web 项目,提供了简单的两个演示页面。 软件依赖:nodejs 项目依赖库:koa、log4js、koa-router
本文档课件配套 视频教程
编写 Dockerfile
Dockerfile 是用于构建 Docker 镜像的文本文件。它包含一系列指令,每个指令代表一个构建步骤。通过编写 Dockerfile,开发者可以定义容器中的环境、应用程序依赖和启动配置等信息,使得 Docker 能够自动构建出相应的镜像。
以下是 Dockerfile 的主要用途和功能:
-
定义基础镜像: Dockerfile 允许指定一个基础镜像,即在构建过程中将要使用的起始点。基础镜像通常包含了操作系统和一些基本的工具。
-
安装依赖: 通过 Dockerfile,你可以指定在容器中安装特定版本的软件、库和依赖项,确保应用程序在容器中运行时拥有所需的运行时环境。
-
拷贝文件: Dockerfile 允许将本地文件系统中的文件或目录复制到容器中的指定路径。这用于将应用程序代码、配置文件等拷贝到镜像中。
-
运行命令: Dockerfile 中可以包含执行命令的指令,例如在容器中执行安装、配置等操作。这些命令将在构建过程中自动执行。
-
设置环境变量: 通过 Dockerfile,可以设置容器中的环境变量,以供应用程序使用。
-
暴露端口: Dockerfile 允许指定容器中应用程序将使用的端口,并在构建时将其暴露出来,以便在运行时进行端口映射。
-
定义启动命令: Dockerfile 允许指定容器启动时要执行的默认命令,例如启动应用程序或服务。
-
构建自定义镜像: 使用 Dockerfile,可以根据项目的需求构建自定义的 Docker 镜像,其中包含了所有必要的组件和配置。
FROM node:11 MAINTAINER easydoc.net# 复制代码 ADD . /app# 设置容器启动后的默认运行目录 WORKDIR /app# 运行命令,安装依赖 # RUN 命令可以有多个,但是可以用 && 连接多个命令来减少层级。 # 例如 RUN npm install && cd /app && mkdir logs RUN npm install --registry=https://registry.npm.taobao.org# CMD 指令只能一个,是容器启动后执行的命令,算是程序的入口。 # 如果还需要运行其他命令可以用 && 连接,也可以写成一个shell脚本去执行。 # 例如 CMD cd /app && ./start.sh CMD node app.js
Dockerfile文档
实用技巧: 如果你写 Dockerfile 时经常遇到一些运行错误,依赖错误等,你可以直接运行一个依赖的底,然后进入终端进行配置环境,成功后再把做过的步骤命令写道 Dockerfile 文件中,这样编写调试会快很多。 例如上面的底是
node:11
,我们可以运行docker run -it -d node:11 bash
,跑起来后进入容器终端配置依赖的软件,然后尝试跑起来自己的软件,最后把所有做过的步骤写入到 Dockerfile 就好了。 掌握好这个技巧,你的 Dockerfile 文件编写起来就非常的得心应手了。
Build 为镜像(安装包)和运行
编译 docker build -t test:v1 .
-t
设置镜像名字和版本号 命令参考:docker build | Docker Docs
运行 docker run -p 8080:8080 --name test-hello test:v1
-p
映射容器内端口到宿主机--name
容器名字-d
后台运行 命令参考文档:Running containers | Docker Docs
更多相关命令
docker ps
查看当前运行中的容器 docker images
查看镜像列表 docker rm container-id
删除指定 id 的容器 docker stop/start container-id
停止/启动指定 id 的容器 docker rmi image-id
删除指定 id 的镜像 docker volume ls
查看 volume 列表 docker network ls
查看网络列表
🥙目录挂载
现存问题
-
使用 Docker 运行后,我们改了项目代码不会立刻生效,需要重新
build
和run
,很是麻烦。 -
容器里面产生的数据,例如 log 文件,数据库备份文件,容器删除后就丢失了。
目录挂载解决以上问题
本文档课件配套 视频教程
几种挂载方式
-
bind mount
直接把宿主机目录映射到容器内,适合挂代码目录和配置文件。可挂到多个容器上 -
volume
由容器创建和管理,创建在宿主机,所以删除容器不会丢失,官方推荐,更高效,Linux 文件系统,适合存储数据库数据。可挂到多个容器上 格式:挂载命名:docker挂载路径
-
tmpfs mount
适合存储临时文件,存宿主机内存中。不可多容器共享。
文档参考:Manage data in Docker | Docker Docs
挂载演示
bind mount` 方式用绝对路径 `-v D:/code:/app volume` 方式,只需要一个名字 `-v db-data:/app
示例: docker run -p 8080:8080 --name test-hello -v D:/code:/app -d test:v1
注意! 因为挂载后,容器里的代码就会替换为你本机的代码了,如果你代码目录没有
node_modules
目录,你需要在代码目录执行下npm install --registry=https://registry.npm.taobao.org
确保依赖库都已经安装,否则可能会提示“Error: Cannot find module ‘koa’” 如果你的电脑没有安装 nodejs,你需要安装一下才能执行上面的命令。
👨👦👦多容器通信
学习目标
项目往往都不是独立运行的,需要数据库、缓存这些东西配合运作。 这节我们把前面的 Web 项目增加一个 Redis 依赖,多跑一个 Redis 容器,演示如何多容器之间的通信。
本文档课件配套 视频教程
创建虚拟网络
要想多容器之间互通,从 Web 容器访问 Redis 容器,我们只需要把他们放到同个网络中就可以了。
文档参考:docker network | Docker Docs
演示
创建一个名为test-net
的网络:
docker network create test-net
运行 Redis 在 test-net
网络中,别名redis
docker run -d --name redis --network test-net --network-alias redis redis:latest
修改代码中访问redis
的地址为网络别名
运行 Web 项目,使用同个网络
docker run -p 8080:8080 --name test -v D:/test:/app --network test-net -d test:v1
查看数据
http://localhost:8080/redis
容器终端查看数据是否一致
更多相关命令
docker ps
查看当前运行中的容器 docker images
查看镜像列表 docker rm container-id
删除指定 id 的容器 docker stop/start container-id
停止/启动指定 id 的容器 docker rmi image-id
删除指定 id 的镜像 docker volume ls
查看 volume 列表 docker network ls
查看网络列表
🍁Docker-Compose
现存问题
在上节,我们运行了两个容器:Web 项目 + Redis 如果项目依赖更多的第三方软件,我们需要管理的容器就更加多,每个都要单独配置运行,指定网络。 这节,我们使用 docker-compose 把项目的多个服务集合到一起,一键运行。
本文档课件配套 视频教程
安装 Docker Compose
-
如果你是安装的桌面版 Docker,不需要额外安装,已经包含了。
-
如果是没图形界面的服务器版 Docker,你需要单独安装 安装文档
-
运行
docker-compose
检查是否安装成功
编写脚本
要把项目依赖的多个服务集合到一起,我们需要编写一个docker-compose.yml
文件,描述依赖哪些服务 参考文档:Docker Compose overview | Docker Docs
version: "3.7"services:app:build: ./ports:- 80:8080volumes:- ./:/appenvironment:- TZ=Asia/Shanghairedis:image: redis:5.0.13volumes:- redis:/dataenvironment:- TZ=Asia/Shanghaivolumes:redis:
容器默认时间不是北京时间,增加 TZ=Asia/Shanghai 可以改为北京时间
跑起来
在docker-compose.yml
文件所在目录,执行:docker-compose up
就可以跑起来了。 命令参考:docker compose up | Docker Docs
在后台运行只需要加一个 -d 参数docker-compose up -d
查看运行状态:docker-compose ps
停止运行:docker-compose stop
重启:docker-compose restart
重启单个服务:docker-compose restart service-name
进入容器命令行:docker-compose exec service-name sh
查看容器运行log:docker-compose logs [service-name]
🚚发布和部署
镜像仓库介绍
镜像仓库用来存储我们 build 出来的“安装包”,Docker 官方提供了一个 镜像库,里面包含了大量镜像,基本各种软件所需依赖都有,要什么直接上去搜索。
我们也可以把自己 build 出来的镜像上传到 docker 提供的镜像库中,方便传播。 当然你也可以搭建自己的私有镜像库,或者使用国内各种大厂提供的镜像托管服务,例如:阿里云、腾讯云
本文档课件配套 视频教程
上传我们的镜像
-
首先你要先 注册一个账号
-
创建一个镜像库
-
命令行登录账号:
docker login -u username
-
新建一个tag,名字必须跟你注册账号一样
docker tag test:v1 username/test:v1
-
推上去
docker push username/test:v1
-
部署试下
docker run -dp 8080:8080 username/test:v1
docker-compose 中也可以直接用这个镜像了
version: "3.7"services:app: # build: ./image: helloguguji/test:v1ports:- 80:8080volumes:- ./:/appenvironment:- TZ=Asia/Shanghairedis:image: redis:5.0.13volumes:- redis:/dataenvironment:- TZ=Asia/Shanghaivolumes:redis:
阿里云容器托管
docker 官方的镜像托管有时候上传和下载都太慢了,如果你想要更快的速度,可以使用阿里云的免费镜像托管 登录 阿里云
🎯备份和迁移数据
迁移方式介绍
容器中的数据,如果没有用挂载目录,删除容器后就会丢失数据。 前面我们已经讲解了如何 挂载目录 如果你是用bind mount
直接把宿主机的目录挂进去容器,那迁移数据很方便,直接复制目录就好了 如果你是用volume
方式挂载的,由于数据是由容器创建和管理的,需要用特殊的方式把数据弄出来。
本文档课件配套 视频教程
备份和导入 Volume 的流程
备份:
-
运行一个 ubuntu 的容器,挂载需要备份的 volume 到容器,并且挂载宿主机目录到容器里的备份目录。
-
运行 tar 命令把数据压缩为一个文件
-
把备份文件复制到需要导入的机器
导入:
-
运行 ubuntu 容器,挂载容器的 volume,并且挂载宿主机备份文件所在目录到容器里
-
运行 tar 命令解压备份文件到指定目录
备份 MongoDB 数据演示
-
运行一个 mongodb,创建一个名叫
mongo-data
的 volume 指向容器的 /data 目录docker run -p 27018:27017 --name mongo -v mongo-data:/data -d mongo:4.4
-
运行一个 Ubuntu 的容器,挂载
mongo
容器的所有 volume,映射宿主机的 backup 目录到容器里面的 /backup 目录,然后运行 tar 命令把数据压缩打包docker run --rm --volumes-from mongo -v d:/backup:/backup ubuntu tar cvf /backup/backup.tar /data/
最后你就可以拿着这个 backup.tar 文件去其他地方导入了。
恢复 Volume 数据演示
-
运行一个 ubuntu 容器,挂载 mongo 容器的所有 volumes,然后读取 /backup 目录中的备份文件,解压到 /data/ 目录
docker run --rm --volumes-from mongo -v d:/backup:/backup ubuntu bash -c "cd /data/ && tar xvf /backup/backup.tar --strip 1"
注意,volumes-from 指定的是容器名字 strip 1 表示解压时去掉前面1层目录,因为压缩时包含了绝对路径
1、Docker的使用
创建一个简单的docker镜像并使用
创建 Docker 镜像的方法通常包括编写 Dockerfile
文件和使用 Docker CLI(命令行界面)。以下是一般步骤:
-
编写 Dockerfile: 创建一个文本文件,通常称为 Dockerfile,其中包含了构建 Docker 镜像的指令。Dockerfile 定义了基础镜像、依赖项安装、文件拷贝、环境变量设置、运行命令等。
示例 Dockerfile:
# 使用基础镜像FROM ubuntu:20.04# 设置工作目录WORKDIR /app# 拷贝应用程序文件到容器中COPY . /app# 安装应用程序依赖RUN apt-get update && \apt-get install -y python3# 设置环境变量ENV LANG C.UTF-8# 暴露端口EXPOSE 80# 定义容器启动时执行的命令CMD ["python3", "app.py"]
如下图是一个dockerfile文件,其作用是通过从openjdk11容器内(内含jdk环境),将源jar文件添加到容器内并执行
-
构建 Docker 镜像: 打开终端,
进入包含 Dockerfile 的目录
,然后运行以下命令以构建 Docker 镜像。docker build -t your_image_name:tag .
例如:
docker build -t myapp:1.0 .
这将根据 Dockerfile 中的指令构建一个名为
myapp
,标签为1.0
的镜像。 -
运行容器: 构建成功后,可以使用以下命令在容器中运行应用程序:
docker run -p 8080:80 myapp:1.0
这将把容器内的端口 80 映射到主机的端口 8080。
2、进入Docker
docker exec -it 775c7c9ee1e1 /bin/bash
Docker学习
一、Docker基本组成
镜像(image):docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像—>run---->tomcat01容器(提供服务),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中运行的)。
容器(container):docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的,启动、停止、删除、基本命令,目前就可以把这个容器理解为就是一个简易的Linux系统。
仓库(repository):仓库就是存放镜像的地方,仓库分为公有仓库和私有仓库,Docker Hub(默认是国外的)、阿里云…都有容器服务器(配置镜像加速)
即通过
镜像
克隆出多个容器
去使用Docker服务
二、Docker容器和虚拟机的区别
服务器虚拟化解决的核心问题是资源调度
,而容器解决的核心问题是应用开发、测试和部署
。
-
Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;还可以将容器与主操作系统隔离,并将各个容器互相隔离
-
而虚拟机更擅长于彻底隔离整个运行环境,Docker容器是应用级别的隔离;如云服务提供商通常采用虚拟机技术隔离不同的用户,Docker通常用于隔离不同的应用,如前后端,数据库等
-
虚拟机启动需要数分钟,而Docker容器可以在数毫秒之内启动,相对于虚拟机,Docker更轻量和简洁
-
虚拟机通常是虚拟化出一套硬件和内核,操作系统,从而在这个操作系统上安装和运行软件;而Docker容器内的应用是直接应用在宿主机上的,DOcker容器利用宿主操作系统的核心功能,而不是虚拟化出一个完整的操作系统
三、Docker安装
公司docker安装:Docker-CE 镜像使用帮助 (jaguarmicro.com)
安装之前卸载历史版本的Docker
第一步:卸载依赖 命令:apt remove docker-ce docker-ce-cli containerd.io第二步:删除资源 安装的资源都在/var/lib/docker目录下 命令:rm -rf /var/lib/docker
安装docker
sudo apt-get update sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common # step 2: 安装GPG证书 curl -fsSL http://mirrors.jaguarmicro.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - # Step 3: 写入软件源信息 sudo add-apt-repository "deb [arch=amd64] http://mirrors.jaguarmicro.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" # Step 4: 更新并安装Docker-CE sudo apt-get -y update sudo apt-get -y install docker-ce# 安装指定版本的Docker-CE: # Step 1: 查找Docker-CE的版本: # apt-cache madison docker-ce # docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.jaguarmicro.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages # docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.jaguarmicro.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages # Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial) # sudo apt-get -y install docker-ce=[VERSION]
安装校验
docker version
启动Docker
systemctl daemon-reload # 重新加载systemd系统管理守护进程 systemctl restart docker # 重启docker服务 systemctl status docker # 查看docker状态
测试Docker
相关文章:
Docker学习
🎉Docker 简介和安装 Docker 是什么 Docker 是一个应用打包、分发、部署的工具 你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要, 而普通虚拟机则是一个完整而庞大的系统,包含各…...
【Electron学习笔记(三)】Electron的主进程和渲染进程
Electron的主进程和渲染进程 Electron的主进程和渲染进程前言正文1、主进程2、渲染进程3、Preload 脚本3.1 在项目目录下创建 preload.js 文件3.2 在 main.js 文件下创建路径变量并将 preload.js 定义为桥梁3.3 在 preload.js 文件下使用 electron 提供的contextBridge 模块3.4…...
人工智能的微积分基础
目录 编辑 引言 微积分的基本概念 1. 导数 2. 积分 3. 微分方程 微积分在人工智能中的应用 1. 机器学习中的优化 2. 反向传播算法 3. 概率与统计 4. 控制理论 5. 自然语言处理中的梯度 6. 计算机视觉中的积分 7. 优化算法中的微积分 8. 微分几何在深度学习中的…...
关于BeanUtils.copyProperties是否能正常复制字段【详细版】
话不多说!先总结: 1、字段相同,类型不同(不复制,也不报错) 2、子类父类 (1)子类传给父类(可以正常复制) (2)父类传给子类(可以正常复制) 3、子类父类&#x…...
oracle将select作为字段查询
在Oracle中,如果你想将一个SELECT语句作为字段的值,你可以使用子查询或者使用WITH子句(也称为公用表表达式CTE)。以下是两种方法的示例: 方法1:使用子查询 语法如下: SELECTcolumn1,(SELECT …...
FFmpeg 简介与编译
1. ffmpeg 简介: FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移…...
qt QLinearGradient详解
1、概述 QLinearGradient是Qt框架中QGradient的一个子类,用于创建线性渐变效果。线性渐变是一种颜色沿着一条直线平滑过渡到另一种颜色的效果。QLinearGradient允许你定义渐变的起点和终点,以及在这些点之间的颜色变化。你可以使用它来为图形、背景、边…...
点击A组件跳转到B页面的tab的某一列
1、使用vuex存储点击的数据; 点击A组件里面的button按钮: <div><button click"banli(first)">已办理</button><button click"banli(second)">未办理</button><button click"banli(third)&quo…...
图像小波去噪与总变分去噪详解与Python实现
目录 图像小波去噪与总变分去噪详解与实现1. 基础概念1.1 噪声类型及去噪问题定义1.2 小波去噪算法基础1.3 总变分去噪算法基础2. 小波去噪算法2.1 理论介绍2.2 Python实现及代码详解2.3 案例分析3. 总变分去噪算法3.1 理论介绍3.2 Python实现及代码详解3.3 案例分析4. 两种算法…...
mvn-mac操作小记
1.安装brew 如果报错,Warning: /opt/homebrew/bin is not in your PATH. vim ~/.zshrc,最后一行追加 export PATH“/opt/homebrew/bin:$PATH” source ~/.zshrc 2.安装brew install maven mvn -version查看路径 Maven home: /opt/homebrew/Cellar/mav…...
【娱乐项目】基于批处理脚本与JavaScript渲染视频列表的Web页面
Demo介绍 一个简单的视频播放器应用,其中包含了视频列表和一个视频播放区域。用户可以通过点击视频列表中的项来选择并播放相应的视频,播放器会自动播放每个视频并在播放完毕后切换到下一个视频。本项目旨在通过自动化脚本和动态网页渲染,帮助…...
Faster R-CNN (目标检测)
Faster R-CNN (Faster Region-based Convolutional Neural Networks) Faster R-CNN 是一种高效的目标检测模型,它是在 R-CNN 系列(包括 R-CNN 和 Fast R-CNN)的基础上发展而来的,能够实现对图像中多个对象的检测。Faster R-CNN 引…...
Diffusion中的Unet (DIMP)
针对UNet2DConditionModel模型 查看Unet的源码,得知Unet的down,mid,up blocks的类型分别是: down_block_types: Tuple[str] ("CrossAttnDownBlock2D","CrossAttnDownBlock2D","CrossAttnDownBlock2D","DownBlock2…...
docker服务容器化
docker服务容器化 1 引言2 多个容器间网络联通2.1 单独创建关联2.2 创建时关联 3 服务搭建3.1 镜像清单3.2 容器创建 4 联合实战4.2 flink_sql之kafka到starrocks4.2 flink_sql之mysql到starrocks 5 文献借鉴 1 引言 利用docker可以很效率地搭建服务,本文在win1…...
Flink 从入门到实战
Flink中的批和流 批处理的特点是有界、持久、大量,非常适合需要访问全部记录才能完成的计算工作,一般用于离线统计。 流处理的特点是无界、实时, 无需针对整个数据集执行操作,而是对通过系统 传输的每个数据项执行操作,一般用于实…...
ffmpeg安装(windows)
ffmpeg安装-windows 前言ffmpeg安装路径安装说明 前言 ffmpeg的安装也是开箱即用的,并没有小码哥说的那么难 ffmpeg安装路径 这就下载好了! 安装说明 将上面的bin目录加入到环境变量,然后在cmd中测试一下: C:\Users\12114\Desktop\test\TaskmgrPlayer\x64\Debug>ffmpe…...
深度解析:Android APP集成与拉起微信小程序开发全攻略
目录 一、背景以及功能介绍 二、Android开发示例 2.1 下载 SDK 2.2 调用接口 2.3 获取小程序原始Id 2.4 报错提示:bad_param 2.4.1 错误日志 2.4.2 解决方案 相关推荐 一、背景以及功能介绍 需求:产品经理需要APP跳转到公司的小程序(最好指定页…...
DeSTSeg: Segmentation Guided Denoising Student-Teacher for Anomaly Detection
DeSTSeg: Segmentation Guided Denoising Student-Teacher for Anomaly Detection 清华、苹果 个人感觉 Introduction 很自然的让读者理解作者问题的提出,也有例子直接证明了这个问题的存在,值得借鉴!! Related work写的也很不…...
Xilinx Blockset Gateway In 和Gateway out模块使用及参数配置
目录 一、Gateway InSimulink数据到System Generator数据的转换Gateway BlocksBlock Parameters(模块参数)Basic选项卡参数Implementation选项卡参数 二、Gateway OutGateway BlocksBlock Parameters(模块参数)Basic选项卡参数Imp…...
set up RAGFlow on your Mac
个人思考:这些仅仅是工具,和人的思维实际还是有很大差距。 可能是我认知片面,你需要投喂大量的内容给它,它自己其实并不会思考,只是从它的认知里告诉它他知道的东西。举个不太巧当的例子,和以往的方式恰恰相…...
SSM搭建(1)——配置MyBatis
目录 一、框架概述 1.什么是JDBC? 2.JDBC基本流程 3.JDBC的缺点 二、MyBatis的入门程序 1. 创建数据库和表结构 2. MyBatis入门流程总结 3. MyBatis的入门步骤 (1) 创建maven的项目,创建Java工程即可。 &…...
SickOs: 1.1靶场学习小记
学习环境 kali攻击机:Get Kali | Kali Linux vulnhub靶场:https://download.vulnhub.com/sickos/sick0s1.1.7z 靶场描述: 这次夺旗赛清晰地模拟了在安全环境下如何对网络实施黑客策略从而入侵网络的过程。这个虚拟机与我在进攻性安全认证专…...
Flume 监控配置和实践
要解释 Flume 的监控机制,需要了解 Flume 是如何设计其监控架构的,以及如何将性能指标暴露给用户或集成工具。下面我将详细分解 Flume 的监控机制,从基础架构、实现原理到源码解析,并提供非专业人也能理解的通俗解释。 Flume 的监…...
二分法算法
提示:文章 文章目录 前言一、背景二、二分法2.2 最坏情况下冒泡排序的比较次数 三、大算法之一:分治法总结 前言 前期疑问: 本文目标: 二分法 一、背景 问题来源是一个题目,在A[N]字符串数组中匹配长度为M的字符串&…...
3.27浮点数计算
-127就是说,有8位的数来表示指数,然后给他减去127就是这八位劈半,一半表示负数的指数,一半表示整数的指数;对于移码来说,最高位为1时表示为正,为0时表示为负 对阶是要小阶向大阶对齐,…...
存储过程与自然语言处理逻辑的不同与结合
在现代软件开发中,存储过程与自然语言处理(NLP)逻辑都发挥着重要作用。存储过程是一种在数据库内部运行的预编译程序,通常用于处理与数据相关的任务,例如插入、更新、删除数据以及复杂的查询操作。而自然语言处理&…...
数据集搜集器(百科)008
对数据集搜集器(百科)007进行一下改进: 错误处理:增加更多的错误处理,比如网络请求超时、解析错误等。 用户界面:增加一些提示信息,让用户更清楚当前的操作状态。 多线程处理:确保多…...
用Pycharm安装manim
由于版本和工具的差异,manim的安装方式不尽相同。本文用Pycharm来安装manim. 一、准备工作:安装相应版本的python、pycharm和ffmpeg. 此处提供一种安装ffmpeg的方式 下载地址:FFmpeg 下载后,解压到指定目录。 配置环境变量&am…...
HTB:Love[WriteUP]
目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机开放端口进行脚本、服务扫描 使用浏览器访问靶机443端口 尝试利用该功能访问靶机自身80端口 使用ffuf对靶机80端口进行路径FUZZ 漏洞利用 使用searchsploit搜索靶机80端…...
程序设计 26种设计模式,如何分类?
1. 创建型模式 (Creational Patterns) 这些模式关注如何实例化对象。它们通过各种方式封装对象的创建过程,从而提供灵活性和可扩展性。 单例模式 (Singleton):确保某个类只有一个实例,并提供全局访问点。工厂方法模式 (Factory Method)&…...
Oracle对比表与表之间的结构
自己首先想到的就是,navicat有提供结构同步 但是有些时候情况不一样,比如我遇到的是连接不同,而且是互相同步,以最多的列的那个表为样 没有说一个固定的源 那么还可以通过导出表结构去另一个库中执行看是否报错,以此来判断结构的不同 但是我感觉有点儿麻烦 最后想到通过sql语…...
MySQL 查询 执行顺序
MySQL查询的执行顺序大致如下: FROM子句:确定要查询的表。 ON:对JOIN语句中的表进行关联条件指定。 JOIN:如果有的话,对表进行关联。 WHERE:对记录进行过滤。 GROUP BY:根据指定的列分组记录…...
Scala习题
姓名,语文,数学,英语 张伟,87,92,88 李娜,90,85,95 王强,78,90,82 赵敏,92,88,91 孙涛,…...
VSCode 使用教程:项目使用配置、使用哪些插件、Live Server使用问题及解决方案(你想要的,都在这里)
VSCode的配置: Ⅰ、VSCode 可能需要的项目配置:1、项目颜色主题的切换:其一、点击设置 -> 选择主题 -> 选择颜色主题:其二、通过上下键操作,选择想要的主题: 2、项目文件图标主题的切换:其…...
RPA:电商订单处理自动化
哈喽,大家好,我是若木,最近闲暇时间较多,于是便跟着教程做了一个及RPA,谈到这个,可能很多人并不是很了解,但是实际上,这玩意却遍布文末生活的边边角角。话不多说,我直接上…...
分布式协同 - 分布式锁一二事儿
文章目录 导图Pre概述概述1. 分布式互斥和临界资源的协调2. 分布式锁的基本原理3. 分布式锁的实现方式a. 基于数据库实现的分布式锁b. 基于Redis实现的分布式锁c. 基于Zookeeper实现的分布式锁 4. 高并发场景下的分布式锁优化a. 分段锁(Sharded Locks)b.…...
React Native学习笔记(三)
一 组件简介 1.1 简介 RN中的核心组件,是对原生组件的封装 原生组件:Android或ios内的组件核心组件:RN中常用的,来自react-native的组件 原生组件 在 Android 开发中是使用 Kotlin 或 Java 来编写视图;在 iOS 开发…...
什么是B+Tree?
BTree是B-Tree的一种变体,它在数据库索引和文件系统中被广泛使用,因为它优化了磁盘I/O操作,并且对于范围查询非常高效。 以下是BTree的详细全面解释: 基本概念 节点(Node):BTree由节点组成&…...
LeetCode 热题100(十一)【二分查找】(2)
11.4搜索旋转排序数组(中等) 题目描述:leetcode链接 33. 搜索旋转排序数组 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length&…...
《Python基础》之OS模块
目录 前言 各种文件操作方法 1、os.path.exists() 2、os.path.join() 3、os.path.abspath(__file__) 4、os.path.dirname() 5、os.path.isfile() 6、os.path.isdir() 7、os.mkdir() 8、os.remove() 9、os.rmdir() 前言 本文主要介绍使用os模块中的功能操作文件或者文…...
esp32触发相机
esp32触发相机,测试成功上升沿触发 串口发送命令 up 20000 1 20000 触发 #include <Arduino.h>const int outputPin 12; // 输出引脚 String inputCommand ""; // 串口输入缓冲区// 解析命令参数,例如 "up 10 5" 解析为…...
AWS EC2设置用户名密码登录
使用AWS EC2 设置用户名密码登录 步骤 1: 访问控制台 登录到AWS管理控制台。导航至 EC2 Dashboard。在左侧导航栏中选择 Instances。选择需要配置的实例。使用 EC2 Instance Connect 访问实例控制台。 步骤 2: 切换到 root 用户 打开终端或命令行工具,通过SSH连…...
Mac配置和启动 Tomcat
Tomcat 配置与启动: 配置 Tomcat: homebrew install tomcat 启动 Tomcat: 如果cd ~/tomcat/bin文件夹存在startup.sh文件,可以直接在终端运行:./startup.sh 如果~/bin目录下,只有catalina文件。则在终端运行…...
基于深度学习的手势识别算法
基于深度学习的手势识别算法 概述算法原理核心逻辑效果演示使用方式参考文献 概述 本文基于论文 [Simple Baselines for Human Pose Estimation and Tracking[1]](ECCV 2018 Open Access Repository (thecvf.com)) 实现手部姿态估计。 手部姿态估计是从图像或视频帧集中找到手…...
ffmpeg RTP PS推流
要实现 CRtpSendPs 类,使其能够将 H264 数据通过 RTP PS 流推送到指定的 URL,并支持 TCP 和 UDP 传输方式,您需要使用 FFmpeg 库。以下是该类的实现示例,包括必要的初始化、推流和退出函数。 步骤 初始化 FFmpeg 库:…...
uniapp开发支付宝小程序自定义tabbar样式异常
解决方案: 这个问题应该是支付宝基础库的问题,除了依赖于官方更新之外,开发者可以利用《自定义 tabBar》曲线救国 也就是创建一个空内容的自定义tabBar,这样即使 tabBar 被渲染出来,但从视觉上也不会有问题 1.官方文…...
YOLOv8实战无人机视角目标检测
本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对无人机目标数据集进行训练和优化,该数据集包含丰富的无人机目标图像…...
RNN详解及其实现
目录 概述为什么需要 RNN?RNN 理解及其简单实现RNN 完成文本分类任务RNN 存在的问题 概述 提及 RNN,绝大部分人都知道他是一个用于序列任务的神经网络,会提及他保存了时序信息,但是,为什么需要考虑时序的信息…...
SpringBoot开发——详细讲解 Spring Boot 项目中的 POM 配置
文章目录 一、POM 文件简介二、单模块项目的 POM 配置1. 创建基本的 Spring Boot 单模块项目2. 重点解析三、多模块项目的 POM 配置1. 多模块项目结构2. 父模块 POM 文件3. 子模块 POM 文件4. 重点解析结语在 Spring Boot 项目中,POM(Project Object Model)文件起着关键作用…...
数据仓库: 8- 数据仓库性能优化
CSDN 目录展示 目录 8- 数据仓库性能优化8.1 查询优化8.1.1 索引优化8.1.2 分区和分桶8.1.3 使用缓存8.1.4 查询简化与重写8.1.5 聚合优化8.1.6 并行化和分布式计算8.1.7 基于列存储的优化8.1.8 表的分区和数据清洗8.1.9 查询提示 (Hints)8.1.10 自动调优工具 8.2 索引设计8.2…...