docker 指定根目录 迁移根目录

docker 指定根目录 迁移根目录

  • 1、问题描述
  • 2、问题分析
  • 3、解决方法
    • 3.1、启动docker程序前就手动指定docker根目录为一个大的分区(支持动态扩容),事前就根本上解决根目录空间不够问题
      • 3.1.0、方法思路
      • 3.1.1、docker官网安装文档
      • 3.1.2、下载docker安装包
      • 3.1.3、安装docker 26.1.0
      • 3.1.4、配置docker systemd服务
    • 3.2、发现docker根目录爆满了,改变docker根目录为一个大的分区(支持动态扩容),事后解决根目录空间不够问题(需要迁移之前的根目录数据到新的根目录)
      • 3.2.1、正常安装docker后 docker根目录是/var/lib/docker
        • 3.2.1.1、官网安装文档
        • 3.2.1.2、下载docker安装包
        • 3.2.1.3、安装docker 26.1.0
        • 3.2.1.4、配置docker systemd服务
      • 3.2.2、默认根目录安装docker后,创建容器和容器数据一段时间后发现docker根目录空间不够、需要迁移根目录
        • 3.2.2.1、创建redis、mysql容器
        • 3.2.2.2、创建redis、mysql数据
      • 3.2.3、配置新的docker根目录、迁移docker根目录数据到新的根目录
      • 3.2.4、重要!!!迁移docker根目录后 确认docker服务正常
        • 3.2.4.1、检查容器启动是否正常,docker logs 查看容器启动日志
        • 3.2.4.2、执行容器内部服务检测,确认容器服务的接口调用是否正常
        • 3.2.4.3、执行df -lh 查看输出确认docker根目录是否已迁移到新路径

1、问题描述

默认启动docker后,默认的docker根目录是/var/lib/docker
使用docker info 命令查看docker根目录

docker info

在这里插入图片描述

在有些服务器上,/ 根目录空间非常小而且不能动态扩容,不能承载太多的docker镜像和数据,随着docker的运行,默认的docker根目录是/var/lib/docker 占用空间越来越大,导致/ 目录爆满,系统崩溃。(为什么不扩充根目录呢?因为在有些服务器上根目录不是LVM分区、不能动态扩容)

不指定配置文件,默认启动docker服务后,docker根目录如下,查看docker根目录的组织结构

ls -l /var/lib/docker

整个根目录大小是340K

在这里插入图片描述

根目录下各个子目录大小如下

在这里插入图片描述

docker 根目录结构如下 这些?所在的地方都是空格

[root@centos ~]# tree /var/lib/docker/
/var/lib/docker/
├── buildkit
│?? ├── cache.db
│?? ├── containerdmeta.db
│?? ├── content
│?? │?? └── ingest
│?? ├── executor
│?? ├── history.db
│?? ├── metadata_v2.db
│?? └── snapshots.db
├── containerd
│?? └── daemon
│??     ├── io.containerd.content.v1.content
│??     │?? └── ingest
│??     ├── io.containerd.metadata.v1.bolt
│??     │?? └── meta.db
│??     ├── io.containerd.runtime.v1.linux
│??     ├── io.containerd.runtime.v2.task
│??     ├── io.containerd.snapshotter.v1.blockfile
│??     ├── io.containerd.snapshotter.v1.native
│??     │?? └── snapshots
│??     ├── io.containerd.snapshotter.v1.overlayfs
│??     │?? └── snapshots
│??     └── tmpmounts
├── containers
├── engine-id
├── image
│?? └── overlay2
│??     ├── distribution
│??     ├── imagedb
│??     │?? ├── content
│??     │?? │?? └── sha256
│??     │?? └── metadata
│??     │??     └── sha256
│??     ├── layerdb
│??     └── repositories.json
├── network
│?? └── files
│??     └── local-kv.db
├── overlay2
│?? └── l
├── plugins
│?? ├── storage
│?? │?? └── ingest
│?? └── tmp
├── runtimes
├── swarm
├── tmp
└── volumes├── backingFsBlockDev└── metadata.db39 directories, 11 files
[root@centos ~]#

