Docker-Dockerfile-DockerCompose的那些事

news2024/9/17 7:28:45

文章目录

      • 一、Docker背景
        • 1.1 环境不一致
        • 1.2 隔离性
        • 1.3 弹性伸缩
        • 1.4 学习成本
      • 二、Docker介绍
        • 2.1 Docker的由来
        • 2.2 Docker的思想
      • 三、Docker的安装
        • 3.1 下载Docker依赖的环境
        • 3.2 指定Docker镜像源
        • 3.3 安装Docker
        • 3.4 Docker服务启停
        • 3.5 Docker容器运行解析
        • 3.6 Docker运行流程解析
        • 3.7 Docker运行流程
      • 四、Docker的中央仓库【`重点`】
      • 五、镜像的操作【`重点`】
        • 5.1 拉取镜像
        • 5.2 查看本地全部镜像
        • 5.3 删除本地镜像
        • 5.4 镜像的导入导出
      • 六、容器操作【`重点`】
        • 6.1 运行容器
        • 6.2 查看正在运行的容器
        • 6.3 查看容器日志
        • 6.4 进入容器内容部
        • 6.5 容器与宿主机内容相互复制
        • 6.6 重启&启动&停止&删除容器
      • 七、Docker应用
        • 7.1 Docker安装Tomcat
        • 7.2 Docker安装MySQL
      • 八、数据卷 - 目录映射【`重点`】
        • 8.1 创建数据卷
        • 8.2 查看数据卷详情
        • 8.3 查看全部数据卷
        • 8.4 删除数据卷
        • 8.5 容器映射数据卷
      • 九、Dockerfile自定义镜像
        • 9.1 Dockerfile定义
        • 9.2 Dockerfile文件格式
        • 9.3 Dockerfile内容
        • 9.4 通过Dockerfile制作镜像命令
        • 9.5 简单Dockerfile案例
      • 十. Docker-Compose【`重点`】
        • 10.1 Compose概念与安装
          • 10.1.1 下载Docker-Compose
          • 10.1.2 设置权限
          • 10.1.3 移动到/usr/local/bin目录下
          • 10.1.4 测试
        • 10.2 Docker-Compose管理MySQL和Tomcat容器
        • 10.3 使用docker-compose命令管理容器

一、Docker背景

1.1 环境不一致

我本地运行没问题啊:由于环境不一致,导致相同的程序,运行结果却不一致。

1.2 隔离性

哪个哥们又写死循环了,怎么这么卡:在多用户的操作系统下,会因为其他用户的操作失误影响到你自己编写的程序。

1.3 弹性伸缩

淘宝在双11,用户量暴增:需要很多很多的运维人员去增加部署的服务器,运维成本过高。

1.4 学习成本

学习一门技术,得先安装啊:学习每一门技术都要先安装响应的软件,但是还有他所依赖的各种环境,安装软件成本快高过学习成本啦。

二、Docker介绍


2.1 Docker的由来

Docker 最初是 dotCloud 公司创始人Solomon Hykes 在法国期间发起的一个公司内部项目。

2010年的专门做PAAS平台,但是到了2013年的时候,像亚马逊,微软,Google都开始做PAAS平台。

到了2013年,公司资金链断裂,不得不倒闭,于是将公司内的核心技术对外开源,核心技术就是Docker。

由于开源了Docker,到了2014年的时候,得到了各轮融资,于是公司开始全神贯注的维护Docker。

Docker主要作者-Solomon
1586340594252
现在Solomon已经离开了维护Docker的团队
1586340639934

2.2 Docker的思想

  • 封装:将需要的操作系统,环境,软件封装到一个镜像中。

  • 标准化:

    • 运输的标准化:Docker提供了中央仓库,所有官方的镜像都放在了这个中央仓库中,当需要使用某一个镜像时,通过相应的方式拉取即可。
    • 命令的标准化:Docker提供了一些列的命令,帮助我们去获取镜像,管理容器等等操作。
    • 提供了REST的API:基于标准REST的API衍生出了很多的图形化界面,如Rancher等。
  • 隔离性:Docker在运行镜像时,会在Linux的内核中,单独的开辟一片空间,这片空间不会影响到其他程序。

三、Docker的安装


