简单的docker学习 第4章 docker容器

news2024/12/27 19:12:04

第4章 Docker容器

4.1 容器基础

4.1.1 容器启动流程

通过 docker run 命令可以启动运行一个容器。该命令在执行时首先会在本地查找指定的镜像,如果找到了,则直接启动,否则会到镜像中心查找。如果镜像中心存在该镜像,则会下载到本地并启动,如果镜像中心也没有,则直接报错。

image-20240708105930092

如果再与多架构镜像原理相整合,则就形成了完整的容器启动流程。

image-20240708105959758

4.1.2 容器运行本质

Docker 容器存在的意义就是为了运行容器中的应用,对外提供服务,所以启动容器的目的就是启动运行该容器中的应用。容器中的应用运行完毕后,容器就会自动终止。所以,如果不想让容器启动后立即终止运行,则就需要使容器应用不能立即结束。通常采用的方式有两种,使应用处于与用户交互的状态等待状态

4.2 容器创建并启动命令

对于容器的运行,有两种运行模式:交互模式与分离模式。下面通过运行 ubuntu 与tomcat 来演示这两种运行模式的不同。

4.2.1 以交互模式运行 ubuntu

首先下载ubantu,然后再进行启动

docker pull ubantu
docker run --name myubuntu -i -t ubuntu /bin/bash

命令解析

  • name 自定义容器名称
  • -i -t / -it 两个参数分别指定以交互模式运行容器,并且为容器分配一个伪终端
  • 后面的/bin/bash 用于指定容器启动后需要运行的命令为/bin 下的 bash 命令,而该命令会启动一个 bash 终端

image-20240708112214773

我们在这里运行了一个 ubuntu 系统的容器,并为其取名为 myubuntu。另外我们可以注意到,命令行前面提示部分内容发生了变化:原来显示的是[root@docker ~],而现在变为了root@f12fae5fd8ea:/#,这个就是 docker 生成的伪客户端,而数字 f12fae5fd8ea 表示的是docker 容器的 ID。

此时就可以通过 Linux 命令对该 ubuntu 系统进行操作了。不过,由于容器中的该系统是一个精简的系统,有很多常用命令是没有安装的,所以如果要使用这些命令,就需要安装。

使用exit退出,退出后容器则也进行退出,容器本质为处理用户交互的状态等待状态

image-20240708112529548

4.2.2 以交互模式运行 tomcat

我们现在使用的都是8.5.49之前的版本,包含8.5.49,之后的版本webapps内容修改到其他目录(webapps.dist),需要修改回webapp才能正常访问

docker run --name mytomcat8 -it tomcat:8.5.32 /bin/bash

image-20240708140815032

通过 ls –l 命令可查看 tomcat 根目录下的文件。注意,不支持 ll 命令,查看运行容器,发现没有tomcat,这是因为bin/bash不会启动tomcat

下面也是以交互模式运行 tomcat 容器,不同的是,该命令后没有/bin/bash,此时会真正启动 tomcat。

docker run --name tomcat8081 -it -p 8081:8080 tomcat:8.5.32

image-20240708141213147

通过路径访问 192.168.138.129:8081,-p 代表端口映射,其中8081是宿主机端口,8080是容器内tomcat启动端口,且 tomcat 的日志输出占居了命令行。

image-20240708141327396

4.2.3 以分离模式运行 tomcat

下面是以分离模式运行的 tomcat,返回的是容器 ID,其中-d 选项表示以分离模式(detached mode)运行容器,即命令在后台运行,命令的运行与宿主机的运行分离开来。

docker run --name mytomcat03 -d -p 8083:8080 tomcat:8.5.32

image-20240708142443741

使用docker ps 进行查看,发现三个服务都还在与运行状态

image-20240708142757127

可以看到,已经启动了三个 tomcat 容器。且无论是 IPv4 还是 IPv6,端口映射关系都很明确。此时通过 window 系统中的浏览器访问 docker 主机中映射的三个 tomcat 端口号就可以访问到 tomcat。

