【Docker】Docker简介

Docker简介

📋导航

  • 1. Docker简介
    • 1.1 什么是Docker?
    • 1.2 什么是容器?
    • 1.3 容器的优势?
    • 1.4 Docker的优势?
    • 1.5 虚拟技术与容器技术Docker的区别?
    • 1.6 为什么学习Docker?
  • 2. 安装Docker
  • 3. Docker架构
  • 4. Docker命令
    • 4. 1 Docker镜像
      • (1)查看所有的镜像
      • (2)搜索镜像
      • (3)下载镜像
      • (4)删除镜像
    • 4.2 Docker容器
      • 4.2.1 创建并运行容器
        • (1)运行交互式容器
        • (2)运行守护式容器
      • 4.2.2 查看容器信息
      • 4.2.3 退出容器
      • 4.2.4 删除容器
      • 4.2.5 启动和停止容器
      • 4.2.6 进入当前正在运行的容器
    • 4.3 其它
      • (1)查看日志
      • (2)从容器内拷贝文件到主机上
  • 5. Docker应用实验

1. Docker简介

1.1 什么是Docker?

  • Docker是一个容器引擎,提供了一套完整的容器解决方案。
  • Docker是2014年最火热的开源项目,由Docker公司 (www.docker.com)领导开发,基于Apache 2.0开源授权协议发行。
  • Docker是用Go语言开发的,其源码在https://github.com/docker/docker。
  • Docker的官方文档在https://docs.docker.com,该文档非常详细,是学习Docker的最佳途径。

1.2 什么是容器?

  • 容器是一种历史悠久的虚拟化技术,如OpenVZ, Solaris上的Zones, Linux上的LXC等,都是容器的不同实现方式。
  • 一个容器实质上就是运行在宿主机上的一个进程。只不过在启动这个进程之前,进行了一些特殊处理,让这个进程进入了一个全新的虚拟环境,与宿主机环境分开。所以这个进程以及它的子进程认为自己运行在一个独立的世界里面。

【宿主机】宿主机是指在虚拟化技术中扮演主要角色的计算机系统。通俗来说,它就像是一个大管家,负责管理和运行虚拟机(虚拟操作系统)的环境。

宿主机通常具备强大的硬件配置,比如处理器、内存和存储空间等。它运行着一个特殊的软件,被称为虚拟化软件或虚拟机监视器。这个软件的作用就是将宿主机的计算资源划分成多个独立的虚拟机,每个虚拟机都可以独立运行一个完整的操作系统和应用程序。

宿主机提供了一种令人惊叹的能力,即可以同时运行多个不同的操作系统和应用程序。例如,你可以在一台宿主机上运行一个 Windows 虚拟机和一个 Linux 虚拟机,它们彼此之间相互隔离,就像是在不同的物理机器上运行一样。
在这里插入图片描述

1.3 容器的优势?

相比于传统的KVM、ZEN等虚拟化及半虚拟化技术来说:

  • 创建容器速度快,速度在1秒左右,而传统虚拟机需要15秒以上
  • 删除容器速度快,速度也在几秒左右
  • 容器运行占用的额外开销非常小。在一个宿主机上,能运行的容器数量更多

正因为容器的这些轻、快的特点,所以容器技术又叫做轻量虚拟化技术,在很多场合下,容器技术比传统虚拟化技术更有优势。

1.4 Docker的优势?

Docker之前的各种容器技术,最大问题是使用起来不方便,只有少数技术高手才能熟练应用。而Docker最大的优势,就是让容器的管理变得极其方便,不需要掌握高深的技术就能使用。正是Docker的出现,才使得容器技正所谓“旧时王谢堂前燕,飞入寻常百姓家”术开始大规模应用起来。

没有容器之前,我们本地部署正常的应用程序到了生产环境很容易出现问题,经常修复各种部署错误就要花费数天的时间。有了容器之后,就不存在这种问题了。容器通过操作系统虚拟化的方式,为应用程序提供了环境兼容性和平台无关性。