3.1 下载Docker依赖的环境

安装Docker,需要先将依赖的环境全部下载,就像Maven依赖JDK一样。

yum -y install yum-utils device-mapper-persistent-data lvm2

3.2 指定Docker镜像源

默认情况下,下载Docker会从国外服务器下载,速度较慢,我们可以设置为阿里云镜像源,速度更快。

#查询dockers的版本
[root@qianfeng01 ~]# yum list docker-ce --showduplicates
#安装指定版本
yum -y install docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7
#安装新版本
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.3 安装Docker

采用yum的方式安装。

#制作缓存
yum makecache fast
#安装docker-ce
yum -y install docker-ce

3.4 Docker服务启停

安装成功后,需要手动启动,设置为开机自启,并测试。

# 启动Docker服务
systemctl start docker
# 设置开机自动启动
systemctl enable docker
# 查看Docker服务状态
systemctl status docker

3.5 Docker容器运行解析

# 测试
[root@qianfeng01 ~]# docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.   #上诉信息显示你的安装似乎正常工作。

To generate this message, Docker took the following steps:  #为了生成这条消息,Docker执行以下步骤
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
#输出这段提示以后,hello world就会停止运行,容器自动终止
 

#docker: docker客户端
#run :创建并运行容器
#hello-world : 镜像名称

3.6 Docker运行流程解析

image-20230330235205792

  1. 首先,我们在docker客户端(命令行终端窗口),执行docker命令;
  2. 客户端会去访问我们docker所在的那台服务器主机,实质而言主机上有一个Docker daemon主线程,它会监听到客户端的docker命令,它会run容器(Container),而容器又是通过镜像生成的。如果没有hello-world容器,它就会在本地查找hello-world镜像,如果本地找到了就会直接生成一个hello-world容器,否则,会向阿里云服务器仓库拉去相应的镜像;
  3. 从阿里云服务器仓库上拉取hello-world镜像到本地,再生成容器,进而运行。

3.7 Docker运行流程

Docker run运行流程:

image-20230330235629310

四、Docker的中央仓库【重点


  • Docker官方的中央仓库:这个仓库是镜像最全的,但是下载速度较慢。

    https://hub.docker.com/

  • 国内的镜像网站:网易蜂巢,daoCloud等,下载速度快,但是镜像相对不全。

    https://c.163yun.com/hub#/home

    http://hub.daocloud.io/ (推荐使用)

  • 在公司内部会采用私服的方式拉取镜像,需要添加配置,如下……

# 设置从哪个镜像源下载镜像
vi /etc/docker/daemon.json  

# 设置从ustc下载镜像, 速度快
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

# 重启docker服务
systemctl restart docker
# 需要创建或修改/etc/docker/daemon.json,并添加如下内容,"ip:port"可以编写多个。
{
	"registry-mirrors": ["https://registry.docker-cn.com"],
	"insecure-registries": ["ip:port"]   
}

# 注意事项
"registry-mirrors" 设置docker的私有仓库地址
"insecure-registries" 设置私有仓库地址可以设为http
可参考链接:https://blog.csdn.net/java_xinshou1/article/details/102620028

# 重启docker服务
systemctl restart docker

五、镜像的操作【重点


5.1 拉取镜像

从中央仓库拉取镜像到本地

docker pull 镜像名称[:tag]

# 举个栗子:docker pull daocloud.io/library/tomcat:8.5.15-jre8

注意

[:tag]如果不写,则默认最新版本(latest)或者是刚好仓库中仅有名称对应的那个版本

5.2 查看本地全部镜像

查看本地已经安装过的镜像信息,包含标识,名称,版本,更新时间,大小

docker images

5.3 删除本地镜像

镜像会占用磁盘空间,可以直接手动删除,表示通过查看获取。

删除镜像必须先删除镜像对应的容器

docker rmi 镜像的标识 | 镜像名称:tag
docker rmi b8dfe9ade316
docker rmi daocloud.io/library/tomcat:8.5.15-jre8

注意

docker image rm -f 强制删除镜像

5.4 镜像的导入导出

  • 如果出现网络故障,可以采过硬盘的方式传输镜像,虽然不规范,但是有效。
  • 但是这种方式导出的镜像名称和版本都是null,需要手动修改