通过该访问可以知道为什么要做端口映射的原因了:为了使相同的客户端主机可以访问同一宿主机上相同端口号的不同容器

如果使用大写的 -P,则是使用系统自动分配的端口号映射到容器内的自定义端口

docker run --name mytomcat03 -d -P tomcat:8.5.32
4.2.4 以分离模式运行 **ubuntu **-d

该运行方式存在一个问题:容器使用命令启动了,但通过 docker ps 命令查看不到。再通过 docker ps –a 命令可以发现该容器,只不过其已经退出。docker ps 查看的就是 up状态的容器,由于其已经退出,所以 docker ps 查看不到。

docker run -d ubuntu:latest

image-20240708145625717

4.3 容器创建命令 create

docker create 命令仅创建容器但不启动,其用法与 docker run 非常相似。注意,其没有-d 选项。

docker create --name mytom -p 8084:8080 tomcat:8.5.32

image-20240708150048000

4.4 容器退出命令

退出容器指的是退出以交互模式运行的容器。分为两种退出方式:

4.4.1 退出并停止容器 exit
docker run --name myubuntu01 -it ubuntu:latest

在容器命令行中再运行 exit 命令后,通过 docker ps –a 可以查看到该容器已经退出了。

image-20240708150454571

4.4.2 退出不停止容器 Ctrl + P + Q

使用快捷键 Ctrl + P + Q 能够返回到了宿主机命令行。再通过 docker ps 可以查看到其是 UP 状态,说明容器退出了但并没有停止。

image-20240708150748157

注:先按下 Ctrl + P,然后再按下 Q。

4.5 容器状态查看命令

4.5.1 查看所有正在运行的容器

docker ps 命令本身查看的是所有处于运行状态的容器信息。

image-20240708151214675

4.5.2 查看所有容器 ps -a

docker ps –a 用于查看所有容器,无论是否处于运行状态

image-20240708151253576

4.5.3 查看所有容器的 ID -q
docker ps -q
docker ps -a -q

image-20240708151325069

4.5.4 查看最后创建的容器

docker ps –l 用于查看最后创建的容器,无论该容器是否处于运行状态。

docker ps -l

image-20240708153043198

4.5.5 查看最后创建的 n 个容器

docker ps –n 3 用于查看最后创建的指定个数的容器,无论该容器是否处于运行状态。

docker ps -n 1

image-20240708153152450

4.6 容器再进命令

当我们以分离模式运行了一个容器,或以交互模式运行了一个容器,但容器内部执行的命令占用了交互命令行,而此时我们又想进入到容器中对容器内部进行一些操作,此时就需要用到 exec/attach 命令了。

注意,它们只能对正在运行的容器进行操作

4.6.1 新建进程进入容器 exec

该命令也用于进入到了运行状态的容器中。对于该命令的测试,首先以分离模式运行 tomcat8 容器。此时想进入该 mytomcat 容器,就可以使用 exec 命令。

docker exec -i -t mytomcat01 /bin/bash

image-20240708153551310

此时查看正在运行的容器,发现 mytomcat 容器并未退出。说明 exec 命令会创建一个新的独立于容器的进程,而 exit 命令仅用于结束该新建进程。同样,以交互模式运行 tomcat 容器,仍是无法使用命令行的,因为 tomcat 日志输出占用了命令行

4.6.2 外部操作容器 exec

前两种都是在进入到容器后才对容器进行操作的,我们也可以不进入容器直接对容器内部进行操作。例如仅想查看 tomcat 容器中工作目录中所包含的文件,直接在 exec 命令后紧跟要执行的命令即可直接看到其结果

docker exec -i -t mytomcat01 ls -l

image-20240708153800850

4.6.3 容器附加标准输入

对于该命令的测试,首先以交互方式运行一个 ubuntu 容器,然后使用 Ctrl + P + Q 命令退出但不停止容器。

