Docker从零到掌握(详解)

目录

1.初识Docker

1.1 为什么使用docker

1.2 Docker技术

1.3.安装Docker

1.4.Docker架构

1.5.配置Docker镜像加速器

2.Docker常用命令

2.1.Docker服务相关的命令

2.2.Docker镜像相关的命令

2.3.Docker容器相关的命令

3. 容器的数据卷

3.1.数据卷的概念和作用

3.2.配置数据卷

4.Docker应用部署

4.1.Docker部署mysql

4.2.Docker部署Redis

4.3.Docker部署tomcat

4.4.Docker部署nginx

4.5.Docker部署RabbitMQ

5.自定义镜像

5.1.Docker镜像的原理

5.2. 镜像制作

5.3.dockerfile的概念[重]

5.4.Dockerfile关键字

5.5.Dockerfile案例

案例1

案例2

案例3

5.6.把本地镜像上传阿里远程镜像仓库

6.Idea关联Docker 

6.1.Docker开启远程访问

6.2.Idea安装docker插件

7.Docker服务编排

7.1.概述

7.2.Docker Compose 安装使用

8.需要图形化界面



1.初识Docker

1.1 为什么使用docker

我就可以把项目以及项目依赖的配置和软件一起打包---【镜像】---直接在测试环境下运行该镜像。无需担心环境的不同导致无法运行的问题。  

1.2 Docker技术

Docker是基于Go语言实现的云开源项目。

Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。

Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

Docker的应用

1.3.安装Docker

Docker可以运行在MAC、Windows、CentOS、UBUNTU等操作系统上,

演示:CentOS7安装Docker

官网: Docker: Accelerated, Containerized Application Development

虚拟机中执行步骤:

# 1、yum包更新到最新
yum update
#2、安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、设置yum源--指定你下载docker软件的网址
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#4、安装docker ,出现输入的界面都按y---下载并安装docker-ce[社区版] docker-ee[企业版]
yum install -y docker-ce
# 5、查看docker版本,验证是否验证成功
docker -v