# 将本地的镜像导出
docker save -o 导出的路径 镜像id
doeker save -o /usr/local/helloworld.tar 18e5af790473

# 加载本地的镜像文件
docker load -i 镜像文件
docker load -i /usr/local/helloworld.tar

# 修改镜像名称
docker tag 镜像id 新镜像名称:版本
docker tag 18e5af790473 myhelloworld:1.0

六、容器操作【重点


6.1 运行容器

运行容器需要指定具体镜像,如果镜像不存在,会直接下载

# 简单操作
docker run 镜像的标识 | 镜像名称[:tag]
docker run b8dfe9ade316
docker run daocloud.io/library/tomcat:8.5.15-jre8
# 常用的参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像的标识|镜像名称[:tag]
docker run -d -p 8090:8080 --name my_container b8dfe9ade316

# -d:代表后台运行容器
# -p 宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
# --name 容器名称:指定容器的名称

6.2 查看正在运行的容器

查看全部正在运行的容器信息

docker ps [-qa]
# -a:查看全部的容器,包括没有运行
# -q:只查看容器的标识

6.3 查看容器日志

查看容器日志,以查看容器运行的信息

docker logs -f 容器id
# -f:可以滚动查看日志的最后几行

6.4 进入容器内容部

可以进入容器内部进行操作

docker exec -it 容器id bash
docker exec -it 容器名称 bash

6.5 容器与宿主机内容相互复制

将宿主机的文件复制到容器内部的指定目录 或 将容器内容复制到宿主机

#docker cp 文件名称 容器id:容器内部路径     复制进容器
[root@qianfeng01 ~]# docker container cp /home/Engineer.csv 020be3c0bed6:/home/

#docker cp 容器id:容器内部路径  文件名称    复制到宿主机
[root@qianfeng01 ~]# docker container cp 020be3c0bed6:/home/Engineer.csv /home/

注意

  • 无论docker容器是启动还是停止状态,都可以复制进去

  • 无论是目录还是文件都可以复制

6.6 重启&启动&停止&删除容器

容器的启动,停止,删除等操作,后续经常会使用到

# 重新启动容器
docker restart 容器id/容器name

# 启动停止运行的容器
docker start 容器id/容器name

# 停止指定的容器(删除容器前,需要先停止容器)
docker stop 容器id/容器name
# 停止全部容器
docker stop $(docker ps -qa)

# 删除指定容器
docker rm 容器id
# 删除全部容器
docker rm $(docker ps -qa)

七、Docker应用


7.1 Docker安装Tomcat

运行Tomcat容器,为部署SSM工程做准备

docker run -d -p 8080:8080 --name tomcat daocloud.io/library/tomcat:8.5.15-jre8

7.2 Docker安装MySQL

运行MySQL容器,为部署SSM工程做准备

docker run -d -p 3366:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:5.7.4

# 宿主机中通过 3366连接 容器中的mysql
[root@localhost logs]# mysql -uroot -P 3366 -proot -h 192.168.1.135

八、数据卷 - 目录映射【重点


  • 为部署SSM的工程,需要使用到Docker的cp命令将宿主机内的ssm.war文件复制到容器内部,操作麻烦。

  • 数据卷:

  • 将宿主机的一个目录映射到容器的一个目录中。

  • 可以在宿主机中操作目录中的内容,容器内部映射的文件会跟着一起改变。

8.1 创建数据卷

创建数据卷之后,默认会存放在一个目录下 /var/lib/docker/volumes/数据卷名称/_data

docker volume create 数据卷名称
[root@qianfeng01 ~]# docker volume create dockerv1

8.2 查看数据卷详情

查看数据卷的详细信息,可以查询到存放路径,创建时间等等

docker volume inspect 数据卷名称
[root@qianfeng01 ~]# docker volume inspect dockerv1

8.3 查看全部数据卷

查看全部数据卷信息

docker volume ls

8.4 删除数据卷

删除指定数据卷

docker volume rm 数据卷名称

8.5 容器映射数据卷

映射有两种方式:

  • 通过数据卷名称映射,如果数据卷不存在。Docker会帮你自动创建,会将容器内部自带的文件,存储在默认的存放路径中。
  • 通过路径映射数据卷,直接指定一个路径作为数据卷的存放位置。但是这个路径下是空的。