image-20240708154539582

然后使用 attach 命令进入容器命令行。此时,再使用 exit 命令退出容器。然后会发现容器也停止了。由于 exit 命令的作用是,结束当前进程,所以说明 **attach **命令并没有另外再创建新的进程,而是使用了容器进程,exit 命令退出了当前进程,也就退出了容器

image-20240708154637619

4.6.4 容器附加标准输出

启动一个 tomcat 容器与其中的 tomcat,指定容器名称为 mytom。然后通过 docker attach命令则可看到如下场景:占用了命令行,且没有任何输出,即使通过浏览器访问该 tomcat也没有任何输出。此时的 mytom 容器已经附加了标准输出,只不过,其输出的是 tomcat 的启停日志信息。

image-20240708154927837

通过 Ctrl + C 可结束 tomcat,此时可看到停止日志显示了出来。但由于此时的 tomcat已经停止,tomcat 容器已经退出,所以该 docker attach 命令也就随之结束了。

image-20240708155126116

4.7 容器内进程查看命令 top

docker top 命令用于查看指定的正在运行的容器中正在运行的进程详情,这个详情包括当前这个进程正在运行的命令。当然,如果容器中运行的进程较多,也可以通过 grep 对结果进行过滤。

docker top mytomcat01

image-20240708155413695

4.8 容器日志查看命令

docker logs [容器]可以查看指定容器中应用的运行日志,无论该容器是运行还是停止状态

4.8.1 查看所有日志 logs

docker logs 查看的是所有容器中应用的运行日志。这个日志对于不同的容器来说,其日志内容是不同的。由 docker run 命令的[command]决定(如果没有则由 Dockerfile 中的 CMD指令决定)

对启动了 tomcat 的 tomcat 容器来说,这个日志是 tomcat 启停日志。

image-20240708155628912

对于没有启动 tomcat 的 tomcat 容器来说,这个日志是/bin/bash 的运行历史记录。对于 ubuntu 容器来说,这个日志是/bin/bash 的运行历史记录。

image-20240708155923155

4.8.2 查看最后的日志 -n

通过添加选项-n 或–tail 可以指定要显示的最后几条日志

docker logs -n 5 mytomcat01

image-20240708160039698

4.8.3 查看指定时间内的日志 --since

通过添加选项–since 可以指定要显示自从指定时间以来的日志。这个时间可以是一个绝对时间,也可以是一个相对时长。

  • 下面使用的是绝对时间:显示自从 2024 年 7 月 8 日后产生日志的最后 3 条

    docker logs --since="2024-07-08" --tail=3 mytomcat01
    

    image-20240708160239406

  • 下面使用的是相对时长:显示自从 50 分钟之前产生日志中的最后 3 条。其中 m 表示分,可以使用 s 表示秒,h 表示小时

    docker logs --since="50m" --tail=3 mytomcat01
    

    image-20240708160744385

4.8.4 查看指定时间外的日志 --until

通过添加选项–until 可以指定要显示截止到指定时间之前的日志。这个时间可以是一个绝对时间,也可以是一个相对时长。下面使用的是绝对时间:显示截止到 2024 年 7 月 9 日前产生日志的最后 3 条。

docker logs --until="2024-07-09" --tail=3 mytomcat01

image-20240708160946646

下面使用的是相对时长:显示截止到 20 分钟之前产生日志中的最后 3 条。

docker logs --until=20m --tail=3 mytomcat01

image-20240708161050106

4.8.5 查看日志时间戳 -t

如果要查看某日志的详细时间戳,可以使用-t 选项。下面的命令查看的是最后 3 条日志的时间戳,并与不添加-t 的输出进行了对比。

image-20240708161256750

4.8.6 查看动态日志 tail=3
docker logs -f --tail=3 mytomcat01