以 Docker 为首的容器工具提出了“一次构建,到处运行”的口号。Docker的集装箱思想,隔离机制,将容器隔离开来,项目与环境一起打包(镜像),把镜像放在Docker仓库(Docker Hub)中,要使用的时候直接下载镜像即可。

1.5 虚拟技术与容器技术Docker的区别?

  • 虚拟技术:通过安装vmware软件虚拟出多台电脑(隔离出多台虚拟机),启动速度慢(几分钟),笨重(几个G)

传统的虚拟机要虚拟出一条硬件,运行一个完整的操作系统,在这个系统上安装和运行软件。

  • 容器化技术:Docker同样是隔离机制,但只需要运行镜像即可,启动速度快几秒,轻巧(几M、KB)

容器之间相互隔离,每个容器内部都有自己的文件系统,互不影响,容器没有自己的内核,轻便。

1.6 为什么学习Docker?

Docker很可能改变传统的软件“交付”方式和“运行”方式,也可能在绝大多数场合取代传统虚拟机的地位。因此整个IT界都在积极探索如何运用Docker来进行技术变革。

  • 可以跟上技术的发展趋势
  • 可以系统学习Linux各种知识,包括进程、文件系统、网络、设备管理等各方面
  • 可以把Docker源码当做学习Go语言的最佳参考
  • 可以通过Docker来了解开源社区是如何运作的
  • 可以尝试在工作中应用Docker来解决实际问题

2. 安装Docker

目前Docker已可以安装到绝大多数Linux发行版上,包括Ubuntu、Centos、Redhat等,也可以安装到苹果的Mac OS上。在各种操作系统上安装Docker的详细步骤:https://docs.docker.com/installation/ 。以下以Ubuntu上22.04为例,安装Docker稳定版。

  1. 通过uname -i,如果是x86 64则为64位系统;确认Linux内核版本>= 3.10,通过uname-r可以查看到内核版本信息
    在这里插入图片描述

  2. 从Ubuntu官方仓库安装Docker稳定版,通过 apt-get 命令来安装软件:
    更新仓库:sudo apt-get update
    在这里插入图片描述
    安装Docker:sudo apt-get install docker.io
    在这里插入图片描述

  3. 启动和停止Docker Server
    (sudo用于普通用户可以使用root权限来执行指定命令)
    启动:sudo service docker start
    停止:sudo service docker stop
    重启:sudo service docker restart

3. Docker架构

Docker是一个经典的CS架构:

  • Docker Server:它是一个守护进程(Daemon),即一直运行在后台,它其中内嵌了一个Web Server。
  • Docker Client:它是一个命令行工具,通过HTTP协议与Docker Server交互。巧妙的是,Docker Server与Docker client共用同一个可执行文件。通过 which docker这个命令就可以找到它安装后的路径

【CS架构】:CS架构是Client-Server架构的缩写,即客户端-服务器架构。它是一种常见的计算机系统架构,用于构建分布式系统和网络应用。

在CS架构中,系统被分为两个主要部分:客户端和服务器。客户端是用户与之交互的界面,它通常运行在用户的计算设备上,例如个人电脑、手机或平板电脑。服务器则负责处理客户端的请求,并提供相应的服务或资源。客户端和服务器通过网络进行通信。客户端发送请求给服务器,并等待服务器的响应。服务器接收到请求后,执行相应的操作,然后将结果返回给客户端。这种请求-响应的通信模型是CS架构的核心特点。CS架构的优点在于它具有良好的可扩展性和灵活性。通过将服务集中在服务器上,可以实现统一的管理和资源共享。客户端可以简单地通过网络访问服务器上的服务,而无需关心服务的具体实现和部署。

在Docker中,客户端可以是开发人员使用的Docker命令行工具或者Docker图形界面工具,用于管理和操作容器。而服务器则是Docker守护进程,负责接收和处理客户端的请求,并管理容器的创建、运行和销毁。