# 从新创建容器(推荐使用这种方式)
# docker run -d -it -p 宿主机端口:容器端口 --name=容器名字 -v 数据卷名字:映射的容器内部路径 镜像id
docker run -d -it -p 8080:8080 --name=tomcat -v ssm:/usr/local/tomcat/webapps b8dfe9ade316

# 通过路径映射数据卷
docker run -v 路径:容器内部的路径 镜像id
docker run -v /usr/local/tomcat_webapps2004:/usr/local/tomcat/webapps 镜像id

#安装时指定端口和数据卷映射案例
[root@qianfeng01 local]# mkdir -p /usr/local/mongodb/data /usr/local/mongodb/conf /usr/local/mongodb/log
#运行docker容器(没有则创建),无需密码验证
docker run \
-itd \
--name mongo \
-p 27017:27017 \
-v /usr/local/mongodb/data:/mongo/data \
-v /usr/local/mongodb/conf:/mongo/conf \
-v /usr/local/mongodb/log:/mongo/log \
mongo:4.4

docker run代表运行容器,没有就创建
-i: 允许你对容器内的标准输入 (STDIN) 进行交互
-t: 在新容器内指定一个伪终端或终端
-d: 在后台运行容器并打印containerID
--name: 指定容器名称
-p: 指定端口映射,即将容器的27107端口映射到本机27107
-v: 将本机的目录挂到容器内部/mongo/data目录
mongo:4.4:镜像名称

九、Dockerfile自定义镜像


9.1 Dockerfile定义

Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了Dockerfile之后,当我们需要定制自己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成镜像即可,省去了敲命令的麻烦。

注意

我们可以从中央仓库下载一个镜像,也可以自己手动去制作一个镜像,需要通过Dockerfile去指定自定义镜像的信息

9.2 Dockerfile文件格式

Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动执行指令

一开始必须要指明所基于的基础镜像名称,接下来一般会说明维护者信息,后面则是镜像操作指令,例如 RUN 指令。每执行一条RUN 指令,镜像添加新的一层,并提交;最后是 CMD 指令,来指明运行容器时的操作命令。

# 1、第一行必须指定 基础镜像信息
# 定制的镜像都是基于 FROM 的镜像,这里的ubuntu 就是定制需要的基础镜像。
# 后续的操作都是基于 nginx。
# FROM <image>:<tag>
FROM ubuntu  
 
# 2、维护者信息
MAINTAINER docker_user docker_user@email.com

# 3、镜像操作指令
# RUN:用于执行后面跟着的命令行命令。 有以下俩种格式:
# shell 格式:RUN <命令行命令>
# exec 格式:RUN ["可执行文件", "参数1", "参数2"]
# 例如:RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf

# 4、容器启动执行指令
CMD /usr/sbin/nginx

注意

Dockerfile 的指令每执行一次都会在 docker上新建一层。所以过多无意义的层,会造成镜像膨胀过大。

例如:

FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

以上执行会创建 3 层镜像。优化为以下格式:

FROM centos
RUN yum install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

注意

如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。

9.3 Dockerfile内容

创建自定义镜像就需要创建一个Dockerfile,如下为Dockerfile的常用配置

from: 指定当前自定义镜像依赖的环境
copy: 将相对路径下的内容复制到自定义镜像中
workdir: 声明镜像的默认工作目录
run: 执行的命令,可以编写多个
cmd: 需要执行的命令(在workdir下执行的,cmd可以写多个,但是只以最后一个为准)

# 举个例子,制作SSM容器镜像,而且ssm.war要放在Dockerfile的同级目录下
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps

9.4 通过Dockerfile制作镜像命令

编写完Dockerfile后需要Dockerfile所在目录通过命令将其制作为镜像,注意最后的 . 代表当前目录。

docker build -t 镜像名称[:tag] .