通过添加选项-f 可以查看运行中容器的动态日志,以下命令用于查看 mytomcat 的最后三条动态日志。其会占用命令行,一直等待日志的输出。

image-20240708161430361

4.9 容器启停命令

4.9.1 启动 start

通过 docker start 命令可以启动已经停止的指定容器,这个容器可以通过容器名称指定,也可以通过容器 ID 指定

docker start mytomcat01

image-20240708165128686

4.9.2 重启 restart

通过 docker restart 命令可以重启处于运行状态的指定容器。

docker restart mytomcat03

image-20240708165215585

4.9.3 优雅停止 stop

通过 docker stop 命令可以优雅停止指定容器。所谓优雅停止是指,若当前容器正在被其它进程访问,则在访问结束后再停止。

docker stop mytomcat03

image-20240708165408736

4.9.4 强制停止 kill

通过 docker kill 命令可以强制停止指定容器。所谓强制停止是指,无论容器当前是否被其它进程访问都直接停止。

docker kill mytomcat03

image-20240708165526744

4.9.5 **停止所有容器 **ps -qa

无论是 docker kill 还是 docker stop,都可使用下面方式停止所有容器。因为这两个命令的参数都可以是容器 ID。

image-20240708165743860

4.9.6 暂停 pause

通过 docker pause 命令可以暂停容器对外提供服务。本身容器是没有被影响的

image-20240708165854525

4.9.7 解除暂停 unpause

通过 docker unpause 命令可解除容器的暂停服务状态

docker unpause mytomcat01

image-20240709092818146

4.10 容器删除命令

4.10.1 正常删除 rm

docker rm 命令在默认情况下,要删除的容器必须是已经停止的容器。当然,这个容器可以使用容器名或容器 ID 指定。

docker rm ubuntu02

image-20240709093218607

4.10.2 强制删除 rm -f

在 docker rm 命令中添加-f 可实现强制删除容器。即,无论容器是否停止都会删除。

docker rm -f ubuntu01

image-20240709093313473

4.10.3 删除所有容器
docker rm -f $(docker ps -aq)

image-20240709094021980

4.11 文件传递 docker cp

docker cp 命令可以完成容器与宿主机中文件/目录的相互复制,无论该容器是否处于运行状态。

4.11.1 容器文件复制宿主机 cp

将docker 中的export.tar文件拷贝到宿主机的/usr/local目录中

docker cp mytomcat01:/usr/local/tomcat/export.tar /usr/local

image-20240709100655334

4.11.2 将宿主机文件复制到容器中

以下命令用于将宿主机中当前目录下的 export.tar 文件复制到 mytomcat01 容器的/usr/local/tomcat 目录中。若要查看容器中是否已经存在了 export.tar 文件,需要首先启动该容器。

docker cp export.tar mytomcat01:/usr/local/tomcat

image-20240709094959305

4.11.3 不支持容器间的 cp

docker cp 命令不支持容器间的文件传递。

docker cp mytomcat01:/usr/local/tomcat/export.tar mytomcat02:/usr

image-20240709095341848

4.12 提交容器为镜像

通过 docker commit 命令可以将一个容器文件系统的当前快照生成为一个新的镜像。

需求:这里要在一个 Ubuntu 容器或 Centos 容器中安装 net-tools工具包。为了方便演示,这里选择 CentOS 容器,直接使用 yum 安装。当然,如果使用 Ubuntu 容器也可以,要么直接使用 apt-get 安装 net-tools,要么先安装 yum 后再安装 net-tools。

首先下载centos7

docker pull centos:7

image-20240709102918829

4.12.1 修改容器层

首先创建并启动一个容器,例如 centos:7 镜像的容器。然后发现该容器中是没有安装ifconfig 命令的

docker run --name centos01 -it centos:7

image-20240709103219004

使用ifconfig查看ip发现无此命令,安装 net-tools 网络工具命令包。如果下载提示无法解析路径,则可以先配置yum源

