当前位置: 首页 > news >正文

docker基础学习笔记

文章目录

  • Docker简介
  • Linux下安装Docker
  • Docker常用命令
  • Docker网络
  • Docker存储
  • docker-compose
  • dockerfile制作镜像
  • 私有仓库
  • 镜像导入导出
  • 参考

Docker简介

  1. 定义:Docker是一个开源的应用容器引擎
  2. 优势:
    • 一键部署,开箱即用:容器使用基于image镜像的部署模式,image中包含运行应用程序所需的一切:代码、运行时系统工具、系统库和配置文件
    • 一次打包,到处运行:将容器打包成镜像(image)已经成为软件交付过程中的标准化格式
    • 容器与虚拟机

Linux下安装Docker

其中涉及

  • docker-ce:服务端
  • docker-ce-cli:客户端
  • containerd.io:容器运行时
  • docker-compose-plugin: 容器编排的工具

客户端发出指令发送给服务端对容器操作,服务端并不直接操作,而是交给containerd创建容器

配置国内镜像源加速

/etc/docker/daemon.json中添加

{"registry-mirrors": ["https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}

然后重启服务和docker

sudo systemctl daemon-reload
sudo systemctl restart docker

Docker常用命令

docker架构

在这里插入图片描述

Registry:Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub(docker.io)

仓库名: <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。

镜像名:软件名+标签

命令解释
docker pull从镜像仓库拉取镜像到本地
docker images命令查看本地镜像
docker run [可选参数] 镜像名:版本 []拉取并运行镜像
可选参数:1. 参数将容器的端口映射到宿主机端口-p hostPort:containerPort
-p 8080-8090:8080-8090公开端口范围,前后必须对应
-p 192.168.56.106:8080:80如果宿主机有多个ip,可以指定绑定到哪个ip
2.--name 定义容器的名称
3. -e 声明环境变量
4. -d容器在后台运行
5. -it 使用交互模式,可以在控制台里输入、输出
6. --rm**在容器退出时自动删除容器。**一般在使用客户端程序时使用此参数
docker start 容器名启动容器
docker stop关闭容器
docker restart重启容器
docker rm删除容器
docker exec在运行的容器中执行命令,一般配合-it参数使用交互模式
docker ps查看正在运行的容器
docker ps -a查看所有容器,包括正在运行和停止的
docker inspect查看容器的信息
docker logs查看日志
docker cp在容器和宿主机间复制文件

Docker网络

docker自动创建的三个网络

  1. bridge桥接网络:

    如果不指定,新创建的容器默认将连接到bridge网络。容器和宿主机,容器和容器可以相互访问。

  2. host:

    容器与宿主机共享网络,不需要映射端口即可通过宿主机IP访问。(-p选项会被忽略),慎用,可能会有安全问题。

  3. none:

    禁用容器中所用网络,在启动容器时使用。

  4. 用户自定义网络(桥接网络)

    • 创建用户自定义网络

      docker network create my-net
      
    • 将已有容器连接到此网络

      docker network connect my-net db-mysql
      
    • 创建容器时指定网络。

      docker run -it --rm --network my-net mysql:5.7 mysql -h**db-mysql** -uroot -p
      

    在用户自定义网络上,容器之间可以通过容器名进行访问。

    用户自定义网络使用 Docker 的嵌入式 DNS 服务器将容器名解析成 IP

查看容器IPdocker inspect \ --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-alpine

Docker存储

为了容器的简洁,便于恢复和迁移,需要将数据存储到容器之外,这就是挂载

docker提供的三种存储选项

image.png

  1. volume卷

    存储在主机文件系统分配一块专有存储区域,由 Docker(在 Linux 上)管理,并且与主机的核心功能隔离。非 Docker 进程不能修改文件系统的这一部分。卷是在 Docker 中持久保存数据的最佳方式。

    创建和挂载卷

    docker volume create my-datadocker run -e MYSQL_ROOT_PASSWORD=123456 \-v /home/mysql/conf.d/my.cnf:/etc/mysql/conf.d/my.cnf:ro  \-v my-data:/var/lib/mysql  \-d mysql:5.7 
  2. bind mount 绑定挂载

    绑定挂载可以将主机文件系统上目录或文件装载到容器中,但是主机上的非 Docker 进程可以修改它们,同时在容器中也可以更改主机文件系统,包括创建、修改或删除文件或目录,使用不当,可能会带来安全隐患。

    -v

    绑定挂载将主机上的目录或者文件装载到容器中。绑定挂载会覆盖容器中的目录或文件。

    如果宿主机目录不存在,docker会自动创建这个目录。但是docker只自动创建文件夹,不会创建文件。

    例如,mysql的配置文件和数据存储目录使用主机的目录。可以将配置文件设置为只读(read-only)防止容器更改主机中的文件。

    docker run -e MYSQL_ROOT_PASSWORD=123456 \-v /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro  \-v /home/mysql/data:/var/lib/mysql  \-d mysql:5.7 
    
  3. tmpfs 临时挂载
    tmpfs挂载仅存储在主机系统的内存中,从不写入主机系统的文件系统。当容器停止时,数据将被删除。

    docker run -d -it --tmpfs /tmp nginx:1.22-alpine
    

docker-compose

Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。

  1. 常用命令

    命令解释
    docker compose up 一键部署启动
    主要参数:
    1. -f参数手动指定文件
    2. -p指定前缀
    docker compose start/stop启动/停止服务
    docker compose down停止并删除容器,不会删除存储卷volume
    1. -p指定前缀
    docker compose logs -f查看日志
  2. yaml语法

    • 缩进代表上下级关系
    • 缩进时不允许使用Tab键,只允许使用空格
    • : 键值对,后面必须有空格
    • -列表,后面必须有空格
    • [ ]数组
    • #注释
    • {key:value,k1:v1}map
    • | 多行文本块

    如果一个文件中包含多个文档

    • ---表示一个文档的开始

    • &来建立锚点,<<合并到当前数据,用*引用锚点

      version: '3.7'# Settings and configurations that are common for all containers
      x-minio-common: &minio-commonimage: quay.io/minio/minio:RELEASE.2022-08-13T21-54-44Zcommand: server --console-address ":9001" http://minio{1...2}/data{1...2}expose:- "9000"- "9001"services:minio1:<<: *minio-commonvolumes:- data1-1:/data1- data1-2:/data2minio2:<<: *minio-commonvolumes:- data2-1:/data1- data2-2:/data2volumes:data1-1:data1-2:data2-1:data2-2:
      
  3. compose文件结构

    docker-compose.yml通常需要包含以下几个顶级元素:

    version 已弃用,早期版本需要此元素。

    services必要元素,定义一个或多个容器的运行参数

    services中可以通过以下元素定义容器的运行参数

    image 容器 镜像

    ports端口映射

    environment环境变量

    networks容器使用的网络

    volumes容器挂载的存储卷

    command容器启动时执行的命令

    depends_on定义启动顺序

    ​ 复数形式(例如ports,networks,volumes,depends_on)参数需要传入列表

    networks创建自定义网络

    volumes 创建存储卷

    command支持以下写法:

    #推荐使用数组或列表的方式
    #数组
    command:["java","-jar","/usr/local/src/ruoyi-admin.jar"]
    #列表
    command: - java- -jar- /usr/local/src/ruoyi-admin.jar# shell命令模式
    command: java -jar /usr/local/src/ruoyi-admin.jar
    

    environment支持如下两种写法

    # 使用map
    environment:MYSQL_DATABASE: exampledbMYSQL_USER: exampleuserMYSQL_PASSWORD: examplepassMYSQL_RANDOM_ROOT_PASSWORD: '1'#使用列表
    environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=ry- LANG=C.UTF-8
    
    1. depends_on、condition和healthcheck

      depends_on只能保证容器的启动和销毁顺序,不能确保依赖的容器是否ready。

      condition有三种状态:

      • service_started容器已启动

      • service_healthy容器处于健康状态

      • service_completed_successfully容器执行完成且成功退出(退出状态码为0)

      通过healthcheck加脚本来检查

       healthcheck:test: ["CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', 'root', '-p$$MYSQL_ROOT_PASSWORD']interval: 10stimeout: 5sretries: 5start_period: 10s
      
    services: ruoyi-app:#  docker run --name ruoyi-app      \#             -p 8080:8080        \#             --network ruoyi-net      \#             -v /home/app/ruoyi-admin.jar:/usr/local/src/ruoyi-admin.jar   \#             -d openjdk:8u342-jre    \#             java -jar /usr/local/src/ruoyi-admin.jarimage: openjdk:8u342-jrerestart: alwaysports:- 8080:8080networks:- ruoyi-netvolumes:- /home/app/ruoyi-admin.jar:/usr/local/src/ruoyi-admin.jarcommand: [ "java", "-jar", "/usr/local/src/ruoyi-admin.jar" ]healthcheck:test: ["CMD", "curl", "-f", "http://localhost:8080"]interval: 10stimeout: 5sretries: 5start_period: 10sdepends_on:ruoyi-db:condition: service_healthyruoyi-db:#  docker run --name ruoyi-db -p 3303:3306 \#             --network ruoyi-net        \#             -v ruoyi-data:/var/lib/mysql  \#             -v /home/app/sql:/docker-entrypoint-initdb.d   \#             -e MYSQL_DATABASE=ry         \#             -e MYSQL_ROOT_PASSWORD=123456    \#             -d mysql:5.7      \#             --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --skip-character-set-client-handshakeimage: mysql:5.7environment:- MYSQL_DATABASE=ry- MYSQL_ROOT_PASSWORD=123456volumes:- ruoyi-data:/var/lib/mysql- /home/app/sql:/docker-entrypoint-initdb.dnetworks:- ruoyi-netcommand:["--character-set-server=utf8mb4","--collation-server=utf8mb4_unicode_ci","--skip-character-set-client-handshake"]healthcheck:test: ["CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', 'root', '-p$$MYSQL_ROOT_PASSWORD']interval: 10stimeout: 5sretries: 5start_period: 10svolumes:ruoyi-data:networks:ruoyi-net:

dockerfile制作镜像

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像。

  1. 常用命令和指令

    命令

    命令解释
    docker build [选项] <上下文路径/URL/->构建镜像,将客户端的路径指定为上下文路径
    选项-t指定镜像名
    docker tag <id> <镜像名>修改镜像名
    docker image history <镜像名>查看镜像构建过程

    指令

    命令解释
    FROM打包使用的基础镜像
    WORKDIR相当于cd命令,进入容器工作目录
    COPY将宿主机的文件复制到容器内
    RUN打包时执行的命令,相当于打包过程中在容器中执行shell脚本,通常用来安装应用程序所需要的依赖、设置权限、初始化配置文件等
    CMD指定容器启动程序及参数,会被运行容器时的其他指令替代
    EXPOSE指定容器在运行时监听的网络端口,它并不会公开端口,仅起到声明的作用,公开端口需要容器运行时使用-p参数指定。
    ENTRYPOINT指定容器启动程序及参数,一般运行容器时不会被替换或覆盖,而会追加。
    如果镜像中ENTRYPOINTCMD都存在,则CMD将作为ENTRYPOINT的参数使用。
  2. 制作自己的镜像

    根据以下配置,制作dockerfile

      ruoyi-java:image: openjdk:8u342-jreports:- 8080:8080volumes:- /home/app/ruoyi-admin.jar:/usr/local/src/ruoyi-admin.jarcommand: [ "java", "-jar", "/usr/local/src/ruoyi-admin.jar" ]networks:- ruoyi-netdepends_on:- ruoyi-db
    

    编写dockerfile文件

    FROM openjdk:8u342-jre
    WORKDIR /app
    COPY ./ruoyi-admin.jar .
    CMD ["java", "-jar", "ruoyi-admin.jar"]
    EXPOSE 8080
    
  3. image镜像与layer层

    image文件由一系列层构建而成,dockerfile每一个命令都会生成一个层。每一层都是只读的。

    创建容器时,会创建一个新的可写层,通常称为“容器层”。对正在运行的容器所做的所有更改(如写入新文件、修改现有文件和删除文件)都将写入容器层,而不会修改镜像。

    img

  4. 多阶段构建

    在构建基于 Java 的应用程序时,需要一个 JDK 将源代码编译为 Java 字节码。但是,在生产中不需要该 JDK。

    多阶段构建可以将生成时依赖与运行时依赖分开,减小整个image文件大小

    还是上面的例子

    FROM maven AS build
    WORKDIR /source
    COPY . .
    RUN mvn packageFROM  openjdk:8u342-jre
    WORKDIR /app
    COPY --from=build /source/ruoyi-admin/target/ruoyi-admin.jar .
    EXPOSE 80
    ENTRYPOINT ["java","-jar","ruoyi-admin.jar"]
    
    docker build -t ruoyi-jar:4.7.4 .
    
    # project name
    name: "app"services:ruoyi-java:image: ruoyi-jar:4.7.4command: ["--server.port=8080","--ruoyi.profile=/home/ruoyi/uploadPath","--spring.datasource.druid.master.url=jdbc:mysql://ruoyi-db:3306/ry?useUnicode=true&characterEncoding=utf8","--spring.datasource.druid.master.username=root","--spring.datasource.druid.master.password=123456"]ports:- 8080:8080networks:- ruoyi-nethealthcheck:test: [ "CMD", "curl", "-f", "http://localhost:8080" ]interval: 10stimeout: 5sretries: 5start_period: 10sdepends_on:ruoyi-db:condition: service_healthyruoyi-db:image: mysql:5.7environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=rycommand: ["--character-set-server=utf8mb4","--collation-server=utf8mb4_general_ci","--skip-character-set-client-handshake"]volumes:- /home/app/sql:/docker-entrypoint-initdb.d- ruoyi-data:/var/lib/mysqlnetworks:- ruoyi-nethealthcheck:test: [ "CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', 'root', '-p$$MYSQL_ROOT_PASSWORD' ]interval: 10stimeout: 5sretries: 5start_period: 10svolumes:ruoyi-data:networks:ruoyi-net:
    

私有仓库

在实际工作中,很多公司的代码不能上传到公开的仓库中,因此我们可以创建自己的镜像仓库。

docker run -d -p 5000:5000 --restart always --name registry registry:2 # 爬取并运行registry,并把端口映射为5000
docker image tag ruoyi-java:4.7.4 localhost:5000/ruoyi-java:4.7.4 #修改tag添加registry地址
docker push localhost:5000/ruoyi-java:4.7.4 # 推送镜像
docker pull localhost:5000/ruoyi-java:4.7.4 # 拉取镜像

修改/etc/docker/daemon.json,将私有仓库设置为http也可以访问,添加一行。

"insecure-registries": ["192.168.56.108:5000"] #这里地址是本机地址

镜像导入导出

命令解释
docker save将一个或多个image打包保存的工具
选项-o指定保存文件名
docker load 将保存的镜像文件载入成镜像
-i指定载入的文件名
docker export将container的文件系统进行打包保存
-o指定保存文件名
docker importcontainer保存文件导入后会成为一个image

不要跟export和import命令混淆

docker save/load IMAGE save和load操作的是镜像

docker export/import CONTAINERexport和import操作对象是容器

image包含多个层,每一层都不可变,save保存的信息包含每个层和所有标签 + 版本信息。

容器运行的时候会创建一个可写入的容器层,所有的更改都写入容器层,export导出的只有容器层,不包含父层和标签信息。

  1. docker save保存的是镜像(image),docker export保存的是容器(container);

  2. docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;

  3. docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

  4. 若是只想备份image,使用save和load。

  5. 若是在启动容器后,容器内容有变化,需要备份,则使用export和import。

扩展

postgres-save.tar:docker save导出的文件

postgres-export.tardocker export导出的文件

img

分层的文件系统。Docker镜像实际上就是由这样的一层层文件进行叠加起来的,上层的文件会覆盖下层的同名文件。如果将postgres-save.tar中的各层文件合并到一起,基本就是postgres-export.tar的内容。由于postgres-save.tar里面的各层文件会存在很多重复的文件,这也解释了为什么postgres-save.tar会比postgres-export.tar大100多M。

docker load必须要载入的是一个分层文件系统,而postgres-export.tar并不具有这样的结构,因此无法载入。

docker import仅仅是将tar包里面的文件复制进来,所以不管tar包里面的文件结构是怎样的,都可以载入进来,所以能够载入postgres-save.tar。但postgres-save.tar并不是一个有效的操作系统镜像,因此当我试图以改镜像启动容器时,容器并不能启动

参考

  1. docker一小时入门教程 (yuque.com)
  2. https://yeasy.gitbook.io/docker_practice/
  3. https://jingsam.github.io/2017/08/26/docker-save-and-docker-export.html

相关文章:

docker基础学习笔记

文章目录 Docker简介Linux下安装DockerDocker常用命令Docker网络Docker存储docker-composedockerfile制作镜像私有仓库镜像导入导出参考 Docker简介 定义&#xff1a;Docker是一个开源的应用容器引擎优势&#xff1a; 一键部署&#xff0c;开箱即用&#xff1a;容器使用基于im…...

Could not resolve all files for configuration ‘:app:androidJdkImage‘.

在使用./gradlew build编译项目时候遇到了该问题&#xff0c;整体错误如下: * What went wrong: Configuration cache state could not be cached: field generatedModuleFile of com.android.build.gradle.tasks.JdkImageInput bean found in field compilerArgumentProvider…...

GLP-1 , GLP-1R

-- 6VCB_GLP-1R G_protein, GLP-1 peptidea positive allosteric modulator...

【数据结构】F : 道路建设 (Ver. I)

F : 道路建设 (Ver. I) Description 有N个村庄&#xff0c;编号从1到N&#xff0c;你应该建造一些道路&#xff0c;使每个村庄都可以相互连接。 两个村A和B是相连的&#xff0c;当且仅当A和B之间有一条道路&#xff0c;或者存在一个村C使得在A和C之间有一条道路&#xff0c;并…...

flutter 无法从H5 WebView 访问摄像头和录音权限

AndroidManifest.xml需要在 中添加以下权限&#xff1a; <uses-permission android:name"android.permission.INTERNET"/> <uses-permission android:name"android.permission.CAMERA" /> <uses-permission android:name"android.per…...

electron27-react-mateos:基于electron+react18仿matePad桌面系统

基于Electron27React18ArcoDesign搭建桌面版OS管理系统。 electron-react-mateos 基于最新前端跨端技术栈electron27.xreact18arco-designzustand4sortablejs构建的一款仿制matePad界面多层级路由管理OS系统。 ElectronReactOS支持桌面多路由配置&#xff0c;新开窗口弹窗开启路…...

高精度算法总结

高精度加法 题目链接&#xff1a; https://www.acwing.com/activity/content/problem/content/825/ 代码模版&#xff1a; #include <iostream> #include <vector>using namespace std;// C A B vector<int> add(vector<int> &A, vector<…...

EMQX-5.3.1单机集群部署并基于Nginx实现负载均衡

本例单机集群部署使用三个节点&#xff0c;分别为node1、node2、node3 一、安装与配置 1 创建数据目录 mkdir -p node1/data node1/logs mkdir -p node2/data node2/logs mkdir -p mode3/data node3/logs 2 数据目录授权 chown 1000 node1/ node2/ node3/ chown 1000 n…...

电商又有大动静,又一短视频进军电商领域!

我是电商珠珠 电商近几年来发展迅速&#xff0c;截止到23年的10月26日&#xff0c;电商零售平台市场份额是淘宝市场占比的53%&#xff0c;京东为20%&#xff0c;拼多多手握15%的市场占比&#xff0c;三者合计份额已经达到了88%。 剩下的抖音、快手、苏宁也在奋力抢占更多。 …...

C语言线性表的链式存储(框架)

线性表的链式存储 线性表的顺序存储&#xff1a;用一块连续的内存空间 线性表的链式存储&#xff1a;不连续的内存空间 链表是由一系列的节点组成&#xff0c;每个节点包含两个域&#xff0c;一个是数据域&#xff0c;一个是指针域 链表的插入和删除原理 单项链表框架的搭建 …...

webpack配置完热更新之后还是会刷新整个页面

可以在webpack文档中找到有关热更新的详细信息&#xff0c;意思就是&#xff0c;开启热更新之后&#xff0c;整个页面你改了哪里&#xff0c;就只更新哪里&#xff0c;其他没变的&#xff0c;或者保存在缓存里面的内容&#xff0c;都不会改变&#xff0c;感谢很神奇&#xff01…...

2023年第六届传智杯程序设计挑战赛(个人赛)B组 赛后复盘

传智杯赛后复盘 大家好 我是寸铁&#x1f44a; 2023年第六届传智杯程序设计挑战赛&#xff08;个人赛&#xff09;B组 赛后复盘 喜欢的小伙伴可以点点关注 &#x1f49d; 1. 字符串拼接 细节&#xff1a;一定要清楚nextLine()和next()的区别 nextLine()是遇到回车会停下来 nex…...

C语言——深入理解指针(2)

目录 1. 数组名 2. 指针访问数组 3. 一维数组的传参&#xff08;本质&#xff09; 4. 冒泡排序 5. 二级指针 6. 指针数组&#xff08;指针的数组&#xff09; 7. 指针数组模拟二维数组 1. 数组名 在之前的代码中我们使用指针访问过数组的内容。 int arr[10] {1,2,3,4…...

【已解决】HBase 2.2.6 集群部署后,从节点未启动 HRegionServer

问题发现 今天搭建了 HBase 2.2.6 集群环境&#xff0c;启动之后发现&#xff0c;从节点的 HRegionServer 未启动。多次对比参数设置仍然未发现异常。而启动之前的 HBase 2.4.11 则完成正常&#xff0c;我就有点怀疑是不是 HBase 2.2.6 集群搭建有什么特殊的地方&#xff1f; …...

JVM——垃圾回收(方法区中的垃圾回收和(堆回收)自动垃圾回收)

目录 1.自动垃圾回收介绍1.C/C的内存管理2.Java的内存管理3.垃圾回收的对比 2.方法区的回收方法区的回收 – 手动触发回收 3.堆回收1.引用计数法2.可达性分析算法 1.自动垃圾回收介绍 1.C/C的内存管理 ⚫ 在C/C这类没有自动垃圾回收机制的语言中&#xff0c;一个对象如果不再…...

Flink 常用物理分区算子(Physical Partitioning)

Flink 物理分区算子(Physical Partitioning) 在Flink中&#xff0c;常见的物理分区策略有&#xff1a;随机分配(Random)、轮询分配(Round-Robin)、重缩放(Rescale)和广播(Broadcast)。 接下来&#xff0c;我们通过源码和Demo分别了解每种物理分区算子的作用和区别。 (1) 随机…...

Leetcode.560 和为 K 的子数组

题目链接 Leetcode.560 和为 K 的子数组 mid 题目描述 给你一个整数数组 n u m s nums nums 和一个整数 k k k &#xff0c;请你统计并返回 该数组中和为 k k k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1]…...

linklab phase1 更简单的方法

直接反汇编phase1.o&#xff0c;看eax中是0x21&#xff0c;0x21在数据域中&#xff0c;直接把从第21个字节的内容改为0000000000即可。...

8.前端--CSS-文本属性【2023.11.26】

CSS Text&#xff08;文本&#xff09;属性可定义文本的外观&#xff0c;比如文本的颜色、对齐文本、修饰文本、文本缩进、行间距等 1.文本颜色 color 属性用于定义文本的颜色。 语法&#xff1a; div { color: red; }属性&#xff1a; 2.文本对齐 text-align 属性用于设置元…...

容器技术——Cgroup

目录 容器技术容器技术概述要区分好共享与隔离的概念容器技术的三大核心容器对比虚拟机 namespaceUnionFs容器操作系统的来源操作系统的来源完整操作系统的镜像docker image是什么&#xff1f;如何构成的 如何为容器安装操作系统UnionFS&#xff08;联合文件系统&#xff09;的…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...