9.5 简单Dockerfile案例

  1. 准备一个nginx的基础镜像。

    docker pull library/ngnix
    

    在镜像列表中会看到我们从远程仓库中获取的nginx镜像。

    docker images | grep ngnix
    
  2. 准备好了基础镜像,编写Dockerfile

    以定制 nginx 镜像为例,在一个空白目录中,建立一个文本文件,并命名为 Dockerfile。

    mkdir mydocker
    cd mydocker
    touch Dockerfile
    

    构建一个 Dockerfile 内容如下:

    FROM nginx
    RUN echo '<h1>hello, docker!</h1>' > /usr/share/nginx/html/index.html
    

    这个 Dockerfile 一共就两行涉及到了两条指令:FROM 和 RUN,FROM 表示获取指定基础镜像,RUN 执行命令,在执行的过程中重写了 nginx 的默认页面信息,将信息替换为:Hello, Docker!。

  3. 用Dockerfile 来构建镜像

    在 Dockerfile 文件所在目录执行:

    docker build -t nginx:v1 .
    

    构建完成之后,使用 docker images 命令查看所有镜像,如果存在 REPOSITORY 为 nginx 和 TAG 是 v1 的信息,就表示构建成功。

    docker images | grep nginx:v1
    docker images  nginx:v1
    
  4. 接下来使用 docker run 命令来启动容器

    docker run  --name docker_nginx_v1  -itd -p 80:80 nginx:v1
    

    这条命令会用 nginx 镜像启动一个容器,命名为docker_nginx_v1,并且映射了 80 端口,这样我们可以用浏览器去访问这个 nginx 服务器。

  5. 测试镜像启动情况

    访问刚启动的nginx容器。

    curl 127.0.0.1
    

    返回如下信息:

    hello, docker!

    ,则表示成功。
    至此,一个简单的Docker镜像就制作完成,并且能够通过镜像启动容器运行了。

十. Docker-Compose【重点


  • 运行一个容器,我们需要添加大量的参数,可以通过Docker-Compose文件配置参数。
  • 参数信息通过docker-compose.yml文件去维护。
  • Docker-Compose可以批量管理容器。

10.1 Compose概念与安装

  • **项目(Project):**由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

  • **服务(Service):**一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

    docker compose运行目录下的所有yml文件组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务可包括多个容器实例。docker-compose就是docker容器的编排工具,主要就是解决相互有依赖关系的多个容器的管理。

10.1.1 下载Docker-Compose

官方文档地址:Install Docker Compose | Docker Documentation

[root@qianfeng01 install]# wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64
10.1.2 设置权限

需要将DockerCompose文件的名称修改一下,给予DockerCompose文件一个可执行的权限

[root@qianfeng01 install]# mv docker-compose-linux-x86_64 docker-compose
#授予执行权限
[root@qianfeng01 install]# chmod a+x ./docker-compose
10.1.3 移动到/usr/local/bin目录下

方便后期操作,将docker-compose文件移动到了/usr/local/bin

#创建软连接(相当于配置环境变量)
[root@qianfeng01 install]# ln -s /opt/install/docker-compose /usr/bin/docker-compose

#查看版本
[root@qianfeng01 install]# docker-compose version
Docker Compose version v2.5.0
10.1.4 测试

在任意目录下输入docker-compose

测试效果
1586420176720

10.2 Docker-Compose管理MySQL和Tomcat容器

  • yml文件以key: value方式来指定配置信息
  • 多个配置信息以换行+缩进的方式来区分
  • 在docker-compose.yml文件中,不要使用制表符
  • 创建compose演示目录
# 进入/usr/local目录
cd /usr/local/
# 创建演示compose目录
[root@localhost local]# mkdir -p compose/test
# 进入演示目录
[root@localhost local]# cd compose/test
# 创建compose演示文件
[root@localhost test]# touch docker-compose.yml
# 递归创建宿主机中的tomcat项目部署目录
[root@localhost test]# mkdir -p tomcat/webapps
# 递归创建宿主机中的tomcat日志目录
[root@localhost test]# mkdir -p tomcat/logs
  • 粘贴下面已经写好的compose文件内容
version: '3.1'
services:
  mysql:           # 服务的名称
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: daocloud.io/library/mysql:5.7.4  # 指定镜像下载的路径
    container_name: mysql  # 指定容器名称
    ports:
      - 3306:3306   #  指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: root   # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai        # 指定时区
    volumes:
     - /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql   # 映射数据卷
  tomcat:
    restart: always
    image: daocloud.io/library/tomcat:8.5.15-jre8
    container_name: tomcat
    ports:
      - 8080:8080
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /usr/local/compose/test/tomcat/webapps:/usr/local/tomcat/webapps
      - /usr/local/compose/test/tomcat/logs:/usr/local/tomcat/logs