# 1、备份备份官方的原yum源的配置
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

# 2、下载Centos-7.repo文件
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 注意:部分小伙伴可能没有安装wget,需要先安装wget,或者用下面的命令下载repo文件
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 执行下载工具
yum install -y net-tools

image-20240709104505374

image-20240709104544323

4.12.2 生成镜像docker commit

下面要将已经安装了 ifconfig 命令的容器生成为一个镜像,以方便后期自己或他人使用

docker commit -a "lxc<lixuchun@git.com.cn>" -m "add net-tools" centos01 centos7:net-tools

这里指定生成的镜像的<repository>为 centos7,<tag>为 net-tools。

image-20240709105309382

4.12.3 使用新镜像

下面是使用新生成的镜像创建并启动一个容器,发现其中的 ifconfig 命令是可以使用的。

docker run --name mycentos7 -it centos7:net-tools

image-20240709105940909

4.12.4 生成悬虚镜像

悬虚镜像,即没有<repository>与<tag>的镜像。悬虚镜像一般都是由于某些失误操作或其它一些操作而生成的副产物,一般是要被清除掉的。如果非要使用悬虚镜像,那只能通过其 ImageID 来使用了。

下面要将已经安装了 ifconfig 命令的容器生成为一个悬虚镜像,即没有指定<repository>与<tag>

image-20240709110343574

4.13 导入/导出容器

在上一章中学习了 docker save 与 docker load 命令,分别用于导出/导入镜像。这里要学习的 docker export 与 docker import 命令分别用于导出/导入容器。

4.13.1 导出容器 export

docker export 命令用于将一个容器的文件系统导出为 tar 文件。

例如,下面的命令是将tomcat:8.5.32 镜像的容器 tomcat01 导出到当前/root 目录的 tomcat8.tar 文件中

docker export -o tomcat8.tar tomcat01

image-20240709110713510

4.13.2 导入容器 import

docker import 命令用于根据指定的 tar 文件构建新的镜像。下面的命令是将当前目录下的 tomcat8.tar 导出为镜像 mytomcat:1.0。

docker import tomcat8.tar tomcat02:1.0

image-20240709110938142

4.13.3 save/load 命令的对比
  • export save

    export 作用于容器,save 作用于镜像,但它们导出的结果都为 tar 文件

    export 一次只能对一个容器进行导出,save 一次可以对多个镜像进行导出

    export 只是对当前容器的文件系统快照进行导出,其会丢弃原镜像的所有历史记录与元数据信息,save 则是保存了原镜像的完整记录

  • import load

    import 导入的是容器包,load 加载的是镜像包,但最终都会恢复为镜像

    import 恢复的镜像只包含当前镜像一层,load 恢复的镜像与原镜像的分层是完全相同的

    import 恢复的镜像就是新构建的镜像,与原镜像的 ImageID 不同;load 恢复的镜像与原镜像是同一个镜像,即 ImageID 相同

    import 可以为导入的镜像指定<repository>与<tag>,load 加载的镜像不能指定<repository>与<tag>,与原镜像的相同

4.13.4 docker commit 的对比
  • 相同点:docker export + docker import 会将一个容器变为一个镜像,docker commit 也可以将一个容器变一个镜像。
  • 不同点:docker export + docker import 恢复的镜像仅包含原容器生成的一层分层,docker commit 生成的镜像中包含容器的原镜像的所有分层信息。

4.14 docker system 命令集

docker system 是一个命令集,其有四个子命令

docker system --help

image-20240709111821180

4.14.1 docker 磁盘占用数据 df

docker system df 用于查看 docker 各部分占用情况。

docker system df
# 如果要获取更为详细的占用情况,可添加-v 选项。
docker system df -v

image-20240709112301418

4.14.2 docker发生过的事件 events

docker system events 命令等价于 docker events 命令,可查看指定日间之内(–since)或之外(–until)在 docker 上所发生的所有事件。这些事件包含运行过的命令有 docker 内部执行的一些操作。