2、问题分析

有2个思路解决docker根目录空间爆满的问题
1、整体规划,防患于未然
在docker程序启动前,通过docke daemon的配置文件指定一个很大或者可以动态扩容的文件目录作为docker根目录。
2、后知后觉,整体规划没做好,事后处理
如果在生产环境上,运行docker程序签没有手动指定docker根目录,造成默认的docker根目录就是/var/lib/docker,并且环境已经运行一段时间发现根目录空间不够了,这种情况下仍然可以通过docke daemon的配置文件指定一个很大或者可以动态扩容的文件目录作为docker根目录,只不过要把之前docker根目录/var/lib/docker下哦数据迁移到新的docker根目录即可。。

3、解决方法

3.1、启动docker程序前就手动指定docker根目录为一个大的分区(支持动态扩容),事前就根本上解决根目录空间不够问题

3.1.0、方法思路

在docker启动前,先在配置文件中指定docker根目录,这个根目录的空间要保证非常大,或者这个根目录是能够动态扩容的,比如LVM分区。

linux上docker daemon配置文件是/etc/docker/daemon.json
windwos上docker daemon配置文件是C:\ProgramData\docker\config\daemon.json

本文以linux系统为例描述配置docker根目录方法
参考链接: https://docs.docker.com/config/daemon/

在linux系统上安装完成docker后,先不要启动docker程序。

先编辑docker配置文件/etc/docker/daemon.json

mkdir /etc/docker
vi /etc/docker/daemon.json

注:默认情况下这个docker配置文件是没有的,这里实际也就是新建一个/etc/docker/daemon.json

写入以下内容 其中/path/to/docker是自定义的docker根目录,需要保证/path/to/这个目录存在

{"data-root": "/path/to/docker"
}

然后启动docker服务

systemctl start docker.service

安装过程如下

3.1.1、docker官网安装文档

https://docs.docker.com/engine/install/binaries/

3.1.2、下载docker安装包

官方下载链接:https://download.docker.com/linux/static/stable/
选择最新版 26.1.0 下载

在这里插入图片描述

文件名:docker-26.1.0.tgz

3.1.3、安装docker 26.1.0

上传docker-26.1.0.tgz到linux服务器