10.3 使用docker-compose命令管理容器

在docker-compose.yml文件目录下使用docker-compose的命令时

# 1. 基于docker-compose.yml启动管理的容器
docker-compose up -d

# 2. 关闭并删除容器
docker-compose down

# 3. 开启|关闭|重启已经存在的由docker-compose维护的容器
docker-compose start|stop|restart

# 4. 查看由docker-compose管理的容器
docker-compose ps

# 5. 查看日志
docker-compose logs -f

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

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

相关文章

暑期学JavaScript【第五天】

BOM Browser Object Model&#xff0c; 浏览器对象模型 DOM是BOM的一部分 1.navigator 用于判断当前的用户端。 用navigator.userAgent获取 2. location location.href www.baidu.com&#xff0c; 赋值后&#xff0c;执行直接跳转到百度location.search; 获取地址中?后面部…

maven查看jar的pom引入来源

从idea中点击 Maven Projects&#xff0c;后点击Show Dependencies&#xff0c;如图所示 得到依赖关系图&#xff0c;如下 在页面进行 Ctrl F 搜索需要的 Jar 名称 例&#xff1a;查找 spring-beans 双击框定的地方&#xff0c;就能进入到对应的pom文件 查找依赖关系 1、…

第三方库介绍——tslib库

文章目录 tslib 简介tslib 框架分析tslib 的框架 交叉编译、测试 tslibtslib应用程序 tslib 简介 tslib 是一个触摸屏的开源库&#xff0c;可以使用它来访问触摸屏设备&#xff0c;可以给输入设备添加各种“ filter ”( 过滤器&#xff0c;就是各种处理) 编译 tslib 后&#…

C语言学习准备-编辑器选择

今天继续给大家更新C语言经典案例 今天的案例会比昨天稍微有一些难度&#xff0c;但是同时还是非常经典的案例 本来是想给大家继续更新C语言经典案例&#xff0c;但是有朋友反应C语言编辑器的选择&#xff0c;刚好我自己也是想更换一下C语言的编辑器&#xff0c;跟大家分享一下…

TX Text Control 31.SP3 for Windows Forms Crack

Windows 窗体应用程序的文档处理 将文档编辑、创建和 PDF 生成添加到 Windows 窗体应用程序中。 视窗用户界面 功能齐全的文档编辑器 TX 文本控件是一种完全可编程的丰富编辑控件&#xff0c;可在专为 Visual Studio 设计的可重用组件中为开发人员提供广泛的文字处理功能。它…

力扣 77. 组合

题目来源&#xff1a;https://leetcode.cn/problems/combinations/ C题解&#xff08;来源&#xff09;&#xff1a; 代码随想录 回溯三部曲&#xff1a;将回溯问题看成一棵N叉树&#xff0c;n为广度&#xff0c;k为深度。 递归函数的返回值以及参数&#xff1a;需提前定义两个…

cookie 和 httpSession

目录 1.认识Cookie对象与HttpSession 1.1概念 1.2会话管理 2.cookie的使用 2.1cookie使用机制 2.2cookie不同属性的含义 2.2修改或者删除Cookie 2.3 Cookie对象的特点 2.4 Cookie对象的创建 2.5 Cookie中数据的获取 2.6 Cookie不支持中文的解决方案 2.7持久化Cooki…

代码随想录算法训练营第五天 | 哈希表系列1(哈希表理论基础--有效的字母异位词--快乐数)

哈希表系列1 哈希表理论基础242 有效的字母异位词读题小记代码随想录的代码力扣的示例代码 基于242的拓展题目--383赎金信我的代码力扣的示例代码代码随想录的代码 49 字母异位词分组力扣中录友的代码我的代码力扣的示例代码 438 找到字符串中所有字母异位词我的代码力扣录友的…

四、交换网络实验2——创建VLAN及端口配置