docker system events --since="2024-07-09"

image-20240709112500110

4.14.3 查看 docker 详情 info

docker system info命令等价于docker info,用于查看当前docker的详情。包括dockerClient与 docker Server 详情。其中 docker server 包含镜像、容器情况,docker 所在系统的软硬件情况等

docker info

image-20240709112651863

4.14.4 删除docker中无用数据 prune

docker system prune 命令用于删除 docker 中的无用数据,这些无用数据包含已经停止的容器、没有任何连接容器的网络、悬空镜像,及悬空镜像的构建缓存。

docker system prune

image-20240709112903216

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

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

相关文章

读零信任网络:在不可信网络中构建安全系统10认证身份

1. 用户所知道的信息 1.1. 只有用户本人知道的信息 1.2. 密码 1.2.1. 密码是常用的认证机制 1.2.2. 密码验证就是确认用户“所知”性的较好途径 1.2.3. 用户可以利用密码管理器来便捷地管理多个高强度密码&#xff0c;从而有效降低数据泄露风险 1.2.4. 长度足够长 1.2.4.1…

Docker数据管理,数据卷,容器服务器数据卷

一、容器的数据管理介绍 1.1 Docker容器分层 Docker镜像由多个只读层叠加而成&#xff0c;启动容器时&#xff0c;Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。 如果运行中的容器修改了现有的一个已经存在的文件&#xff0c;那该文件将会从读写层下面的只读层复制到…

GroupMamba实战:使用GroupMamba实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

基于NSGAII的的柔性作业调度优化算法MATLAB仿真,仿真输出甘特图

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于NSGAII的的柔性作业调度优化算法MATLAB仿真,仿真输出甘特图,完工时间:,延期,机器负载,机器能耗。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 &a…

Stack Overflow2024年度调查:76%的程序员正在或计划使用AI工具!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之路不迷路,2024我们一起变强。 1. 最受…

零售EDI:OBI欧倍德EDI项目案例

OBI欧倍德公司是德国建材和家居装饰零售连锁店&#xff0c;在德国以及其他欧洲国家拥有众多分店&#xff0c;是欧洲领先的DIY&#xff08;Do It Yourself&#xff09;零售商之一。为了更好地处理与全球供应商之间的业务数据往来&#xff0c;OBI采用EDI提高其供应链的自动化水平…

继承(一)

概念&#xff1a;继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象 程序设计的层次结构&#xff0c…

基于Verilog HDL的FPGA开发入门

在电子设计自动化领域&#xff0c;FPGA&#xff08;现场可编程门阵列&#xff09;是一种强大的工具&#xff0c;它允许设计者在硬件层面上实现自定义的逻辑电路。Verilog HDL&#xff08;硬件描述语言&#xff09;是描述FPGA设计的主要语言之一&#xff0c;以其简洁性和强大的功…

工具收集 - tinytask(相当于迷你的按键精灵)

工具收集 - tinytask&#xff08;相当于迷你的按键精灵&#xff09; 简介首页 简介 TinyTask 是一款极简主义的 PC 自动化应用程序&#xff0c;您可以用它来记录和重复操作。顾名思义&#xff0c;它小得令人难以置信&#xff08;仅 36KB&#xff01;&#xff09;&#xff0c;极…

调度系统之Oozie

Apache Oozie 是一个工作流调度系统&#xff0c;专门设计用于管理在 Apache Hadoop 平台上运行的工作流。Oozie 提供了丰富的功能&#xff0c;使得大规模数据处理任务的调度和管理变得更加高效和灵活。以下是对 Oozie 的详细介绍&#xff1a; 核心功能 1. 工作流管理 Oozie 允…

营养学基础