在这里插入图片描述

在这里插入图片描述

4. Docker命令

查看所有命令的使用方法:https://docs.docker.com/engine/reference/commandline/docker/

4. 1 Docker镜像

每个Docker容器运行在独立的虚拟环境中,虚拟环境包括多个方面,其中最重要的就是独立的文件系统,在这个文件系统中的读写操作,既不影响宿主机的文件系统也不影响其它容器的文件系统。

我们可以简单的把Docker镜像理解成一个目录。Docker Server在启动容器的时候,根据这个镜像目录复制出一个新的目录。当容器的进程启动时,会把这个进程的根目录(也就是文件系统的根目录)设置为这个新的目录。这样,新的目录就成为容器的根文件系统 (rootfs)。

(1)查看所有的镜像

命令:docker images

  • IMAGE ID镜像的唯一的ID
  • TAG镜像的版本标签,每个镜像上可以打上一个或多个TAG标签
  • Repository镜像的仓库源,每个镜像存储在一个仓库中,找到镜像可以下载和运行
  • Repository:TAG唯一标识了一个镜像
  • CREATED:镜像的创建时间
  • SIZE:镜像的大小
    在这里插入图片描述

(2)搜索镜像

命令:docker search 镜像名称

在这里插入图片描述
在这里插入图片描述

(3)下载镜像

命令:docker pull 镜像名称[:tag] (没有带上tag,则默认下载最新版本的镜像)

lin@lin-virtual-machine:~/桌面$ docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
b193354265ba: Pull complete    # 分层下载
14a15c0bb358: Pull complete 
02da291ad1e4: Pull complete 
9a89a1d664ee: Pull complete 
a24ae6513051: Pull complete 
b85424247193: Pull complete 
9a240a3b3d51: Pull complete 
8bf57120f71f: Pull complete 
c64090e82a0b: Pull complete 
af7c7515d542: Pull complete 
Digest: sha256:c0455ac041844b5e65cd08571387fa5b50ab2a6179557fd938298cab13acf0dd   # 签名:防伪标记
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest   # 镜像的真实地址
# docker pull mysql = docker pull docker.ip/library/mysql:latest
lin@lin-virtual-machine:~/桌面$ docker pull mysql:5.7    # 下载指定的版本号,版本号可以在Docker Hub中查看
5.7: Pulling from library/mysql
70e9ff4420fb: Pull complete 
7ca4383b183f: Pull complete 
3e282e7651b1: Pull complete 
1ffa0e0ca707: Pull complete 
6eb790cf6382: Pull complete 
b4b277ff2929: Pull complete 
692fe4469429: Pull complete 
c0d447d97bbd: Pull complete 
99ee594517ba: Pull complete 
a9ae52de4d77: Pull complete 
66cc05a182b5: Pull complete 
Digest: sha256:2c23f254c6b9444ecda9ba36051a9800e8934a2f5828ecc8730531db8142af83
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

(4)删除镜像

官网原话:You can remove an image using its short or long ID, its tag, or its digest.

命令:
docker rmi 镜像名 通过镜像名删除某个镜像
docker rmi -f 镜像ID 通过镜像ID删除某个镜像
docker rmi -f 镜像1ID 镜像2ID 镜像3ID 批量删除多个镜像
docker rmi -f $(docker images -aq) 显示所有的镜像ID,将ID作为参数传入,递归删除所有镜像

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 Docker容器

  • -i-t 这两个选项经常一起使用,可以缩写为-it,用于创建交互式容器
  • -d,让容器运行在后台,用于创建守护式容器
  • --name 为容器指定一个名称
    容器运行成功后,会返回一个64字符的容器ID,作为容器的唯一标识。类似于镜像ID,容器ID也可以采用简写形式。

4.2.1 创建并运行容器

有镜像才可以创建容器