1.4.Docker架构

  • Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

  • 容器(Container) :Docker 利用容器(Container)独立运行的一个或一组应用。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台

  • 仓库(Repository)是集中存放镜像文件的场所。

    类似于

    Maven仓库,存放各种jar包的地方;

    github仓库,存放各种git项目的地方;

    Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。

    仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

    最大的公开仓库是 Docker Hub(https://hub.docker.com/),

    存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等

1.5.配置Docker镜像加速器

默认情况下,将来从docker hub (https://hub.docker.com/)上下载docker镜像,太慢。一般都会配置镜像加速器:

USTC:中科大镜像加速器(https://docker.mirrors.ustc.edu.cn)

阿里云--网易云--腾讯云

演示:阿里云中配置镜像加速器

进入阿里云官网

搜索

 

 

2.Docker常用命令

2.1.Docker服务相关的命令

  • 停止docker服务: systemctl stop docker
  • 启动docker服务: systemctl start docker
  • 重启docker服务: systemctl restart docker
  • 开机启动docker服务: systemctl enable docker

2.2.Docker镜像相关的命令

1.从仓库中搜索相关的镜像

docker search 镜像名
例如: docker search mysql

2. 拉取镜像到本地

docker pull 镜像名:版本号 ===如果没有跟版本号,那么它会拉取最新的latest

3.查看本地有哪些镜像

docker images

4.删除本地指定的镜像

docker rmi 镜像名:版本号 或镜像编号

5.删除所有的镜像

docker rmi $(docker images -q)    [慎用]

6.帮助命令

docker --help  [找到所有的docker命令]docker 命令 --help  [命令的语法]

2.3.Docker容器相关的命令

运行centos容器:并进入到容器内

docker run -it --name=c1 centos:7 /bin/bash
  •  -i:进入容器内部
  • -t:交互平台 ===它几乎和-i一起使用。
  • --name: 为容器起个名称--如果没有使用--name那么docker为自动分配一个名字
  • centos:7===镜像名:版本号
  • /bin/bash===提供一个shell命令窗口

退出容器

exit: ---会关闭容器
ctrl+q+p:--退出不会关闭容器

查看当前的容器

docker ps:  查看所有正在运行的容器
docker ps -a:查看所有的容器。
docker ps -aq: 查看所有容器的id

创建一个容器不进入到该容器内部

docker run -id --name=容器的名称  centos:7 /bin/bash

进入指定的容器内部:---使用exit不会关闭容器

docker exec 容器的id或者容器的名称  /bin/bash

关闭|启动|删除容器

docker stop 容器名|容器id
docker start 容器名|容器id
docker rm 容器名|容器id  [只能删除停止的容器]
docker rm -f 容器名|容器id [强制删除容器]
docker rm -f $(docker ps -aq): 删除所有容器

查看容器的日志

docker logs 容器id

3. 容器的数据卷

3.1.数据卷的概念和作用

思考: dockers容器删除后,容器中的产生的数据还在吗?

思考: Docker容器和外部机器可以直接交换文件吗?

 思考: 容器之间想要进行数据交互

为了保证容器数据的可靠性,----需要把容器内部的某个目录--挂载到宿主机中的某个目录中。

宿主机中的这个目录就是数据卷

 概念:

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定后对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

作用:

  • 解决数据持久化问题
  • 解决外部机器和容器的间接通讯问题
  • 解决容器之间的数据交换

3.2.配置数据卷

  • 创建启动容器时,使用-v参数设置数据卷
  • docker run ... -v 宿主机目录(文件):容器内目录(文件) ...

注意事项:

  • 目录必须是绝对路径
  • 如果目录不存在,会自动创建
  • 可以挂载多个数据卷

例子:

 docker run -id --name=c2 -v /usr/app:/usr/ykq -v /usr/app2:/usr/ykq2 centos:7 /bin/bash

4.Docker应用部署

4.1.Docker部署mysql

 

搜索mysql镜像

docker search mysql

 拉取mysql镜像

docker pull mysql:5.7

 创建容器,设置端口映射、目录映射

# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql

mysql完整版容器

docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7

参数说明

  • -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。
  •  -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录

  • -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录

  • -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录

  • -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。

4.2.Docker部署Redis

(1)拉取redis镜像

docker pull redis:6.0.20 

(2)运行redis镜像

docker run -id --name=redis6 -p 6380:6379 redis:6.0.20 
-p: 端口映射  容器内部的端口和宿主机之间的映射。

(3)使用外部机器连接redis

如果把redis容器删除了---里面的数据还有吗?---如果我想修改redis的配置内容。


持久化

1.启动redis容器时指定配置文件

  • 创建一个目录/app/redis,并把redis.conf放入该目录
  • 创建一个目录/app/redis/data---存放redis持久化数据
  • mkdir -p /app/redis/data
  • 运行redis容器
  • docker run -id --name=redis6 -v /app/redis/redis.conf:/usr/redis/redis.conf -v /app/redis/data:/usr/redis/data -p 6379:6379 redis:6.0.20 redis-server /usr/redis/redis.conf
    

  • 每个容器相当于一个虚拟机

4.3.Docker部署tomcat

搜索tomcat镜像

docker search tomcat

 拉取tomcat镜像

docker pull tomcat

创建容器,设置端口映射、目录映射

# 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat

运行tomcat容器

docker run -id --name=tomcat -p 8080:8080 镜像名

 进入tomcat 并修改

访问端口--成功

4.4.Docker部署nginx

 

搜索nginx镜像

docker search nginx

拉取nginx镜像

docker pull nginx

创建容器,设置端口映射、目录映射

# 在/root目录下创建nginx目录用于存储nginx数据信息
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
# 在~/nginx/conf/下创建nginx.conf文件,粘贴下面内容
vim nginx.conf
user  nginx;
worker_processes  1;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;
}
docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
  • 参数说明:

    • -p 80:80:将容器的 80端口映射到宿主机的 80 端口。

    • -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的 /conf/nginx.conf 挂载到容器的 :/etc/nginx/nginx.conf。配置目录

    • -v $PWD/logs:/var/log/nginx:将主机当前目录下的 logs 目录挂载到容器的/var/log/nginx。日志目录

4.5.Docker部署RabbitMQ

搜素rabbitmq的镜像

docker search rabbitmq

拉取rabbitmq镜像

docker pull rabbitmq

运行rabbitmq:

docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5673:5672 rabbitmq

 通过docker ps -a查看部署的mq容器id,在通过 docker exec -it 容器id /bin/bash 进入容器内部在
运行:rabbitmq-plugins enable rabbitmq_management

现在可以通过访问http://linuxip:15672,访问web界面,这里的用户名和密码默认都是guest
输入命令:exit退出容器目录.

5.自定义镜像

上面讲解的内容需要的镜像 都是从远程仓库拉取,我们能否把自己写的工程也变成一个镜像。可以的。 需要自定义镜像

5.1.Docker镜像的原理

思考:

  • Docker镜像本质是什么?---它就是一个文件Dockerfile[ 写着一条一条得到命令]

  • Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G?

  • Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有10多MB?

linux文件系统由bootfs和rootfs两部分组成。

  • bootfs:包含bootloader (引导加载程序)和kernel(内核)

  • rootfs: root文件系统,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件

  • ·不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu,centos等

  • Docker镜像是由特殊的文件系统叠加而成

  • 最底端是bootfs,并使用宿主机的bootfs;

  • 第二层是root文件系统rootfs,称为base image: 基础镜像

  • 然后再往上可以叠加其他的镜像文件

  • 统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。

  • 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。

  • 当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器

总结:

 5.2 镜像制作

自定义镜像:提供了两种方式:

  • 第一种:基于容器来制作
  • 第二种: 通过dockerfile文件来制作

第一种 容器转为镜像:只能在已有的镜像的容器上进行制作新镜像-----了解 

步骤: 把现有的镜像--运行成一个容器---修改容器中的内容--->变成镜像---把镜像压缩文件--->交给其他人---变成本地镜像

演示:

 

  • docker commit 容器id 镜像名:版本号 [把指定的容器变成镜像]
  • docker save -o 压缩文件名 镜像名:版本号 [把指定的镜像压缩为一个压缩文件]
  • docker load -i 压缩文件名 【把压缩文件变成本地镜像】

5.3 dockerfile的概念[重]

  • Dockerfile是一个文本---任意一个镜像都是通过dockerfile来制作

  • 文件包含了一条条的指令

  • 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像

  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境

  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了

  • 对于运维人员:在部署时,可以实现应用的无缝跨平台移植

5.4 Dockerfile关键字

5.5 Dockerfile案例

案例1

创建编辑dockerfile文件  

 

构件镜像

 docker build -f centos_dockerfile -t aaa_centos:v1.0 
  •  -f:表示dockerfile文件
  • -t: 镜像名称版本号 
  • .: 必须加上
  •  

 创建容器

docker run -it --name=c1 aaa_centos:v1.0 /bin/bash

 


案例2

 准备好springboot jar包并传至宿主机的根目录

 

创建springboot_dockerfile文件并编辑

FROM openjdk:8
MAINTAINER wqg
ADD springboot-docker01-0.0.1-SNAPSHOT.jar docker01.jar
EXPOSE 8080
CMD java -jar docker01.jar

根据springboot_dockerfile制作镜像

docker build -f ./springboot_dockerfile -t springboot:v1.0 .

 

启动并做端口映射

 docker run -id --name=s2 -p 8080:8080 springboot:v1.0

成功访问

 


镜像变成压缩文件

 docker save -o springboot.tar springboot:v1.0

 


案例3

需求: Centos7镜像具备vim+ifconfig+jdk8

 

jdk_centos编辑 

FROM centos:7
MAINTAINER wqg
WORKDIR /usr/local
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#创建目录
RUN mkdir -p /usr/local/java
#ADD 把宿主机中的压缩文件放入到/usr/local/java 并会自动解压 
ADD jdk-8u161-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_161
ENV PATH $JAVA_HOME/bin:$PATH
CMD echo "success--------------ok"
CMD /bin/bash

5.6.把本地镜像上传阿里远程镜像仓库

阿里云:

  • 作为开发: 我们需要把自己的项目----通过dockerfile 变成一个镜像----上传到远程仓库【hub.docker或者阿里云镜像仓库】
  • 作为运维: 从远程仓库下载镜像---通过镜像运行容器。部署项目。
  • 采用:阿里云镜像仓库

 


 


从Registry中拉取镜像

 拉取后运行

docker run -id --name=ccc -p 8089:8080 [镜像版本id]

6.Idea关联Docker 

6.1.Docker开启远程访问

#修改该Docker服务文件
vi /lib/systemd/system/docker.service 
#修改ExecStart这行
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

 

6.2.Idea安装docker插件

7.Docker服务编排

7.1.概述

  • docker建议我们每一个容器中只运行一个服务,因为docker容器本身占用资源极少,所以最好是将每个服务单独的分割开来但是这样我们又面临了一个问题?
  • 如果我需要同时部署好多个服务,难道要每个服务单独写Dockerfile然后在构建镜像,构建容器,这样累都累死了,所以docker官方给我们提供了docker-compose多服务部署的工具.
  • Compose允许用户通过一个单独的docker-compose.yml模板文件[你写](YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
  • 可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。

7.2.Docker Compose 安装使用


一、安装Docker Compose

# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。 
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置文件可执行权限 
chmod +x /usr/local/bin/docker-compose
# 查看版本信息 
docker-compose -version

二、卸载Docker Compose 【根据需要选择】

# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose

三、 使用docker compose编排springboot+redis+mysql项目

docker compose步骤

  • 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
  • 使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。
  • 最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线

1.创建docker-compose目录(本文这里没有创建依然放在/root/dockerfile目录)

mkdir ~/docker-compose
cd ~/docker-compose

2.打包springboot工程

 

3.编写dockerfile文件

# 基础镜像使用java
FROM openjdk:8
# 作者
MAINTAINER qy165
# 将jar包添加到容器中并更名为zzyy_docker.jar
ADD springboot-redis-cache-0.0.1-SNAPSHOT.jar qy165.jar
EXPOSE 8080
CMD java -jar qy165.jar

4.构建镜像

docker build -f Dockerfile -t qy165:v1.0

 

服务编排:

编写 docker-compose.yml 文件

version: "3"
services:microService:image: qy165:v1.0      #镜像名container_name: qy165  #容器名ports:  #端口映射- "8080:8080"volumes:  #数据卷- /app/microService:/datanetworks: #网络(network=aaa_net)- aaa_netdepends_on: #依赖服务名- redis- mysqlredis:image: redis:6.0.20ports:- "6379:6379"volumes:- /app/redis/redis.conf:/etc/redis/redis.conf- /app/redis/data:/datanetworks:- aaa_netcommand: redis-server /etc/redis/redis.confmysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: 'root'MYSQL_ALLOW_EMPTY_PASSWORD: 'no'MYSQL_DATABASE: 'qy165'ports:- "3306:3306"volumes:- /app/mysql/db:/var/lib/mysql- /app/mysql/conf/my.cnf:/etc/my.cnf- /app/mysql/init:/docker-entrypoint-initdb.dnetworks:- aaa_netcommand: --default-authentication-plugin=mysql_native_password #解决外部无法访问
networks: #等价于 docker network create aaa_netaaa_net:
docker rm -f $(docker ps -aq)

 在~/docker-compose 目录下 使用docker-compose 启动容器

docker-compose up

 

8.需要图形化界面

执行

docker run -d -p 8000:8000 -p 9000:9000 --name portainer     --restart=always     -v /var/run/docker.sock:/var/run/docker.sock     -v portainer_data:/data     portainer/portainer

访问

http://192.168.223.147:9000/

 

 

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

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

相关文章

Idea添加mybatis的mapper文件模版

针对Java开发人员,各种框架的配置模版的确是需要随时保留一份,在使用的时候,方便复制粘贴,但是也依然不方便,我们可以给开发工具(IDE)中添加配置模版,这里我介绍下使用idea开发工具&…

Python 中的机器学习简介:多项式回归

一、说明 多项式回归可以识别自变量和因变量之间的非线性关系。本文是关于回归、梯度下降和 MSE 系列文章的第三篇。前面的文章介绍了简单线性回归、回归的正态方程和多元线性回归。 二、多项式回归 多项式回归用于最适合曲线拟合的复杂数据。它可以被视为多元线性回归的子集。…

uniapp返回

// 监听返回事件onNavigationBarButtonTap() {uni.showModal({title: 提示,content: 确定要返回吗?,success: (res) > {if (res.confirm) {uni.navigateBack({delta: 2})}}})},

Opencv-C++笔记 (16) : 几何变换 (图像的翻转(镜像),平移,旋转,仿射,透视变换)

文章目录 一、图像平移二、图像旋转2.1 求旋转矩阵2.2 求旋转后图像的尺寸2.3手工实现图像旋转2.4 opencv函数实现图像旋转 三、图像翻转3.1左右翻转3.2、上下翻转3.3 上下颠倒,左右相反 4、错切变换4.1 实现错切变换 5、仿射变换5.1 求解仿射变换5.2 OpenCV实现仿射…

力扣 -- 139. 单词拆分

一、题目 题目链接:139. 单词拆分 - 力扣(LeetCode) 二、解题步骤 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码 class Solution { public:bool wordBreak(str…

基于Java的新闻全文搜索引擎的设计与实现

中文摘要 本文以学术研究为目的,针对新闻行业迫切需求和全文搜索引擎技术的优越性,设计并实现了一个针对新闻领域的全文搜索引擎。该搜索引擎通过Scrapy网络爬虫工具获取新闻页面,将新闻内容存储在分布式存储系统HBase中,并利用倒…

建筑行业如果应用了数字孪生技术能有什么改变?

数字孪生是一种将现实世界与数字世界相结合的先进技术,它在建筑行业中正发挥着越来越重要的作用。通过数字孪生技术,建筑行业可以实现从设计、施工到运营的全生命周期数字化管理,带来了许多优势和机遇。 ① 建筑设计阶段的应用 数字孪生能够…

Unity Shader:闪烁

还是一样的分为UI闪烁和物体闪烁,其中具体可分为:UI闪烁、物体闪烁与半透明闪烁 1,UI闪烁 对于UI 还是一样的,改写UI本身的shader: Shader "UI/YydUIShanShder" {Properties{[PerRendererData] _MainTex(…

Spring Boot如何整合mybatis

文章目录 1. 相关配置和代码2. 整合原理2.1 springboot自动配置2.2 MybatisAutoConfiguration2.3 debug过程2.3.1 AutoConfiguredMapperScannerRegistrar2.3.2 MapperScannerConfigurer2.3.4 创建MapperFactoryBean2.3.5 创建MybatisAutoConfiguration2.3.6 创建sqlSessionFact…

怎么合并多个视频?简单视频合并方法分享

合并多个视频可以将它们组合成一个更长的视频,这对于需要播放多个短视频的情况非常有用。此外,合并视频还可以使视频编辑过程更加高效,因为不必将多个独立的视频文件分别处理。最后,合并视频可以减少文件数量,从而使整…

用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能

一、实践发现了bug和不足 今天用了公文一键排版系统对几个PDF文件格式的材料进行文字识别后再重新排版,处理效果还是相当不错的,节约了不少的时间。 但是也发现了三个需要改进的地方: (一)发现了两个bug:…

【JVM】 垃圾回收篇——自问自答(1)

Q什么是垃圾: 运行程序中,没用任何指针指向的对象。 Q为什么需要垃圾回收? 内存只分配,不整理回收,迟早会被消耗完。 内存碎片的整理,为新对象腾出空间 没有GC程序无法正常进行。 Q 哪些区域有GC&#…

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业tbms

​ 功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查…

多线程案例(3)-定时器

文章目录 多线程案例三三、 定时器 大家好,我是晓星航。今天为大家带来的是 多线程案例三 相关的讲解!😀 多线程案例三 三、 定时器 定时器是什么 定时器也是软件开发中的一个重要组件. 类似于一个 “闹钟”. 达到一个设定的时间之后, 就…

视频太大怎么压缩变小?三招教会你压缩视频

如果视频文件太大,不仅占用空间,还不方便传输,这时候就需要我们对视频进行压缩处理,目前市面上有多种视频压缩软件,想要压缩率高,又保留原视频的画质,可以参考以下的几个方法。 一、嗨格式压缩大…

K8s中的Controller

Controller的作用 (1)确保预期的pod副本数量 (2)无状态应用部署 (3)有状态应用部署 (4)确保所有的node运行同一个pod,一次性任务和定时任务 1.无状态和有状态 无状态&…

python excel 操作

excel文件内容如下: 一、xlrd 读Excel 操作 1、打开Excel文件读取数据 filexlrd.open_workbook(filename)#文件名以及路径,如果路径或者文件名有中文给前面加一个 r 2、常用函数 (1)获取一个sheet工作表 table file.sheets(…

大模型使用——超算上部署LLAMA-2-70B-Chat

大模型使用——超算上部署LLAMA-2-70B-Chat 前言 1、本机为Inspiron 5005,为64位,所用操作系统为Windos 10。超算的操作系统为基于Centos的linux,GPU配置为A100,所使用开发环境为Anaconda。 2、本教程主要实现了在超算上部署LLAM…

【Linux】在服务器上创建Crontab(定时任务),自动执行shell脚本

业务场景:该文即为上次编写shell脚本的姊妹篇,在上文基础上,将可执行的脚本通过linux的定时任务自动执行,节省人力物力,话不多说,开始操作! 一、打开我们的服务器连接工具 连上服务器后,在任意位置都可以执行:crontab -e 如果没有进入编辑cron任务模式 根据提示查看…

【TypeScript】中定义与使用 Class 类的解读理解

目录 类的概念类的继承 :类的存取器:类的静态方法与静态属性:类的修饰符:参数属性:抽象类:类的类型: 总结: 类的概念 类是用于创建对象的模板。他们用代码封装数据以处理该数据。JavaScript 中的…