目录 一&#xff0c;指标概念 二&#xff0c;中国居民膳食矿物质 三&#xff0c;婴儿奶粉矿物质计算 1&#xff0c;冲奶粉 2&#xff0c;奶粉营养表 3&#xff0c;计算示例 一&#xff0c;指标概念 简单来说&#xff0c;UL是上限&#xff0c;其他3个是推荐值。 RNI的可信…

牛客JS题(二十四)验证是否是身份证

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 正则表达式一代与二代身份证判断 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><style>/* 填写样式 */</style></head><…

【旧数字组合新数字】有1,2,3,4个数字,求能组成多少个互不相同且无重复数字的三位数,都是多少

有1&#xff0c;2&#xff0c;3&#xff0c;4个数字&#xff0c;求能组成多少个互不相同且无重复数字的三位数&#xff0c;都是多少&#xff0c;使用C语言实现 具体代码&#xff1a; #include<stdio.h>int main(){int i,j,n;for(i1;i<5;i){for(j1;j<5;j){for(n1;…

消灭星星游戏程序设计【连载十】——小星星的残影轨迹

消灭星星游戏程序设计【连载十】——小星星的残影轨迹 大家每次都可以在页面中下载本节内容的实现代码&#xff0c;一步一步从简单开始&#xff0c;逐步完成游戏的各种功能&#xff0c;如果大家有任何问题也欢迎留言交流。 游戏整体效果展示&#xff1a; 1、本节要达到的效果 …

【Mind+】掌控板入门教程05 心情灯

大自然的各种色彩使人产生各种感觉&#xff0c;心理学家认为&#xff0c;不同的颜色会让人产生不同的情绪。比如&#xff0c;红色通常给人刺激、热情和幸福的感觉&#xff0c;而绿色作为自然界中草原和森林的颜色&#xff0c;给人以理想、年轻、新鲜的感觉&#xff0c;蓝色则让…

MediaHub中的卡片实现进展汇报

今天刚从家赶到北京&#xff0c;北京和内蒙的温度差别真的太大了。给大家简单汇报一下目前MediaHub的进展&#xff1a; 上节卡片需求我们分析了gamma中卡片的设计&#xff0c;经过几天的开发以及前期的积累&#xff0c;开发进度超预期&#xff0c;功能基本上已经开发完成&#…

认识Mybatis和搭建Mybatis初始环境(Java)

首先我们需要知道在Java中连接数据库的底层就是JDBC&#xff0c;但是JDBC存在诸多弊端&#xff0c;如硬编码&#xff0c;代码重复度高&#xff0c;SQL参数固定&#xff0c;属于底层技术&#xff0c;结果集映射麻烦等。为了解决这些弊端&#xff0c;官方为我们提供了一些ORM模型…

基于大数据的混合音乐推荐系统的设计与设计(论文+源码)_kaic

摘 要 随着数据的不断增长和用户对随听随播的收听方式的习惯&#xff0c;开发一款音乐推荐系统变得越来越必要。为了满足这一需求&#xff0c;本论文采用Java语言、Vue以及数据库MySQL进行开发。系统的主要功能包括登录注册、音乐分类管理、音乐推荐管理、音乐资讯管理、音乐库…

Nacos-2.4.0最新版本,postgresql插件适配器修改分享

1. 背景 自前段时间&#xff0c;发表的一篇博文“Nacos-2.4.0最新版本docker镜像&#xff0c;兼容postgresql最新版本17和16” 有网友在评论区叫我出个修改源码的过程&#xff0c;今天就给大家简单分享一下关于“Nacos最新版&#xff08;2.4.0&#xff09;的postgresql插件适…

一些主流在线测长仪品牌!几毫米到几十米均可检测!

在线测长仪应用于生产线中长度尺寸检测&#xff0c;在各种产品中&#xff0c;总有形形色色的产品需要对长度进行检测&#xff0c;本文介绍3个测长仪品牌。 深圳市中图仪器股份有限公司 中图 SJ5100系列测长仪采用超高精度全自动光栅测长机&#xff0c;在 SJ5100光栅测长机的基础…