更多网络基础内容可见: 网络基础学习目录及各章节指引 4.6.2 创建VLAN及端口配置 实验目的 学习VLAN的创建删除 实验工具 Cisco Packet Tracer 实验环境 安装模拟器的Windows系统 实验步骤 第一步,vlan的创建

【实战】 六、用户体验优化 - 加载中和错误状态处理(上) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(八)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理1.给页面添加 …

web接口开发与测试——你了解多少

目录 前言 Django快速开发之投票系统 编写接口文档 系统接口测试 总结&#xff1a; 前言 最近一直在学习和整理web开发与接口测试的相关资料。接口测试本身毫无任何难度&#xff0c;甚至有很多工具和类库来帮助我们进行接口测试。大多测试人员很难深入了解web接口测试的原…

自然语言生成:解决低频Tokens退化整个Tokens模型问题

Rare Tokens Degenerate All Tokens:Improving Neural Text Generation via Adaptive Gradient Gating for Rare Token Embeddings 摘要 最近的研究发现&#xff0c;大规模神经语言模型学到的Token embeddings&#xff08;令牌嵌入&#xff09;具有退化的各向异性和狭锥形状。…

MobileNet

MobileNet 文章目录 MobileNet单词重要不重要 摘要MobileNetV1Motivation深度可分离卷积逐通道卷积&#xff08;Depthwise Convolution&#xff09;逐点卷积&#xff08;Pointwise Convolution&#xff09;参数对比计算量对比 V2Inverted ResidualsLinear BottlnecksModel Arch…

使用docker进行upload-labs靶场的安装搭建

由于我是在kali上搭建&#xff0c;默认没有docker服务&#xff0c;这里就从按照docker开始讲解 一、docker按装 1、Linux内核版本查看 #如果你是kali可直接从第四步开始 #安装docker要求内核版本kerner>3.10 #为此&#xff0c;先检查当前Linux系统的内核版本 uname -a2…

分析Spring Boot项目启动慢原因之 《一》打印bean耗时

分析Spring Boot项目启动原因之 一 打印bean耗时 由于项目比较久远&#xff0c;积累的代码犹如屎山&#xff0c;然后项目启动也特别慢&#xff0c;然后产生想要优化一下启动速度&#xff0c;故写了一个Bean启动时的耗时分析&#xff1a;package com.tekrally.assetManagement.u…

【Linux】Haproxy搭建Web群集

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Haproxy搭建Web群集 一、Haproxy概述1.常见的Web集群调度器2.Haproxy应用分析3.Haproxy常用调度算法4.Haproxy的主要特性5.LVS、Nginx、Haproxy的区别 二、Haproxy搭建Web群集…

【算法题解】49. 二叉树的序列化与反序列化

这是一道 困难 题 https://leetcode.cn/problems/serialize-and-deserialize-binary-tree/ 文章目录 题目深度优先搜索&#xff08;前序遍历&#xff09;Java 代码实现Go 代码实现复杂度分析 广度优先搜索&#xff08;层序遍历&#xff09;Java 代码实现Go 代码实现复杂度分析 …

容器的本质是什么

广义上来说&#xff0c;容器技术是动态的容器、静态的镜像和远端的仓库这三者的组合。 容器&#xff0c;就是一个特殊的隔离环境&#xff0c;它能够让进程只看到这个环境里的有限信息&#xff0c;不能对外界环境施加影响。 对于 Linux 操作系统来说&#xff0c;一个不受任何限…

【区块链】常见共识机制汇总

文章目录 公有链PoW - Proof of WorkPoS - Proof of StakeDPoS - Delegate Proof of StakePoA - Proof of Activity - 行动证明PoB - Proof of Burn 联盟链PaxosMulti-PaxosPBFTDDBFTIDBFTHotstuffZyzzyvaPoETCasperOurobrosPoSVMG-DPoSRPCAAlgorandTendermint 私有链 公有链 P…

用python实现扫雷游戏

前言 本人最近在学习python语言&#xff0c;发现python是一门很有意思的语音。python有大量的库&#xff0c;大量的函数&#xff0c;可以实现非常多的功能。尤其是在可视化方面&#xff0c;可以画图&#xff0c;可以弹出窗口。于是我就想着看能不能用python编写一个扫雷游戏。…