cd /path/to/docker-26.1.0.tgz
tar -xzvf docker-26.1.0.tgz
cp docker/* /usr/bin/

至此安装完成docker

查看docker版本

docker --version

在这里插入图片描述

3.1.4、配置docker systemd服务

vi /etc/systemd/system/docker.service

插入以下内容

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s[Install]
WantedBy=multi-user.target

为docker.service添加可执行权限

chmod +x  /etc/systemd/system/docker.service

重新加载docker.service配置文件,使得systemctl识别docker.service

systemctl daemon-reload

配置docker.service开机自启动

systemctl enable docker.service

查看操作系统文件系统目录

df -lTh

在这里插入图片描述

编辑docker配置文件/etc/docker/daemon.json

mkdir /etc/docker
vi /etc/docker/daemon.json

注:默认情况下这个docker配置文件是没有的,这里实际也就是新建一个/etc/docker/daemon.json

写入以下内容 其中/home/docker是自定义的docker根目录

{"data-root": "/home/docker"
}

启动docker服务前执行docker info 查看docker根目录 报错:docker服务未在运行

docker info

在这里插入图片描述

启动docker服务前查看docker根目录结构,还没有创建docker根目录
在这里插入图片描述

然后启动docker服务

systemctl start docker.service

启动docker服务时,会自动创建docker根目录/home/docker
在这里插入图片描述

查看docker服务

systemctl status docker.service

在这里插入图片描述

查看docker信息

docker info

在这里插入图片描述

在这里插入图片描述

得知docke的根目录是 /home/docker

在这里插入图片描述

查看docker根目录的组织结构

ls -l /home/docker

整个根目录大小是340K、根目录下各个子目录大小如下

在这里插入图片描述

导入镜像前查看 /home/docker/overlay2

ls -l /home/docker/overlay2

在这里插入图片描述

导入redis镜像文件

在这里插入图片描述

导入mysql像文件

在这里插入图片描述

在这里插入图片描述

查看操作系统文件系统目录

df -lTh

在这里插入图片描述
启动docker前的操作系统文件系统目录如下

df -lTh

在这里插入图片描述

发现导入2个镜像后 docker根目录所在的/homr分区 就增大了差不多1G。后期docker会导入更多的镜像、docker系统日志会占用很多空间,因此在启动docker服务前先编辑配置文件选择一恶搞大的分区作为docker根目录是很重要的。

3.2、发现docker根目录爆满了,改变docker根目录为一个大的分区(支持动态扩容),事后解决根目录空间不够问题(需要迁移之前的根目录数据到新的根目录)

3.2.1、正常安装docker后 docker根目录是/var/lib/docker

3.2.1.1、官网安装文档

https://docs.docker.com/engine/install/binaries/

3.2.1.2、下载docker安装包

官方下载链接:https://download.docker.com/linux/static/stable/
选择最新版 26.1.0 下载

在这里插入图片描述

文件名:docker-26.1.0.tgz

3.2.1.3、安装docker 26.1.0

上传docker-26.1.0.tgz到linux服务器

cd /path/to/docker-26.1.0.tgz
tar -xzvf docker-26.1.0.tgz
cp docker/* /usr/bin/

至此安装完成docker

查看docker版本

docker --version

在这里插入图片描述

3.2.1.4、配置docker systemd服务
vi /etc/systemd/system/docker.service

插入以下内容

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s[Install]
WantedBy=multi-user.target

为docker.service添加可执行权限

chmod +x  /etc/systemd/system/docker.service

重新加载docker.service配置文件,使得systemctl识别docker.service

systemctl daemon-reload

配置docker.service开机自启动

systemctl enable docker.service

启动docker服务

systemctl start docker.service

查看docker服务

systemctl status docker.service

在这里插入图片描述

查看docker信息

docker info

在这里插入图片描述

在这里插入图片描述

得知docker默认的根目录是 /var/lib/docker

在这里插入图片描述

查看docker根目录的组织结构

ls -l /var/lib/docker

整个根目录大小是340K

在这里插入图片描述

根目录下各个子目录大小如下

在这里插入图片描述

3.2.2、默认根目录安装docker后,创建容器和容器数据一段时间后发现docker根目录空间不够、需要迁移根目录

3.2.2.1、创建redis、mysql容器

上传redis镜像包redis7.2.4.tar、mysql镜像包mysql8.4.0.tar到服务器
导入镜像包前查看dock镜像、docker容器都是空的

在这里插入图片描述

导入redis、mysql镜像

cd /path/to/redis7.2.4.tar
docker load -i redis7.2.4.tar
cd /path/to/mysql8.4.0.tar
docker load -i mysql8.4.0.tar

在这里插入图片描述

创建redis、mysql容器

docker run --name redis7.2.4 --user=root --net=host --privileged --cap-add=ALL -idt --log-opt max-size=64m --log-opt max-file=3 --restart=always redis:7.2.4
docker run --name mysql8.4.0 --user=root --net=host --privileged --cap-add=ALL -idt -e MYSQL_ROOT_PASSWORD=root --log-opt max-size=64m --log-opt max-file=3 --restart=always mysql:8.4.0

查看redis、mysql容器

docker ps -a

在这里插入图片描述
查看docker根目录的组织结构

ls -l /var/lib/docker

整个根目录大小是1.7G,根目录下各个子目录大小如下。仅仅是导入了redis、mysql镜像、创建了redis、mysql容器,仅仅2个容器根目录从最初docker安装后的340K增大到了1.7G,这仅仅是刚刚导入镜像和创建容器后的根目录占用量1.7G。

在这里插入图片描述

查看操作系统分区占用情况

df -lTh

在这里插入图片描述

等mysql运行一段时间后,假设是业务环境、数据表数据量非常多、很快mysql的空间占用率会急剧增大,这个占用量就在docker根目录里。因为mysql的数据量占用空间属于mysql容器、mysql容器占用空间属于docker根目录,最终导致docker根目录也就是/var/lib/docker占用量急剧增大,最终导致操作系统上docker根目录所在的分区爆满,如果操作系统docker根目录所在的分区不能动态扩容,操作系统很快就会因为docker根目录所在的分区爆满而崩溃。

这种情况下就需要考虑迁移docker根目录数据到新的docker根目录,并且修改docker配置文件指定新的docker根目录。

3.2.2.2、创建redis、mysql数据

下面创建mysql数据表,为了快速创建,直接从其他数据库中备份的sql文件恢复到mysql容器中。
创建mysql数据表前查看mysql容器中mysql根目录占用空间 占用了213M,mysql容器内部查看操作系统分区信息,发现mysql容器的根目录就是docker服务的根目录所在宿主机的分区,因此docker服务根目录一定要大,或者能够动态扩容才行,不然很快就会因为容器的占用空间增大导致docker服务根目录增大,最终导致docker服务的根目录所在宿主机的分区爆满、最终操作系统崩溃。

查看mysql容器内部的mysql配置文件/etc/my.cnf发现mysql根目录是/var/lib/mysql

cat /etc/my.cnf|grep -i dir

在这里插入图片描述

这次新安装的mysql容器数据库如下

在这里插入图片描述

直接从其他数据库中备份的sql文件恢复到mysql容器中

在这里插入图片描述

恢复mysql数据完成

在这里插入图片描述

再次查看mysql容器数据库如下

show databases;
use kgc;
select table_name,table_comment,create_time from information_schema.TABLES where table_schema='kgc';
select * from banji;

在这里插入图片描述

恢复mysql数据完成后再次查看mysql容器中mysql根目录占用空间 占用从213M增加到了352M。这是因为恢复的数据库表占用了空间。

在这里插入图片描述

mysql容器操作系统根目录占用空间从2.4G增大到了2.6G。

在这里插入图片描述

在这里插入图片描述

mysql容器数据量占用的增大,最终体现在宿主机上就是docker根目录的增大,从1.7G增大到了1.9G。

在这里插入图片描述

在这里插入图片描述

很快随着mysql容器的占用空间增大,最终会在宿主机上就是docker根目录的增大,最终导致宿主机上docker根目录所在的分区磁盘占用爆满,操作系统崩溃。怎么解决这个问题呢?只需迁移docker根目录到一个比较大的分区即可或者迁移docker根目录到一个可以动态扩展的分区,通常二者都要,把docker根目录迁移到一个空间比较大的而且可以动态扩容的分区即可。

在本博文3.2.3节中如果发现停止docker服务后和开启docker服务后,docker根目录占用空间不同,这是正常的,因为开启docker服务会拉起容器,啦气的容器占用了空间所致。
在这里插入图片描述

3.2.3、配置新的docker根目录、迁移docker根目录数据到新的根目录

停止docker服务

systemctl stop docker.service

建立新的docker根目录,执行命令df -h,找一个大的磁盘。这里指定的docker新的根目录是/home/docker

mkdir -p /home/docker

在这里插入图片描述

迁移/var/lib/docker目录下面的文件到 新的docker根目录/home/docker/home/docker

rm -rf /home/docker
cp -r /var/lib/docker   /home/docker

在这里插入图片描述

编辑docker配置文件/etc/docker/daemon.json 指定docker根目录是/home/docker

mkdir /etc/docker
vi /etc/docker/daemon.json

注:默认情况下这个docker配置文件是没有的,这里实际也就是新建一个/etc/docker/daemon.json

写入以下内容 其中/mnt/docker是自定义的docker根目录

{"data-root": "/home/docker"
}

然后启动docker服务

systemctl start docker.service

检查dockerx新的根目录是否配置成功

docker info | grep 'Docker Root Dir'

在这里插入图片描述

启动docker服务成功后,确认之前的镜像和容器还在不

docker images
docker ps -a

镜像容器都在,说明本次迁移根目录是成功的。mysql容器没有启动成功需要接下来接续排查。

在这里插入图片描述

3.2.4、重要!!!迁移docker根目录后 确认docker服务正常

3.2.4.1、检查容器启动是否正常,docker logs 查看容器启动日志
docker logs -f mysql8.4.0 --tail 200

在这里插入图片描述

日志显示是因为没有权限在/tmp下创建新的文件

在这里插入图片描述

查看/tmp 权限有写额权限

在这里插入图片描述

想到可能是mysql容器挂载目录的权限问题,查看mysql容器挂载目录

docker inspect mysql8.4.0|grep Mounts -C20

在这里插入图片描述

看宿主机上挂载目录的权限是不是1777,果然不是1777

在这里插入图片描述

查看原docker根目录下这个目录的权限是777

因此修改新docker根目录小这个目录的权限为777

systemctl stop docker.service
chmod -R 1777 /home/docker/volumes/e6265e69cc98fd7098523608fad604830884c4299dcbd6d1ea1aaaa29c6f7469/_data
systemctl start docker.service

在这里插入图片描述

然后Mysql容器后仍然报同样的错误

可能是docker根目录下其他的哪个目录权限不对 因此直接更改整个docker根目录权限是777 然后重启docker服务

systemctl stop docker.service
chmod -R 777 /home/docker/
systemctl start docker.service

查看所有容器都是正常启动的状态了

在这里插入图片描述

3.2.4.2、执行容器内部服务检测,确认容器服务的接口调用是否正常

进入mysql容器 查看数据库表和迁移docker根目录之前是否一致
登录mysql报错:mysql: [Warning] World-writable config file ‘/etc/my.cnf’ is ignored.

在这里插入图片描述

参考链接: https://www.cnblogs.com/hf8051/p/4991699.html

设置/etc/my,cnf的权限为644即可 即root用户可读写,其他用户不可写

在这里插入图片描述

再次登录mysql 报错:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)

在这里插入图片描述

这个问题重启mysql容器即可

在这里插入图片描述

然后登录mysql报错:ERROR 1524 (HY000): Plugin ‘mysql_native_password’ is not loaded

在这里插入图片描述

这个问题需要修改/etc/my.cnf 在[mysqld]下面添加一行:skip-grant-tables(加上这句话之后重启mysql就可以免输密码登录了)

在这里插入图片描述

修改后如下

在这里插入图片描述

再次重启mysql容器 可以登录进mysql

在这里插入图片描述

查看mysql root用户的auth_plugin是mysql_native_password,这个mysql版本是8.4.0 已经启用了新的auth_plugin:caching_sha2_password,默认是caching_sha2_password。
因为上面恢复数据库数据用的是其他数据库的sql备份文件(这个数据库的auth_plugin是mysql_native_password、并且密码字段也被恢复成了这个数据库的密码 所以现在已经看不到原先的密码字段是什么内容了)导致的。现在只需要更改root用户的plugin为caching_sha2_passwor之后再重置root用户密码即可。

use mysql;
select user,plugin from user;

在这里插入图片描述

重置root用户的auth_plugin为caching_sha2_password

update user set plugin='caching_sha2_password' where user='root';

在这里插入图片描述

然后就是重置root用户的密码 操作步骤如下:
如果当前root用户authentication_string字段下有内容,先将其设置为空;

select user,authentication_string,plugin from user;

在这里插入图片描述

update user set authentication_string='' where user='root';
select user, authentication_string,plugin from user;

在这里插入图片描述

然后去掉/etc/my.cnf中的 skip-grant-tables这一行,重启mysql容器

使用root用户进行登录,因为上面设置了authentication_string为空,所以可以免密码登录;

mysql -u root -p
passwrod:直接回车;

在这里插入图片描述

然后使用ALTER修改root用户密码;

修改前root密码为空

在这里插入图片描述

修改root密码为root

ALTER USER 'root'@'%' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;

在这里插入图片描述

修改root密码后如下

select user,authentication_string,plugin from user;

在这里插入图片描述

至此修改成功; 从新使用新的密码登录root用户即可;

在这里插入图片描述

再次登录mysql root用户输入正确密码root即可成功登录

在这里插入图片描述

输入错误密码不可登录

在这里插入图片描述

查询banji表的数据 和迁移docker根目录之前的数据是一样的。说明mysql容器内部服务没问题。

在这里插入图片描述

3.2.4.3、执行df -lh 查看输出确认docker根目录是否已迁移到新路径

迁移docker根目录后 宿主机操作系统执行df -lTh

df -lTh

在这里插入图片描述

迁移docker根目录后前 宿主机操作系统执行df -lTh

df -lTh

在这里插入图片描述

迁移docker根目录前后 ,宿主机操作系统执行df -lTh查看确实 docker根目录已经从/var/lib/docker变成了/home/docker

以上确认均没问题,至此,本次docker根目录迁移完成。

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

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

相关文章

网络安全之交换基础

交换属于二层技术。路由器(router)是三层设备,可以基于IP地址转发,但需要路由表来记录。 交换机(switch)是二层设备,网桥(switch)也是二层设备,这两个都是基…

zabbix监控方式(zabbix-trapper)

中文:zabbix采集器,即zabbix sender 。 Zabbix-Trapper 监控方式可以一次批量发送数据给Zabbix Server,与主动模式不同,Zabbix-Trapper 可以让用户控制数据的发送,而不用Zabbix-Agent进程控制,这意味着可以…

【算法小白周赛1A】分析 - 题解与代码

题目链接:https://www.starrycoding.com/problem/155 题目描述 小可可最近在学数学运算!他希望考考你,给你两个整数 A , B A,B A,B,询问 A B A\times B AB 是否是偶数。 注意,可能存在前导 0 0 0,比如…

与Apolo共创生态: Apollo X企业自动驾驶解决方案的亮点

文章目录 前言技术革新的里程碑Apollo X企业自动驾驶解决方案的亮点Application X企业预制套件的多场景覆盖Studio X企业协同工具链的全周期支持第一阶段:上机系统构建第二阶段:POC搭建第三阶段:规模运营小结 共创生态,共享未来共…

Sermant在异地多活场景下的实践

Sermant社区在1.3.0和1.4.0版本相继推出了消息队列禁止消费插件和数据库禁写插件,分别用于解决异地多活场景下的故障切流和保护数据一致性问题。本文将对Sermant在异地多活场景下的实践进行剖析。 一、异地多活 1.1 什么是异地多活 对于一个软件系统,…

互联网十万个为什么之什么是云计算

云计算是一种通过互联网提供计算资源和服务的技术。它允许用户随时随地访问和使用云平台上的数据、软件和硬件资源。在数字化时代,互联网已经成为基础设施。云计算使得数据中心能够像一台计算机一样去工作。通过互联网将算力以按需使用、按量付费的形式提供给用户&a…

双热点的王炸组合!损失函数+Attention,精度与速度上实现SOTA!

损失函数注意力机制在深度学习领域是一个热门研究方向,它可以提高模型的性能和泛化能力,帮助我们构建更加精确且高效的模型。 具体来说: 通过结合注意力机制的聚焦能力和损失函数的优化指导,模型能够更精确地捕捉数据中的关键信息…

如何从Windows 10电脑远程登录Ubuntu系统

要从Windows 10电脑远程登录Ubuntu系统,您可以使用以下步骤: 在Ubuntu上安装xRDP: 首先,在Ubuntu电脑上打开终端,然后输入以下命令来安装xRDP服务: sudo apt update sudo apt install xrdpxRDP是一个开源的远程桌面协议…

ES6新特性

1.let声明变量 不允许重复声明、没有变量提升 暂存性死区 let a 1 function test(){console.log(a)//undefinedlet a2 } test() 不与顶层对象挂钩 let a 1 console.log(window.a)//undefined 块级作用域 var olidocument.querySelectorAll("ul li") for(var i0…

使用pandas的merge()和join()函数进行数据处理

目录 一、引言 二、pandas的merge()函数 基本用法 实战案例 三、pandas的join()函数 基本用法 实战案例 四、merge()与join()的比较与选择 使用场景: 灵活性: 选择建议: 五、进阶案例与代码 六、总结 一、引言 在数据分析和处理…

物联网技术、测试要点和测试标准

物联网定义 物联网:利用嵌入式电子设备、微芯片等连接车辆、家电、医疗设备,以收集和交换不同类型的数据,被称为物联网。借助物联网,用户能够远程控制设备,可以实现不同设备的互联。在现实生活中物联网开始有越来越多…

【消息队列】MQ介绍

MQ MQ(MessageQueue),中文是消息队列,就是存放消息的队列,也是下面提到的事件驱动架构中的Broker 同步调用的优点: 时效性强,可以立即得到结果 同步调用的问题: 耦合度高性能和吞吐…

2022 年全国职业院校技能大赛高职组云计算赛项试卷(容器云)

#需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包…

自然语言(NLP)

It’s time for us to learn how to analyse natural language documents, using Natural Language Processing (NLP). We’ll be focusing on the Hugging Face ecosystem, especially the Transformers library, and the vast collection of pretrained NLP models. Our proj…

蓝牙连接手机播放音乐的同时传输少量数据,那些蓝牙芯片可以实现呢

简介 蓝牙连接手机播放音乐的同时连接另一蓝牙芯片传输少量数据,那些蓝牙芯片可以实现呢? 这个需求,其实就是双模的需求 简单描述就是:播放音乐的同时,还可以连接ble,进行数据的传输。二者同时进行,互不…

TCP的特性(4)

TCP特性 拥塞控制(可靠性机制)延迟应答(效率机制)捎带应答(效率机制)面向字节流(粘包问题)TCP异常机制(心跳包)小结 拥塞控制(可靠性机制) 虽然TCP引入了滑动窗口,能够高效可靠的传输大量数据,但是在开始阶段就发送大量数据,可能引起一系列问题. TCP引入了慢启动机制,先发少量的…

kafka学习笔记(三、生产者Producer使用及配置参数)

1.简介 1.1.producer介绍 生产者就是负责向kafka发送消息的应用程序。消息在通过send()方法发往broker的过程中,有可能需要经过拦截器(Interceptor)、序列化器(Serializer)和分区器(Partitioner)的一系列作用后才能被真正的发往broker。 demo: public class Kafk…

Redis-三主三从高可用集群搭建

正式搭建之前,注意事项(坑)提前放到最开始,也可以出问题回来看, (1)第二步中最好将配置文件中的logfile自定义一个目录,以便于在第五步中启动出错的时候迅速定位错误。 &#xff0…

深度学习之基于Vgg16卷积神经网络书法字体风格识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 书法是中国传统文化的重要组成部分,具有深厚的历史底蕴和独特的艺术魅力。在数字化时代&…

Springboot+Vue项目-基于Java+MySQL的入校申报审批系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…