40.Docker

news2024/10/6 10:27:49

目录

一、Docker。

(1)认识Docker。

(1.1)什么是Docker。

(1.2)Docker和虚拟机的区别。

(2)镜像、容器、DockerHub、Docker架构。

(3)安装Docker(CentOS中安装)。

(3.1)CentOS安装Docker的前提。

(3.2)卸载(可选)。

(3.3)安装docker。

(3.3.1)首先需要大家虚拟机联网,安装yum工具:

(3.3.3)下载docker。

(3.4)启动docker。

(3.4.1) 关闭防火墙(这里是练习才关)。

(3.4.2)通过命令启动docker。

(3.5)镜像加速器。

(3.6) docker-ce.repo 文件和 daemon.json 文件的区别。

(4)Docker基本操作。

(4.1)镜像操作。

(4.1.1)镜像名称。

(4.1.2)镜像操作命令。

(4.1.3)案例—拉取nginx镜像。

(4.1.4)案例—save与load。

(4.1.5) 案例—拉取Redis镜像。

(4.1.6)总结。

(4.2)容器操作。

(4.2.1)容器相关命令。

(4.2.2)案例—创建运行Nginx容器。 

(4.2.3)案例—修改Nginx容器的HTML文件内容。 

(4.2.4)案例—创建并运行Redis容器,在Redis容器文件添加内容。

(4.2.5)总结。 

(4.3)数据卷(容器数据管理)。

(4.3.1)数据卷命令。 

(4.3.2)数据卷挂载。

(4.3.3)目录挂载、文件挂载。

(4.3.4)案例—创建nginx容器,修改容器内的html目录的文件内容。

(4.3.5)总结。

(4.3.6) 三种挂载的区别。

(4.3.6.1) 数据卷挂载 或 目录挂载。

(4.3.6.2)文件挂载。

(5)Dockerfile自定义镜像。

(5.1)镜像结构。

(5.2)Dockerfile语法。

(5.3)案例—构建新镜像(运行一个java项目的镜像)。

(5.4)案例—基于镜像创建新镜像。

(5.5)总结。

(6)DockerCompose。

(6.1)CentOS7安装DockerCompose。

(6.1.1)安装 docker-compose 需要以下3个步骤:

(6.1.2)Base自动补全命令(使用时有提示)。

(6.1.3)案例。

(6.1.4)总结。 

(7)Docker镜像仓库。

(7.1)简化版镜像仓库。

(7.2)带有图形化界面版本。

(7.3)配置Docker信任地址。

(7.4)在私有镜像仓库推送或拉取镜像。

(7.5)docker pull registry拉取镜像超时的原因。


一、Docker。

(1)认识Docker。

(1.1)什么是Docker。

1、Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包,Docker运行到不同操作系统时,直接基于打包的库函数,借助于操作系统的Linux内核来运行,从而跨平台运行。

2、系统应用:封装内核指令为函数,便于程序员调用用户程序基于系统函数库实现功能

3、内核:提供访问计算机硬件的指令。

4、不同发行版本系统:函数库可能有所差异,但都是基于linux内核。


(1.2)Docker和虚拟机的区别。

(2)镜像、容器、DockerHub、Docker架构。

(3)安装Docker(CentOS中安装)。

企业部署一般都是采用Linux操作系统,而其中又数CentOS发行版占比最多,因此我们在CentOS下安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。

Docker CE 分为 stable test 和 nightly 三个更新频道。

官方网站上有各种环境下的 安装指南,这里主要介绍 Docker CE 在 CentOS上的安装。

(3.1)CentOS安装Docker的前提。

Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。

(3.2)卸载(可选)。

提示:就算没有旧版本的Docker,执行这个命令就是跟没执行一样。

如果之前安装过旧版本的Docker(不清楚的可以执行一遍),可以使用下面命令卸载:

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

注意:“\”反斜杠的作用就是换行(命令太长,可以考虑换行)。

(3.3)安装docker。

(3.3.1)首先需要大家虚拟机联网,安装yum工具:

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

注意:yum-utils:这是一个实用工具集,提供了一些扩展的 yum 命令和功能,例如 yum-config-manager 等,可以用于仓库管理、软件包清理等操作。

(3.3.2)更改本地镜像源。

yum makecache fast:命令是将软件包信息提前在本地索引缓存,用来提高搜索安装软件的速度,建议执行这个命令可以提升yum安装的速度。

# 设置docker镜像源
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

sed 命令和 yum-config-manager 命令的组合用法是对 Docker 的 YUM 仓库进行配置更改,具体如下:

第一条命令:

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

在这个命令中,--add-repo 参数用于指示 yum-config-manager 添加一个新的仓库。后面跟着的 URL https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 是要添加的仓库文件的地址。

通过执行这个命令,系统将会在 /etc/yum.repos.d/ 目录下创建一个名为 docker-ce.repo 的新文件,并将指定的仓库文件内容添加到该文件中。这个仓库文件包含了 Docker 相关的软件包和官方更新的信息。

添加仓库后,你就可以使用 YUM 命令来安装、更新和管理 Docker 相关的软件包。YUM 将会根据仓库文件中的配置信息,从指定的镜像源服务器上下载所需的软件包,并进行安装或更新操作。

第二条命令:

sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
  • 命令使用 sed 工具在 /etc/yum.repos.d/docker-ce.repo 文件中替换所有出现的 download.docker.com 地址为 mirrors.aliyun.com/docker-ce 地址。

(3.3.3)下载docker。

输入下载命令:稍等片刻,docker即可安装成功。

yum install -y docker-ce

-y:不需要向用户询问,所有询问都选yes。

docker-ce:ce为社区免费版本。

(3.4)启动docker。

(3.4.1) 关闭防火墙(这里是练习才关)。

Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!

启动docker前,一定要关闭防火墙后!!

启动docker前,一定要关闭防火墙后!!

启动docker前,一定要关闭防火墙后!!

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
# 查看防火墙状态
systemctl status firewalld

(3.4.2)通过命令启动docker。

查看是否启动成功:

1、systemctl status docker 