命令:docker run [可选参数] image,通过 docker help run命令可以看到可选参数

  • -d 后台方式运行容器
  • -it 使用交互的方式运行,可以进入容器查看内容
  • -p 随机指定容器的端口
  • -P 指定容器的端口
  • --name="容器名字" 用来区分运行的是哪个容器

docker run的运行流程:docker run某个镜像之后,先会在本地找这个镜像,如果有的话直接运行即可,如果没有的话,会到Docker Hub仓库中下载。判断Docker Hub是否能够找得到这个镜像,如果找不到则报错,找得到则下载这个镜像到本地,然后运行镜像。

如果从Docker官方Registry拉取镜像速度很慢,可以尝试 daocloud 提供的加速器服务,详细使用方法见:https://dashboard.daocloud.io/mirror
在这里插入图片描述

(1)运行交互式容器

【例如】通过如下命令来运行一个交互式容器:docker run -it centos:6 /bin/bash

  • -it:指定要创建交互式容器
  • centos:6:指定了使用CentOS 6镜像作为容器的基础
  • /bin/bash: 在容器内部启动一个bash shell进程

通过如上命令,我们启动了新的shell,并运行在容器环境中。由于是一个交互式容器,所以我们会离开当前的shell,被这个新的shell带入到容器的虚拟世界中,此后我们在这个shell里面执行的任何命令,都是相对于这个虚拟世界的。当我们在新的shell里面执行 exit ,就结束了这个 bash 进程,从而也结束了这个容器,我们从虚拟世界又返回到宿主机的现实世界。

【解释】

当我们在计算机上打开终端或命令行界面时,我们可以输入各种指令来告诉计算机做什么。这些指令需要被一个程序来解释和执行。而这个程序就是命令解释器。

在Linux系统中,Bash(Bourne Again SHell)是最常用的命令解释器之一。它是一种强大而灵活的工具,提供了一个交互式的命令行界面,类似于我们在终端中看到的命令提示符,让用户能够与计算机进行交互。

当我们在Docker容器中运行命令时,我们可以指定要在容器内启动的进程或应用程序。而/bin/bash就是一个路径,表示在容器内部启动一个bash shell进程。而bash shell提供了一个命令行界面,允许我们在容器内执行各种命令,并与容器进行交互。通过使用bash shell,我们可以在容器内部运行程序、配置环境、管理文件等。

所以,当我们在Docker中使用docker run -it centos:6 /bin/bash命令时,我们实际上是在基于CentOS 6的Docker容器中启动了一个交互式的bash shell进程,以便我们可以在容器内部执行命令并进行各种操作。

如下图所示:通过命令与容器进行交互,其中89afd7cf4104是容器ID;通过exit命令从容器中退回主机。

在这里插入图片描述

(2)运行守护式容器

交互式容器适合一些临时性的任务,当退出bash的时候,交互式容器的生命也就结束了。大多数场合下,我们需要的是守护式容器。需要注意的是,后台启动容器需要一个前台进程,否则docker发现没有应用,会自动停止容器,docker ps后无法看到容器正在运行。

【例如】通过如下方式运行守护式容器:docker run -d redis

  • -d: 创建守护式容器
  • redis:镜像名称,这里只有仓库名称,没有指定TAG,那么就使用默认TAG是最新版latest
  • 没有指定命令:那么会使用镜像所提供的默认命令。redis镜像的默认命令是/entrypoint.sh redis-server

守护式容器运行在后台,这样我们就可以继续留在当前shell中进行其它操作,如查看日志等,而不会受到容器运行的影响。相反,交互式容器运行则是在前台运行,意味着容器启动后会占用当前的终端或命令行界面,并一直处于运行状态,直到我们退出容器或关闭终端。
在这里插入图片描述

4.2.2 查看容器信息

  • docker ps:查看容器的基本信息
  • docker ps -a:列出所有正在运行的容器+历史运行过的容器
  • docker ps -n=?:列出最近创建的n个容器
  • docker ps -q:只显示正在运行的容器ID