2、docker -v(查看docker版本

systemctl start docker  # 启动docker服务
systemctl stop docker  # 停止docker服务
systemctl restart docker  # 重启docker服务

(3.5)镜像加速器。

docker官方镜像仓库网速较差,我们需要设置国内镜像服务:参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

配置镜像加速器:针对Docker客户端版本大于 1.10.0 的用户

通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://s7nqdrcs.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

提示:sudo命令,代表 "superuser do"(超级用户操作)。 

总共有四条命令:

第一条:创建docker目录。

第二条:创建daemon.json文件,并写入镜像仓库地址。

第三条:重新加载daemon.json文件。

第四条:重启docker。

daemon.json文件:(参考,并非复制系统的,这里只是展示书写格式)

{
    "registry-mirrors" : [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://cr.console.aliyun.com",
    "https://mirror.ccs.tencentyun.com"
  ]
}

当使用镜像加速器时,下载镜像的流程如下:如果有镜像加速器,那么不需要配置镜像源。

1、用户发起下载镜像的请求。
2、请求被发送到配置好的镜像加速器地址。
3、镜像加速器会首先检查自己的缓存中是否存在所需的镜像。如果存在,则直接从缓存中返回该镜像给用户。
4、如果镜像加速器的缓存中不存在所需的镜像,它会将请求转发到原始的镜像源(Registry)。
5、镜像源接收到请求后,会将相应的镜像发送给镜像加速器。
6、镜像加速器将镜像保存到自己的缓存中,并将镜像返回给用户。

(3.6) docker-ce.repo 文件和 daemon.json 文件的区别。

注意:镜像源与镜像加速器只需要配置其中一个即可(两种都配也行)。

docker-ce.repo 文件和 daemon.json 文件都与 Docker 相关,但它们在功能和用途上有所区别。

  1. docker-ce.repo 文件:配置镜像源的地方。

    • docker-ce.repo 是针对使用基于 Red Hat 兼容发行版(如 CentOS、Fedora)的系统而设计的。
    • 它是一个仓库配置文件,用于指定 Docker 的软件仓库源,即从哪里下载 Docker 软件包。
    • 在这个文件中,可以定义 Docker 的仓库 URL 和其他相关选项。
    • 该文件一般位于 /etc/yum.repos.d/ 目录下。
  2. daemon.json 文件:配置镜像加速器的地方。

    • daemon.json 是 Docker 守护进程的配置文件。
    • 它包含了一系列的配置选项,用于控制 Docker 守护进程的行为。
    • 在 daemon.json 文件中,可以配置各种选项,如镜像加速器、存储驱动、网络设置等。
    • 该文件一般位于 /etc/docker/ 目录下。

总结:

  • docker-ce.repo 文件是用来指定 Docker 软件仓库源的配置文件,用于安装和更新 Docker 软件包。
  • daemon.json 文件是用来配置 Docker 守护进程的配置文件,用于控制 Docker 运行时的行为和设置。

需要注意的是,docker-ce.repo 文件只在基于 Red Hat 兼容发行版的系统上使用,而 daemon.json 文件在所有支持的操作系统上均可使用。

(4)Docker基本操作。

(4.1)镜像操作。

(4.1.1)镜像名称。

(4.1.2)镜像操作命令。

(4.1.3)案例—拉取nginx镜像。

docker pull nginx

(4.1.4)案例—save与load。

注意:docker save --help(使用哪个命令,就查看文档使用) 

docker save -o nginx.tar nginx:latest  

docker rmi nginx:latest (删除镜像后,把压缩包镜像加载进来) 

docker load -i nginx.tar

(4.1.5) 案例—拉取Redis镜像。

docker pull redis

docker images(查看镜像是否已经拉取成功)

docker save -o redis.tar redis:latest

docker rmi redis:latest

docker load -i redis.tar 

(4.1.6)总结。

(4.2)容器操作。

(4.2.1)容器相关命令。

(4.2.2)案例—创建运行Nginx容器。 

docker run --name mn -p 80:80 -d nginx

docker ps

(4.2.3)案例—修改Nginx容器的HTML文件内容。 

docker exec -it mn bash

cd /usr/share/nginx/html

sed -i 's#Welcome to nginx#传智教育欢迎您#g' index.html(替换文档的内容)

sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html(替换文档的内容)

 exit(退出容器 )

docker ps(查看运行中的容器)

docker ps -a(all,查看所有容器)

docker rm mn (删除非运行中的容器)

docker rm mn -f (连运行中的容器也可以删除)

(4.2.4)案例—创建并运行Redis容器,在Redis容器文件添加内容。

docker run --name mr -p 6379:6379  -d  redis redis-server --appendonly yes

注:redis-server(启动服务端)

docker ps -a

然后去redis图形化界面远程连接这个redis服务器。

docker exec -it mr bash (docker exec -it mr redis-cli(这个直接进入redis-cli客户端))

redis-cli(进入客户端)

keys *(查看有没有记录)

set num 666(记录字符串数据)

exit(这次,退出客户端)

exit(再一次,退出redis)

(4.2.5)总结。 

(4.3)数据卷(容器数据管理)。

(4.3.1)数据卷命令。 

docker volume --help(查看命令使用) 

docker volume create html(创建html数据卷)

docker volume ls(查看数据卷)

docker volume inspect html(查看数据卷在宿主机的具体位置)

docker volume prune -a(删除全部未使用的数据卷)

docker volume rm html(删除html数据卷)

(4.3.2)数据卷挂载。

注意:如果数据卷不存在,则自动创建。 

(4.3.3)目录挂载、文件挂载。

注意:挂载可以一次挂载多个目录或文件,-v参数是可以多次使用的。 

docker run --name mysql -e MYSQL_ROOT_PASSWORD=tan -p 3366:3306 -v /tem/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /tem/mysql/data:/var/lib/mysql -d mysql:latest
-e :  环境
-v :挂载

(4.3.4)案例—创建nginx容器,修改容器内的html目录的文件内容。

docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx(创建容器时挂载)
docker ps -a
docker inspect html(效果与docker volume inspect html一样的,不清楚原因,html是数据卷)
cd /var/lib/docker/volumes/html/_data(切换到挂载点(与容器某个目录交互的目录))
cat index.html
vim index.html(改写文件内容)
cat index.html
最后一步:在浏览器访问,查看效果。

(4.3.5)总结。

(4.3.6) 三种挂载的区别。

注意:如果映射的容器目录没有,则会自动创建目录,完成挂载。 

        1、目录与数据卷很相似。

        2、挂载目录与容器目录只是目录内的变化,双方目录的名称都不会改变。

        3、文件也是一样,改变的是内容,不是文件名称。

(4.3.6.1) 数据卷挂载 或 目录挂载。

提示:但是在使用doker-compose构建容器的时候却可以挂载成功(有目录文件),不清楚原因。 

数据卷挂载 或 目录挂载(前提:挂载的路径):

1.数据卷没有目录文件时:容器的目录文件,数据卷目录都有。

2.数据卷有目录文件时:创建容器是exited状态(错误)。

        * 还未挂载过:不允许有目录文件,删了重新创建容器并挂载。(可能是系统原因吧)

        * 挂载过的目录,可以有目录文件,名字相同会覆盖内容。创建容器并挂载,就OK了。(容器已经删除的也算)

挂载过与未挂载过的区别:

(用户/用户组)root/root>>> polkitd/root(da/data/data1都是挂载过的目录)。 

(4.3.6.2)文件挂载。

文件挂载:

1.容器没有同名文件:文件添加到容器内。(前提:挂载的路径)

2.容器有同名文件:文件名不变,内容被挂载文件内容覆盖。(前提:挂载的路径)

(5)Dockerfile自定义镜像。

(5.1)镜像结构。

(5.2)Dockerfile语法。

(5.3)案例—构建新镜像(运行一个java项目的镜像)。

Dockerfile文件内容: 

 # 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar(/tmp/app.jar 是镜像内部的路径,./docker-demo.jar是宿主机的路径)

# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

1、构建新镜像。

docker build -t javaweb:1.0 . 

解析:

  • docker build:这是 Docker 命令的一部分,用于构建 Docker 镜像。
  • -t javaweb:1.0:即tag,这是构建镜像时为镜像指定的标签信息。-t 选项用于指定镜像的名称和标签,javaweb 是镜像的名称,1.0 是镜像的版本号或标签。
  • .:这是构建镜像的上下文路径。在此例中,. 表示当前目录(即 Dockerfile 所在的目录),Docker 将会在当前目录中查找 Dockerfile 文件并使用它来构建镜像。

2、基于这个镜像创建容器,即可访问。

docker run --name web -p 8090:8090 -d javaweb:1.0


(5.4)案例—基于镜像创建新镜像。

Dockerfile文件内容: 

# 指定基础镜像
FROM java:8-alpine
# 拷贝java项目的包
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

1、构建新镜像。

docker build -t javaweb:1.0 . 

2、基于这个镜像创建容器,即可访问。

docker run --name web -p 8090:8090 -d javaweb:1.0

(5.5)总结。

(6)DockerCompose。

DockerCompose的详细语法参考官网:Overview | Docker Documentation 

(6.1)CentOS7安装DockerCompose。

(6.1.1)安装 docker-compose 需要以下3个步骤:

1、下载 docker-compose 的可执行文件,从官方网站或者其他适合你操作系统的渠道获取。

# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

也可以直接将docker-compose文件上传到/usr/local/bin/目录里面。

2、将下载的可执行文件移动到一个系统路径可访问的目录下,例如 /usr/local/bin/docker-compose(如果不在这个路径,就需要执行这个步骤)。

3、赋予 docker-compose 可执行权限,可以使用命令 chmod +x /usr/local/bin/docker-compose 来实现。

# 修改权限
chmod +x /usr/local/bin/docker-compose

 4、验证安装是否成功,可以运行 docker-compose version 命令来检查版本信息,并且确认没有报错。

(6.1.2)Base自动补全命令(使用时有提示)。

自动补全命令功能: 

# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

如果这里出现错误(拒绝访问时,配置本地域名解析),需要修改自己的hosts文件:

echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts

(6.1.3)案例。

注意:

1、使用DockerCompose部署时,所有服务之间都可以用服务名互相访问。 

2、ip地址都用服务名代替:我的理解是,创建容器的时候自动获取(当前主机)IP地址,然后再把服务名代替。

1.上传cloud-demo多微服务到虚拟机。

2. cd /tmp/cloud-demo

3.docker-compose --help(查看帮助文档)

4.docker-compose  up -d (up:创建并启动容器 -d:后台运行)

5.docker-compose logs -f(查看日志)

6.docker-compose logs -f userservice(查看某个服务日志)

7.到浏览器进行访问

注意:如果其他服务先启动成功,而nacos还未启动成功,那么其他服务去nacos注册的时候就会报错。

docker-compose restart gateway userservice orderservice(重启服务,多个服务之间空格) 


$PWD 命令:它会返回当前所在的工作目录的完整路径 。

docker-compose.yml文件:

version: "3.2"

services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

 


(6.1.4)总结。 

DockerCompose有什么作用?

帮助我们快速部署分布式应用,无需一个个微服务去构建镜像和部署。

注意:services下面,mysql与web都是微服务,即配置了两个微服务的指令,可配置多个。 

(7)Docker镜像仓库。

搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。

官网地址:https://hub.docker.com/_/registry

(7.1)简化版镜像仓库。

Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。

搭建方式比较简单,命令如下:镜像要提前下载好。

docker run -d \
    --restart=always \
    --name registry	\
    -p 5000:5000 \
    -v registry-data:/var/lib/registry \
    registry

命令中挂载了一个数据卷registry-data到容器内的/var/lib/registry 目录,这是私有镜像库存放数据的目录。

访问http://YourIp:5000/v2/_catalog 可以查看当前私有镜像服务中包含的镜像

(7.2)带有图形化界面版本。

注意:下面的内容需要放到docker-compose.yaml文件里面,然后执行该文件。

使用DockerCompose部署带有图象界面的DockerRegistry,命令如下:

version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=传智教育私有仓库
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry

(7.3)配置Docker信任地址。

我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置:

# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.150.101:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker

注意:如果不止一个,需要用“,”隔开,里面的IP地址要改成自己的ip地址。 

(7.4)在私有镜像仓库推送或拉取镜像。

(7.5)docker pull registry拉取镜像超时的原因。

修改DNS:很重要的一步,因为大部分 pull 失败的原因都是这个

vim /etc/resolv.conf
        nameserver 8.8.8.8
        nameserver 8.8.4.4

/etc/resolv.conf 是一个配置文件,用于指定要用于域名解析的 DNS 服务器。在这个文件中,nameserver 关键字后面的 IP 地址表示要使用的 DNS 服务器。

具体来说:

  • nameserver 8.8.8.8 表示要使用 IP 地址为 8.8.8.8 的 DNS 服务器。
  • nameserver 8.8.4.4 表示要使用 IP 地址为 8.8.4.4 的 DNS 服务器。

当你在浏览器中输入一个域名时,操作系统会查询 /etc/resolv.conf 文件以确定要使用哪个 DNS 服务器进行解析。当 /etc/resolv.conf 文件中指定了多个 nameserver 时,系统将按照顺序逐个尝试这些 DNS 服务器进行域名解析。系统会从第一个 nameserver 开始尝试解析域名,如果无法连接或没有响应,则会继续尝试下一个 nameserver,直到找到可用的 DNS 服务器或尝试完所有的服务器。

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

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

相关文章

VS+QT+VTK三维曲面网格点选切割

程序示例精选 VSQTVTK三维曲面网格点选切割 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<VSQTVTK三维曲面网格点选切割>>编写代码&#xff0c;代码整洁&#xff0c;规则&…

DAMA学习笔记1:概念模型-逻辑模型篇

A实体的某个字段指向 B实体的主键, 则称A实体的那个字段为该实体的外键, 一个表里可以有多个外键&#xff0c;也可以没有外键&#xff1b; 被指向的实体称为主实体(主表)&#xff0c;也叫父实体(父表)&#xff0c;负责指向的实体称为从实体(从表)&#xff0c;也叫子实体(子表)…

记录好项目D18

记录好项目 你好呀&#xff0c;这里是我专门记录一下从某些地方收集起来的项目&#xff0c;对项目修改&#xff0c;进行添砖加瓦&#xff0c;变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是个网上商城 一、系统介绍 前台商城系统&#xff1a;包含首页登录、商…

动态规划——下降路径最小和

题目链接 leetcode在线oj题——下降路径最小和 题目描述 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元素。在下一行选择的元素和当前…

mmpose冻结参数训练,如何添加find_unused_parameters参数

mmpose冻结参数训练&#xff0c;如何添加find_unused_parameters参数 在backbone下方添加 frozen_stages7即可冻结前7层的参数。要注意对于多卡训练来说还需要添加 find_unused_parameters True。看图片中代码的位置。

回忆雅礼朱哥二三事

少年时代的记忆是最模糊的&#xff0c;却也是最深刻的。一些瞬间在大脑里几十年&#xff0c;那一定是你曾经心动和在乎过的感受。年少求学期间&#xff0c;因对数学的痴迷&#xff0c;和数学有关的一切我都记忆犹新&#xff1a;记得一个人趴在地上解题一下午的投入&#xff0c;…

分析各种富文本框的自动填写方法

怎样自动填写表单中的富文本框&#xff1f; 什么是富文本框&#xff1f;富文本框就是在网页上可以输入带格式的文本输入框。在富文本框中&#xff0c;可以设置使用不同的字体、颜色&#xff0c;可以控制段落、边距&#xff0c;还可以插入图片、表情等。是实现在线编辑不可或缺…

c++ word简单的写文本与画表格只支持docx

简单使用的代码如下所示&#xff1a; #include "stdafx.h" #include <windows.h> #include "minidocx.hpp" using namespace docx; using namespace std; std::string GB2312ToUTF8(const std::string& gb2312) { int len MultiByteToWid…

【ESP32C3合宙ESP32C3】:ESP32C3和合宙ESP32C3的环境搭建与离线包安装

项目场景&#xff1a; 最近买了一块合宙ESP32C3的开发板&#xff0c;于是想要开发一下&#xff0c;当然开发最开始少不掉开发环境的搭建&#xff0c;在这个搭建的过程中&#xff0c;遇到了一些问题&#xff0c;解决了&#xff0c;也希望能帮助到大家。 ESP32C3 和 合宙ES…

Spring Boot 中的 Elasticsearch 的数据操作配置

Spring Boot 中的 Elasticsearch 的数据操作配置 Elasticsearch是一个基于Lucene的搜索引擎&#xff0c;可以快速地存储、搜索和分析大量的数据。Spring Boot是一个开发框架&#xff0c;提供了快速构建基于Spring的应用程序的工具和技术。在本文中&#xff0c;我们将讨论如何在…

GBASE南大通用时代亿信共筑商业秘密防护联合解决方案

当前&#xff0c;数字经济因其覆盖面广且渗透力强&#xff0c;与各行业深度融合&#xff0c;正在逐渐引领新经济发展。另一方面&#xff0c;数据安全已上升为国家战略&#xff0c;中央相继出台政策文件&#xff0c;加强数据安全、商业秘密、个人隐私保护&#xff0c;提高网络安…

聚观早报 | 美团收购光年之外;世卫:可乐中甜味剂或致癌

今日要闻&#xff1a;美团以20.65亿人民币收购光年之外&#xff1b;世卫&#xff1a;可乐中甜味剂或致癌&#xff1b;AI公司融13亿美元&#xff0c;仅次于OpenAI&#xff1b;微信支付就校园支付费率过高致歉&#xff1b;B站回应成立交易生态中心 美团以20.65亿人民币收购光年之…

C# Excel 表列序号

171 Excel 表列序号 给你一个字符串 columnTitle &#xff0c;表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如&#xff1a; A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1: 输入: columnTitle “A” 输出: 1 示例 2: …

11-Vue的diff算法

参考回答&#xff1a;​​​​​​​ 当组件创建和更新时&#xff0c;vue均会执行内部的update函数&#xff0c;该函数使用render函数生成的虚拟dom树&#xff0c;将新旧两树进行对比&#xff0c;找到差异点&#xff0c;最终更新到真实dom对比差异的过程叫diff&#xff0c;vue在…

《移动互联网技术》第五章 界面开发: 掌握Activity的基本概念,Activity的堆栈管理和生命周期

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

chatgpt赋能python:如何升级Python包

如何升级Python包 如果你是一名有着10年Python编程经验的工程师&#xff0c;那么你一定知道如何安装和使用Python包。但是&#xff0c;有时候你需要升级一些已经安装的包&#xff0c;以获得更好的性能和新功能。在本文中&#xff0c;我们将讨论如何升级Python包。 什么是Pyth…

GDI MFC抠图贴图

文章目录 抠图贴图添加消息命中 抠图 请添加图片描述 BOOL CPokemonDlg::OnInitDialog() {CDialogEx::OnInitDialog();// 设置此对话框的图标。 当应用程序主窗口不是对话框时&#xff0c;框架将自动// 执行此操作SetIcon(m_hIcon, TRUE); // 设置大图标SetIcon(m_hIcon,…

Spring Boot 中的 RabbitMQ 是什么,如何使用

Spring Boot 中的 RabbitMQ 是什么&#xff0c;如何使用 简介 RabbitMQ 是一个开源的消息队列系统&#xff0c;它通过 AMQP&#xff08;高级消息队列协议&#xff09;来实现消息的传递。Spring Boot 是目前非常流行的 Java 开发框架&#xff0c;它提供了很多便利性的功能&…

VS Code C++迎来套件更新,注释定义方便快捷

近日微软对VS Code C进行套件的更新&#xff0c;新加入名为“Call Hierarchy”的功能&#xff0c;而这个**ERP**功能可以让用户更加直观地理解代码函数之间的引用关系&#xff0c;同时该版本还让开发者更容易复制注释与定义&#xff0c;提升此类内容编写时的自由度。 据悉&am…

蓝牙音频数据歌词提取器设计方法

v hezkz17进数字音频系统研究开发交流答疑 解决方法&#xff1a; 通过蓝牙接收来自手机音乐播放器的数据&#xff0c;能得到哪些歌曲信息? 如何获取歌曲名&#xff1f;歌词信息&#xff1f; 2023/6/27 10:21:42 通过蓝牙接收手机音乐播放器的数据&#xff0c;可以获取以下歌曲…