在这里插入图片描述

  • docker inspect [容器ID]:查看容器的详细信息(查看元数据)
    返回的信息是JSON格式的,有时候我们需要获取这些信息来进行二次开发,例如容器的IP地址。

在这里插入图片描述

  • docker inspect -f 可以指定查看某种信息,例如查看容器的IP地址:
    docker inspect -f '{{.NetworkSettings.IPAddress}} ' [容器ID]
  • docker top 容器ID查看容器进程信息

在这里插入图片描述

4.2.3 退出容器

  • exit:停止容器并退出
  • ctrl + p + q :容器不停止,但退出

4.2.4 删除容器

  • 指定容器删除:docker rm [容器ID] (但不可以删除正在运行的容器,如果要强制删除,docker rm -f 容器ID
  • 删除所有容器:
  • docker rm -f $(docker ps -aq) (将所有的容器ID作为参数传入,递归删除)
  • docker ps -a -q | xargs docker rm(docker ps -a -q显示所有的容器ID,管道会将第一个命令的输出传递给下一个命令作为输入,所以所有的容器ID会作为下一个命令的输入条件。使用xargs命令将前一个命令的输出作为参数传递给docker rm命令)

4.2.5 启动和停止容器

  • 启动容器:docker start 容器ID
  • 重启容器:docker restart 容器ID
  • 停止当前正在运行的容器:docker stop 容器ID
  • 强制停止当前正在运行的容器:docker kill 容器ID

在这里插入图片描述

4.2.6 进入当前正在运行的容器

  • docker exec -it 容器ID bin/bash 以交互模式进入容器,exec是处理,-it表示交互
  • docker attach 容器ID

两者的区别:

  • docker exec是进入一个容器后开启一个新的终端,可以在容器里面操作
  • docker attach是进入容器正在执行的终端,不会启动新的进程

4.3 其它

(1)查看日志

  • 先编写一段shell脚本,在后台运行容器
  • 查看容器是否有在运行
  • 查看所有日志:docker logs [options] 容器ID

在这里插入图片描述
在这里插入图片描述

(2)从容器内拷贝文件到主机上

命令:docker cp 容器ID:容器内的路径 目标主机的路径

# 查看当前主机目录下的文件 
[root@iZwz9dbn6uh906or4aq72kZ /]# cd /home 
[root@iZwz9dbn6uh906or4aq72kZ home]# ls 
ecs-assist-user # 查看正在运行的容器 
[root@iZwz9dbn6uh906or4aq72kZ home]# docker ps 
CONTAINER ID   IMAGE    COMMAND               CREATED       STATUS       PORTS    NAMES 
71b9201fa758   centos  "/bin/sh -c 'while t…" 3 hours ago   Up 3 hours            nostalgic_ride 
c426cb0f4bc5   centos  "bin/bash"             8 hours ago   Up 8 hours            inspiring_elbakyan # 进入docker容器内部 
[root@iZwz9dbn6uh906or4aq72kZ home]# docker attach c426cb0f4bc5 
[root@c426cb0f4bc5 /]# cd /home  # 在容器中的目录下创建文件 
[root@c426cb0f4bc5 home]# touch test.java 
[root@c426cb0f4bc5 home]# ls 
test.java 
[root@c426cb0f4bc5 home]# exit 
exit# 将容器中目录下的文件拷贝到主机里的目录下 
[root@iZwz9dbn6uh906or4aq72kZ home]# docker cp c426cb0f4bc5:/home/test.java /home
[root@iZwz9dbn6uh906or4aq72kZ home]# ls 
ecs-assist-user test.java # 拷贝是手动的,可以使用-v卷技术自动实现

5. Docker应用实验

实验描述:

  1. 先创建一个守护式容器A运行Redis Server
  2. 再创建一个交互式容器B,在里面安装Redis客户端
  3. 最后使用Redis客户端去访问Redis Server

本实验模拟了需要两个机器,分别运行客户端和服务端程序的场景

  1. docker run -d ....
    docker inspect -f '{{.NetworkSettings.IPAddress}} ' [A的容器ID]
  2. docker run -it .... /bin/bash
    apt-get install redis-server
    redis-cli
  3. redis-cli -h 容器A的IP地址
    做redis的基本操作

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

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

相关文章

碎片笔记 | 大模型攻防简报

前言:与传统的AI攻防(后门攻击、对抗样本、投毒攻击等)不同,如今的大模型攻防涉及以下多个方面的内容: 目录 一、大模型的可信问题1.1 虚假内容生成1.2 隐私泄露 二、大模型的模型安全问题(传统AI攻防&…

Apache Doris 2.0 如何实现导入性能提升 2-8 倍

数据导入吞吐是 OLAP 系统性能的重要衡量标准之一,高效的数据导入能力能够加速数据实时处理和分析的效率。随着 Apache Doris 用户规模的不断扩大, 越来越多用户对数据导入提出更高的要求,这也为 Apache Doris 的数据导入能力带来了更大的挑战…

Unity ProBuilder(自己创建斜面、拐角)

目录 基础操作 下载 打开面板 新增对象 材质保存 1.斜面实例 2.拐角实例 3.切割实例 4.单独面赋值 基础操作 下载 打开面板 新增对象 选中想创建的块体后,在编辑器见面拉出块体 材质保存 打开材质编辑器后,将材质赋值,之后&am…

简单记录一下Splunk ES 升级

1: 背景: 现在有些app 产品对splunk ES (enterprise security) 的版本有要求,这个就要求splunk ES 随着Splunk enterprise 也一起升级,下面先列一下各个版本的兼容: Splunk products version compatibility matrix - Splunk Documentation 下面列出的8.2.11 的版本: 2:…

2023/9/13 -- C++/QT

作业&#xff1a; 1> 将之前定义的栈类和队列类都实现成模板类 栈&#xff1a; #include <iostream> #define MAX 40 using namespace std;template <typename T> class Stack{ private:T *data;int top; public:Stack();~Stack();Stack(const Stack &ot…

时序数据库 TimescaleDB 安装与使用

TimescaleDB 是一个时间序列数据库&#xff0c;建立在 PostgreSQL 之上。然而&#xff0c;不仅如此&#xff0c;它还是时间序列的关系数据库。使用 TimescaleDB 的开发人员将受益于专门构建的时间序列数据库以及经典的关系数据库 (PostgreSQL)&#xff0c;所有这些都具有完整的…

数据库与身份认证

1. 数据库的基本概念 1.1 什么是数据库 数据库&#xff08;database&#xff09;是用来组织、存储和管理数据的仓库。 当今世界是一个充满着数据的互联网世界&#xff0c;充斥着大量的数据。数据的来源有很多&#xff0c;比如出行记录、消费记录、浏览的网页、发送的消息…

防火墙(Firewall)

目录 一、概述 二、iptables 三、iptable的用法 一、概述 防火墙的作用 用于保护内网安全的一种设备 依据规则进行防护 用户定义规则 允许或拒绝外部用户访问 防火墙分类 逻辑上划分&#xff0c;防火墙可以大体分为主机防火墙和网络防火墙主机防火墙&#xff1a;针对…

Redis缓存设计与性能优化

多级缓存架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c; 缓存层和存储层都不会命中&#xff0c; 通常出于容错的考虑&#xff0c; 如果从存储层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询&#xff0c; 失去…

WebDAV之π-Disk派盘 + BubbleUPnP

BubbleUPnP是一款功能强大的Android播放器,支持UPnP/DLNA多屏互动。它可以将手机内容投屏到电视大屏上,与家人和朋友一起共享。此外,BubbleUPnP还提供了丰富的音乐和影视资源,您可以在线搜索并播放喜欢的内容。 以下是BubbleUPnP的一些主要特点: 1. 支持Chromecast和转码…

在PHP8中向数组添加元素-PHP8知识详解

在php8中向数组添加元素有多种方法&#xff0c;在这里主要讲解几个常用的方法&#xff1a;使用方括号[]添加元素、使用array_unshift()函数&#xff0c;向数组的头部添加元素、使用array_push()函数&#xff0c;向数组的尾部添加元素、使用array_splice()函数添加元素。 1、使用…

【新版】系统架构设计师 - 软件架构设计<SOA与微服务>

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 架构 - 软件架构设计&#xff1c;SOA与微服务&#xff1e; 考点摘要 面向服务SOA&#xff08;★★★★&#xff09;微服务&#xff08;★★★★&#xff09; 基于/面向服务的&#xff08;SOA&#xff09; 在SO…

【深度学习-注意力机制attention 在seq2seq中应用】

注意力机制 为什么需要注意力机制attention机制的架构总体设计一、attention本身实现评分函数 attention在网络模型的应用-Bahdanau 注意力加性注意力代码实现 为什么需要注意力机制 这是一个普通的seq2seq结构&#xff0c;用以实现机器对话&#xff0c;Encoder需要把一个输入的…

Linux下的系统编程——信号(十一)

前言&#xff1a; 信号在我们的生活中随处可见&#xff0c; 如&#xff1a;古代战争中摔杯为号&#xff1b;现代战争中的信号弹&#xff1b;体育比赛中使用的信号枪...... 他们都有共性&#xff0c;信号是信息的载体&#xff0c;Linux/UNIX 环境下&#xff0c;古老、经典的通信…

SpringBoot系列(12):SpringBoot集成log4j2日志配置

最近项目上有使用到log4j2日志模板配置&#xff0c;本文简单总结一下之前的学习笔记&#xff0c;如有纰漏之处&#xff0c;请批评指正。 1. log4j2日志依赖 使用log4j2日志模板时&#xff0c;需要引入相关依赖&#xff0c;下边的两种依赖方式均可。 1.1 使用sl4j依赖时 <…

Mapbox加载arcgis的底图

成果图 这种底图基本上都是按照raster来加载的&#xff0c;主要就是知道地址了&#xff0c;拼参数 具体参数请参考官网 https://developers.arcgis.com/rest/services-reference/enterprise/export-map.htm 源码 我的服务列表是这样的 http://XXXX:XXXX/arcgis/rest/services/…

电子游戏冷知识

电子游戏一直在试图用技术还原一个真实或虚幻的世界&#xff0c;并在其中演绎和倾诉人类种种的情感和欲望。 对信息技术发展的贡献 游戏推动了芯片、网络、VR/AR等领域的技术进步和创新。根据中科院的研究报告&#xff0c;游戏技术对芯片产业的科技进步贡献率是14.9%&#xff…

Android13 大屏设备底部显示TaskBar并NavagatonBar居右

Android 13大屏设备时底下显示任务栏以及虚拟按键靠右的问题&#xff0c; 当前需求是去掉底部任务栏的显示&#xff0c;并把虚拟按键导航栏居中显示。 修改前的效果&#xff1a; 修改后的效果&#xff1a; 通过查看源码逻辑&#xff0c;可以发现只需把isTablet相关的逻辑和…

Vue3路由

文章目录 Vue3路由1. 载入vue-router 库2. 实例2.1 Vue.js vue-router 实现单页应用2.2 router-link创建链接2.3 router-view显示与url对应组件2.4 <router-link> 相关属性 Vue3路由 1. 载入vue-router 库 Vue.js 路由需要载入vue-router 库 安装直接下载地址&#xf…

【陕西理工大学-数学软件实训】数学实验报告(8)(数值微积分与方程数值求解)

目录 一、实验目的 二、实验要求 三、实验内容与结果 四、实验心得 一、实验目的 1. 掌握求数值导数和数值积分的方法。 2. 掌握代数方程数值求解的方法。 3. 掌握常微分方程数值求解的方法。 二、实验要求 1. 根据实验内容&#xff0c;编写相应的MATLAB程序&#xff0c…