【Docker】Docker学习⑤ - Docker数据管理

【Docker】Docker学习⑤ - Docker数据管理

  • 一、Docker简介
  • 二、Docker安装及基础命令介绍
  • 三、Docker镜像管理
  • 四、Docker镜像与制作
  • 五、Docker数据管理
    • 1. 数据类型
      • 1.1 什么是数据卷(data volume)
        • 1.1.1 创建APP目录并生成web页面
        • 1.1.2 启动容器并验证数据
        • 1.1.3 web界面访问
        • 1.1.4 在宿主机修改数据
        • 1.1.5 删除容器
        • 1.1.6 数据卷的特点及使用
      • 1.2 文件挂载
        • 1.2.1 创建容器并挂载文件
        • 1.2.2 验证参数生效
        • 1.2.3 如何一次挂载多个目录
        • 1.2.4 数据卷使用场景
      • 1.3 数据卷容器
        • 1.3.1 启动一个卷容器Server
        • 1.3.2 启动端容器Client
        • 1.3.3 进入容器测试读写
        • 1.3.4 关闭卷容器Server测试能否启动新容器
        • 1.3.5 测试删除源卷容器Server创建容器
        • 1.3.6 测试之前的容器是否正常
        • 1.3.7 重新创建容器卷Server
  • 六、网络部分
  • 七、Docker仓库之单机Dokcer Registry
  • 八、Docker仓库之分布式Harbor
  • 九、单机编排之Docker Compose

一、Docker简介

  • 参考:【Docker】Dokcer学习① - 简介

二、Docker安装及基础命令介绍

  • 参考:【Docker】Docker学习② - Docker安装及基础命令介绍

三、Docker镜像管理

  • 参考:【Docker】Docker学习③ - Docker镜像管理

四、Docker镜像与制作

  • 参考:【Docker】Docker学习④ - Docker镜像与制作

五、Docker数据管理

如果运行中的容器修改如果生成了新的数据或者修改了现有的一个已经存在的文件内容,那么新产生的数据将会被复制到读写层进行持久化保存,这个读写层也就是容器的工作目录,此即“写时复制(COW)copy on write”机制

1. 数据类型

  • Docker 的镜像是分层设计的,底层是只读的,通过镜像启动的容器添加了一层可读写的文件系统,用户写入的数据都保存在这一层当中,如果要将写入的数据永久生效,需要将其提交为一个镜像然后通过这个镜像再启动实例,然后就会给这个启动的实例添加一层可读写的文件系统。
  • 目前Docker的数据类型分为两种,一是数据卷,二是数据容器,数据卷类似于挂载的一块磁盘,数据容器是将数据保存在一个容器上。

#查看指定PID的容器信息
日志:

	[root@gbase8c_private haproxy-1.8.31]# docker inspect bd4ec06804db......."GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/dddd5100022dc9dd378bbf2335238c397d1af17a5aea082bb92fbef9c812c93a-init/diff:/var/lib/docker/overlay2/d214d50660ae41a278d91e2c6c29fd4a7cc8184a98d5a6806c083e69dcc6e3fa/diff:/var/lib/docker/overlay2/7519ab25a179a968ecea9c106ff942cb7773ccdf45a28481fffb0459e18820ce/diff:/var/lib/docker/overlay2/d3bb81d4b06b5a73c5ced34a63078c386bdf78e7284673222ab2a620d5f0961f/diff:/var/lib/docker/overlay2/d9c3436b42f5d4b6d20e657640f1367ccbdba9521bc24d2f4e28dfaaf1d35537/diff:/var/lib/docker/overlay2/eb71623e9d9461ab5f07a015ce1882ad64366fd660e2431819cc248211d49b02/diff:/var/lib/docker/overlay2/0a665e15bd865f0001c1627b299c1704ac24c5411c4f10253946aae3087d54a6/diff:/var/lib/docker/overlay2/dac7c052b6df0bc270aa518861aff146477172886deb3dc593eaef00cd0de4cb/diff:/var/lib/docker/overlay2/d82086cfc2f1bc7fddb53f836e70daa237746cbd4a53dc5d8f70e59d8650c846/diff:/var/lib/docker/overlay2/a86b253e60b8498a4c59a48951e43f5c77a5e5e8266e405f8a7e8e1b20a63dc9/diff:/var/lib/docker/overlay2/ce3de19266860f7e3493ba9b16649347e9bd92ba648261843bd14fb1dd9e1e54/diff:/var/lib/docker/overlay2/f1bf8e7f890b1a1071493b75983686629b4e50c2bb38a7b77b1c044660a762f2/diff:/var/lib/docker/overlay2/43af4ff05b28f124d174b05c8f91a519e026386552867953fd4cc7c228497827/diff","MergedDir": "/var/lib/docker/overlay2/dddd5100022dc9dd378bbf2335238c397d1af17a5aea082bb92fbef9c812c93a/merged","UpperDir": "/var/lib/docker/overlay2/dddd5100022dc9dd378bbf2335238c397d1af17a5aea082bb92fbef9c812c93a/diff","WorkDir": "/var/lib/docker/overlay2/dddd5100022dc9dd378bbf2335238c397d1af17a5aea082bb92fbef9c812c93a/work"},.......
	[root@gbase8c_private haproxy-1.8.31]# docker exec -it bd4ec06804db bash[root@bd4ec06804db /]# dd if=/dev/zero of=file bs=1M count=100100+0 records in100+0 records out104857600 bytes (105 MB, 100 MiB) copied, 0.0658615 s, 1.6 GB/s[root@bd4ec06804db /]# md5sum file2f282b84e7e608d5852449ed940bfc51  file[root@bd4ec06804db /]# lsapps  dev  file  lib	lost+found  mnt  proc  run   srv  tmp  varbin   etc  home  lib64	media	    opt  root  sbin  sys  usr[root@bd4ec06804db /]# cp file /opt/file.log
	[root@gbase8c_private haproxy-1.8.31]# tree /var/lib/docker/overlay2/dddd5100022dc9dd378bbf2335238c397d1af17a5aea082bb92fbef9c812c93a/diff/var/lib/docker/overlay2/dddd5100022dc9dd378bbf2335238c397d1af17a5aea082bb92fbef9c812c93a/diff├── apps│   └── apache-tomcat-8.5.96│       ├── conf│       │   └── Catalina│       │       └── localhost│       ├── logs│       │   ├── catalina.2023-12-10.log│       │   ├── catalina.2023-12-12.log│       │   ├── catalina.out│       │   ├── host-manager.2023-12-10.log│       │   ├── host-manager.2023-12-12.log│       │   ├── localhost.2023-12-10.log│       │   ├── localhost.2023-12-12.log│       │   ├── localhost_access_log.2023-12-10.txt│       │   ├── localhost_access_log.2023-12-12.txt│       │   ├── manager.2023-12-10.log│       │   └── manager.2023-12-12.log│       └── work│           └── Catalina│               └── localhost│                   ├── docs│                   ├── examples│                   ├── host-manager│                   ├── manager│                   ├── myapp│                   └── ROOT│                       └── org│                           └── apache│                               └── jsp│                                   ├── index_jsp.class│                                   └── index_jsp.java├── file                  ######当前容器中产生的数据├── opt                   ######当前容器中产生的数据│   └── file.log          ######当前容器中产生的数据├── root├── tmp│   └── hsperfdata_www│       └── 29└── var└── log└── lastlog24 directories, 17 files#验证md5值一致
	[root@gbase8c_private haproxy-1.8.31]# md5sum /var/lib/docker/overlay2/dddd5100022dc9dd378bbf2335238c397d1af17a5aea082bb92fbef9c812c93a/diff/opt/file.log 2f282b84e7e608d5852449ed940bfc51  /var/lib/docker/overlay2/dddd5100022dc9dd378bbf2335238c397d1af17a5aea082bb92fbef9c812c93a/diff/opt/file.log

1.1 什么是数据卷(data volume)

数据卷实际上就是宿主机上的目录或者是文件,可以被直接mount到容器当中使用。
实际生成环境中,需要针对不同类型的服务、不同类型的数据存储要求做相应的规划,最终保证服务的可扩展性、稳定性及安全性。

  • 需要存储+有状态:redis、mysql
  • 不需要存储+有状态:tomcat session在内存中
  • 不需要存储+无状态:nginx proxy、lvs
1.1.1 创建APP目录并生成web页面
	mkdir /usr/local/testapp/echo "Test App Page" > /usr/local/testapp/index.htmlcat /usr/local/testapp/index.html[root@gbase8c_private testapp]# cat /usr/local/testapp/index.htmlTest App Page
1.1.2 启动容器并验证数据

使用-v参数,将宿主机目录映射到容器内部,web2的ro标示在容器内对该目录只读,默认是可读写的

	docker run -d --name web1 -v /usr/local/testapp/:/apps/tomcat/webapps/testapp -p8888:8080 tomcat-web:app1docker run -d --name web2 -v /usr/local/testapp/:/apps/tomcat/webapps/testapp:ro -p8889:8080 tomcat-web:app2

日志:

	[root@gbase8c_private testapp]# docker run -d --name web1 -v /usr/local/testapp/:/apps/tomcat/webapps/testapp -p8888:8080 tomcat-web:app15406ca7307ee47cf6a29d47822b33d1c9964cf64563b8e7beb839932cfe7a259[root@gbase8c_private testapp]# docker run -d --name web2 -v /usr/local/testapp/:/apps/tomcat/webapps/testapp:ro -p8889:8080 tomcat-web:app2903990f7d923082bc124158319c2226a8859c4b7d34b6af0ca8622b0d2fb4fd6[root@gbase8c_private testapp]# docker ps -aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES903990f7d923        tomcat-web:app2     "/apps/tomcat/bin/ru…"   50 seconds ago      Up 49 seconds       8009/tcp, 0.0.0.0:8889->8080/tcp   web25406ca7307ee        tomcat-web:app1     "/apps/tomcat/bin/ru…"   56 seconds ago      Up 55 seconds       8009/tcp, 0.0.0.0:8888->8080/tcp   web1[root@gbase8c_private testapp]# docker inspect -f "{{.State.Pid}}" 5406ca7307ee30824[root@gbase8c_private testapp]# nsenter -t 30824 -m -u -i -n -p[root@5406ca7307ee /]# cat /apps/tomcat/webapps/testapp/index.html Test App Page[root@5406ca7307ee /]# echo "docker" >> /apps/tomcat/webapps/testapp/index.html[root@5406ca7307ee /]# cat /apps/tomcat/webapps/testapp/index.html Test App Pagedocker[root@5406ca7307ee /]# logout[root@gbase8c_private testapp]# docker inspect -f "{{.State.Pid}}" 903990f7d92330996[root@gbase8c_private testapp]# nsenter -t 30996 -m -u -i -n -p[root@903990f7d923 /]# cat /apps/tomcat/webapps/testapp/index.htmlTest App Pagedocker[root@903990f7d923 /]# echo "docker" >> /apps/tomcat/webapps/testapp/index.html-bash: /apps/tomcat/webapps/testapp/index.html: Read-only file system#只读#宿主机验证[root@gbase8c_private testapp]# cat /usr/local/testapp/index.html Test App Pagedocker
1.1.3 web界面访问
	http://192.168.56.199:8888/testapp/
1.1.4 在宿主机修改数据

日志:

	echo "111" >> /usr/local/testapp/index.htmlweb界面访问验证
1.1.5 删除容器

创建容器的时候指定参数-v,可以删除/var/lib/docker/containers/的容器数据目录,但是不会删除数据卷的内容。
删除所有容器之后,容器的数据目录被删除但是数据卷还在,所以数据卷数据是可以持久保存的。
日志:

	[root@gbase8c_private testapp]# docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES903990f7d923        tomcat-web:app2     "/apps/tomcat/bin/ru…"   11 minutes ago      Up 11 minutes       8009/tcp, 0.0.0.0:8889->8080/tcp   web25406ca7307ee        tomcat-web:app1     "/apps/tomcat/bin/ru…"   11 minutes ago      Up 11 minutes       8009/tcp, 0.0.0.0:8888->8080/tcp   web1[root@gbase8c_private testapp]# docker rm -f -v 5406ca7307ee5406ca7307ee[root@gbase8c_private testapp]# docker rm -f -v 903990f7d923903990f7d923[root@gbase8c_private testapp]# ll /var/lib/docker/containers/总用量 0[root@gbase8c_private testapp]# cat /usr/local/testapp/index.html Test App Pagedocker111
1.1.6 数据卷的特点及使用
  • 数据卷是目录或者文件,并且可以在多个容器之间共同使用。
  • 对数据卷更改数据在所有容器里面会立即更新。
  • 数据卷的数据可以持久保存,即使删除使用该容器卷的容器也不影响。
  • 在容器里面的写入数据不会影响到镜像本身。

1.2 文件挂载

文件挂载用于很少更改文件内容的场景,比如nginx的配置文件、tomcat的配置文件等。

1.2.1 创建容器并挂载文件
	vim /usr/local/testapp/catalina.sh[root@gbase8c_private testapp]# cat catalina.sh  | grep JAVA_OPTS#自定义JAVA选项JAVA_OPTS="-server -Xms4g -Xmx4g -Xss512k -Xmn1g -XX:CMSInitiatingOccupancyFraction=65 -XX:+UseFastAccessorMethods -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=10 -XX:NewSize=2048M -XX:MaxNewSize=2048M -XX:NewRatio=2 -XX:PermSize=128m -XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5 -XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods"docker run -d --name web1 -v /usr/local/testapp/catalina.sh:/apps/tomcat/bin/catalina.sh:ro -p8811:8080 tomcat-web:app1
1.2.2 验证参数生效

日志:

	[root@gbase8c_private testapp]# docker inspect -f "{{.State.Pid}}" b62074be97a924222[root@gbase8c_private testapp]# docker inspect -f {{.State.Pid}} b62074be97a924222[root@gbase8c_private testapp]# nsenter -t 24222 -m -u -p -i -n[root@b62074be97a9 /]# ps -ef | grep javawww         29     1  7 21:28 ?        00:00:06 /usr/local/jdk/jre/bin/java -Djava.util.logging.config.file=/apps/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms4g -Xmx4g -Xss512k -Xmn1g -XX:CMSInitiatingOccupancyFraction=65 -XX:+UseFastAccessorMethods -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=10 -XX:NewSize=2048M -XX:MaxNewSize=2048M -XX:NewRatio=2 -XX:PermSize=128m -XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5 -XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/apps/tomcat -Dcatalina.home=/apps/tomcat -Djava.io.tmpdir=/apps/tomcat/temp org.apache.catalina.startup.Bootstrap start
1.2.3 如何一次挂载多个目录

多个目录要位于不同的目录下

	docker run -d --name web1 -v /usr/local/testapp/catalina.sh:/apps/tomcat/bin/catalina.sh:ro -v /usr/local/testapp:/apps/tomcat/webapps/testapp -p8811:8080 tomcat-web:app1
1.2.4 数据卷使用场景
  • 日志输出
  • 静态web界面
  • 应用配置文件
  • 多容器间目录或文件共享

1.3 数据卷容器

数据卷容器最大的功能是可以让数据在多个docker容器之间共享,即可以让B容器访问A容器的内润,而容器C也可以访问A容器的内容,即先要创建一个后台运行的容器作为Server,用于卷提供,这个卷可以为其他容器提供数据存储服务,其他使用此卷的容器作为clinet端。

1.3.1 启动一个卷容器Server

先启动一个容器,并挂载宿主机的数据目录

	docker run -d --name volume-docker -v /usr/local/testapp/catalina.sh:/apps/tomcat/bin/catalina.sh:ro -v /usr/local/testapp:/apps/tomcat/webapps/testapp -p8800:8080 tomcat-web:app1
1.3.2 启动端容器Client
	docker run -d --name web1 -p8801:8080 --volumes-from volume-docker tomcat-web:app1docker run -d --name web2 -p8802:8080 --volumes-from volume-docker tomcat-web:app2
1.3.3 进入容器测试读写

读写权限依赖于源数据卷Server容器

1.3.4 关闭卷容器Server测试能否启动新容器
	docker stop volume-dockerdocker run -d --name web3 -p8803:8080 --volumes-from volume-docker tomcat-web:app2
1.3.5 测试删除源卷容器Server创建容器
	docker rm -fv volume-dockerdocker run -d --name web4 -p8804:8080 --volumes-from volume-docker tomcat-web:app2
1.3.6 测试之前的容器是否正常

已经运行的容器不受影响

1.3.7 重新创建容器卷Server
	docker run -d --name volume-docker -v /usr/local/testapp/catalina.sh:/apps/tomcat/bin/catalina.sh:ro -v /usr/local/testapp:/apps/tomcat/webapps/testapp -p8800:8080 tomcat-web:app1docker run -d --name web4 -p8804:8080 --volumes-from volume-docker tomcat-web:app2
  • 在当前环境下,即使把提供卷的容器Server删除,已经运行的容器Client依然可以使用挂载的卷,因为容器是通过挂载访问数据的,但是无法创建新的卷容器客户端,但是再把容器卷容器Server创建后即可正常创建卷容器Client,此方式可以用于线上共享数据目录等环境,因为即使数据卷容器被删除了,其他已经运行的容器依然可以挂载使用。
  • 数据卷容器可以作为共享的方式为其他容器提供文件共享,类似于NFS共享,可以在生产中启动一个实例挂载本地的目录,然后其他的容器分别挂载此容器的目录,即可保证各容器之间的数据一致性。
    日志:
	[root@gbase8c_private testapp]# docker run -d --name volume-docker -v /usr/local/testapp/catalina.sh:/apps/tomcat/bin/catalina.sh:ro -v /usr/local/testapp:/apps/tomcat/webapps/testapp -p8800:8080 tomcat-web:app1de700ac7ae15f1efb07e672750997f91a469b8b2e33cc166cf4ad38328e4a815[root@gbase8c_private testapp]# docker run -d --name web1 -p8801:8080 --volumes-from volume-docker tomcat-web:app11490e4a6697d5978614ac6b8557ef39ace767270da5014043a81ee7cc44775c2[root@gbase8c_private testapp]# docker run -d --name web2 -p8802:8080 --volumes-from volume-docker tomcat-web:app2e925dd3ccc2c45e03940ee5fbc22c4f6cd5be27371bcb20cc005442ea132ce4e[root@gbase8c_private testapp]# docker ps -aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMESe925dd3ccc2c        tomcat-web:app2     "/apps/tomcat/bin/ru…"   6 seconds ago       Up 5 seconds        8009/tcp, 0.0.0.0:8802->8080/tcp   web21490e4a6697d        tomcat-web:app1     "/apps/tomcat/bin/ru…"   11 seconds ago      Up 10 seconds       8009/tcp, 0.0.0.0:8801->8080/tcp   web1de700ac7ae15        tomcat-web:app1     "/apps/tomcat/bin/ru…"   15 seconds ago      Up 14 seconds       8009/tcp, 0.0.0.0:8800->8080/tcp   volume-docker[root@gbase8c_private ~]# docker exec 1490e4a6697d bash[root@gbase8c_private ~]# docker exec -it 1490e4a6697d bash[root@1490e4a6697d /]#  echo "#test" >> /apps/tomcat/webapps/testapp/index.html [root@1490e4a6697d /]#  echo "#test" >> /apps/tomcat/bin/catalina.sh            bash: /apps/tomcat/bin/catalina.sh: Read-only file system[root@1490e4a6697d /]# exit[root@gbase8c_private ~]# docker stop volume-docker volume-docker[root@gbase8c_private ~]# docker run -d --name web3 -p8803:8080 --volumes-from volume-docker tomcat-web:app25f0cb9bb4888fde6252d09c63d1eda34b9194a2fa68da04648b17334be96a207[root@gbase8c_private ~]# docker rm -fv volume-dockervolume-docker[root@gbase8c_private ~]# docker run -d --name web4 -p8804:8080 --volumes-from volume-docker tomcat-web:app2docker: Error response from daemon: No such container: volume-docker.See 'docker run --help'.[root@gbase8c_private ~]# docker run -d --name volume-docker -v /usr/local/testapp/catalina.sh:/apps/tomcat/bin/catalina.sh:ro -v /usr/local/testapp:/apps/tomcat/webapps/testapp -p8800:8080 tomcat-web:app153c04a1406b994f96cd073465eee084e75153c45b65d9df73d4f2b9035282664[root@gbase8c_private ~]# docker run -d --name web4 -p8804:8080 --volumes-from volume-docker tomcat-web:app2cbe7367b77e3bc80b128e115fe7266601f0d819280594849fc17965034588edb

六、网络部分

  • 参考:【Docker】Docker学习⑥ - 网络部分

七、Docker仓库之单机Dokcer Registry

  • 参考:【Docker】Docker学习⑦ - Docker仓库之单机Dokcer Registry

八、Docker仓库之分布式Harbor

  • 参考:【Docker】Docker学习⑧ - Docker仓库之分布式Harbor

九、单机编排之Docker Compose

  • 参考:【Docker】Docker学习⑨ - 单机编排之Docker Compose

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

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

相关文章

面试常问的Spring AOP底层原理

AOP底层原理可以划分成四个阶段:创建代理对象阶段、拦截目标对象阶段、调用代理对象阶段、调用目标对象阶段 第一阶段:创建代理对象阶段 通过getBean()方法创建Bean实例根据AOP的配置匹配目标类的类名,判断是否满足切…

Termux结合内网穿透实现无公网ip远程SFTP传输文件

目录 前言 1. 安装openSSH 2. 安装cpolar 3. 远程SFTP连接配置 4. 远程SFTP访问 4. 配置固定远程连接地址 结语 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊Termux结合内网穿透实现无公网ip远程SFTP传输文件,希望大家能…

vue中单个页面设置多个上传组件

简述: 在最近的项目中,遇到单页面有多个上传图片的地方,如果每一个上传组件都写一个上传事件,在编码过程中又繁琐,后期维护也麻烦,最终在element-ui中找到了解决方法,在此记录一下。 html代码 …

RisingWave 存储引擎优化:更高的性能与更低的成本

1背景 在「Hummock :专为 RisingWave 流处理而设计的云原生存储引擎」一文中里我们已经介绍了 Hummock 的设计理念与基本架构,本文主要介绍 Hummock 近期几个版本的重大改进与优化 2Fast Compaction 在设计之初,Hummock 的数据文件格式参…

统计linux cpu已使用核心数目

查看cpu核心数 nproc 统计cpu负载 os.getoadavg() 15.09: 过去 1 分钟的平均负载。15.17: 过去 5 分钟的平均负载。15.74: 过去 15 分钟的平均负载。 这些数字表示系统在过去一段时间内的平均负载。平均负载是指在系统中运行或等待运行的进程数。通常,如果这些…

Lua 中的高级特性:模块的使用、字符串模式匹配、高阶函数和表的元方法

### 1. 模块的使用 在 Lua 中,模块是一种封装代码的方式,使得代码可以被重用。下面是一个简单的模块定义和使用的示例: lua -- 定义一个名为 mymodule 的模块 mymodule {} function mymodule.sayHello() print("Hello from my mo…

WinSCP如何使用公网TCP地址访问本地服务器

文章目录 1. 简介2. 软件下载安装:3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件,它的主要功能是在本地与远程计…

【pytorch框架】使用 PyTorch 进行深度学习

1.Pytorch介绍 PyTorch 是由 Facebook 创建和发布的用于深度学习计算的 Python 库。它起源于早期的库 Torch 7,但完全重写。 它是两个最受欢迎的深度学习库之一。PyTorch 是一个完整的库,能够训练深度学习模型以及在推理模式下运行模型,并支…

阿里巴巴中国站上传图片到1688 API(upload_img-上传图片到1688-1688.upload_img)

随着电子商务的快速发展,越来越多的企业开始利用阿里巴巴中国站平台进行产品推广和销售。为了更好地展示产品,上传图片成为了必不可少的一环。本文将介绍如何使用阿里巴巴中国站API中的upload_img接口上传图片到1688平台,并附上相关的代码示例…

CFD网格中面元和体元几何关系整理

CFD网格中面元和体元几何关系整理 二维图示 三维图示 说明 变量说明备注 X f \bold{X_f} Xf​面元中心 S \bold{S} S面元法向 X P \bold{X_P} XP​Owner体心 X N \bold{X_N} XN​Neighbour体心 X P f \bold{X_{Pf}} XPf​ X f − X P \bold{X_f}-\bold{X_P} Xf​−XP​ X N…

阿里员工自曝:某多多的4轮面试都通过了,但到了谈薪资的环节,被HR为难

HR 的为难 又是一期「排雷心理按摩」,正在密谋年底跳槽的同学需要额外注意。 起源是我看到了这么一篇帖子分享: 一位目前应该还是在职的阿里巴巴的员工,前后花了一个多月的时间,顺利通过了某多多的 4 轮面试。 按道理,…

windows下nginx代理静态资源失效

起因:想把公司网站弄成动静分离的,但是本地代理静态图片一致失效。 1.查看通配符是否正确 2.查看路径是否正确 还有一种可能是我没想到的,nginx进程没关闭掉导致的,属实离谱,我打开任务管理器搜索nginx,…

snmp网管服务MIB Browser使用

MIB Browser 软件打开显示界面,首先需要配置地址、端口号、团体名、snmp版本点击Advanced,弹出配置界面 配置成功后双击走测列表信息就可以查看交换机端口状态、版本号等信息; 例如:我的交换机8号端口是正常,其他端口是…

bash 5.2中文修订1

Bash Features(专题) 本文简要描述了 Bash shell(版本 5.2,2022 年 9 月 19 日)中的功能。 Bash 主页是 http://www.gnu.org/software/bash/ 。 这是 5.2 版,最后更新于 2022 年 9 月 19 日,GN…

蓝桥杯备战——4.继电器/蜂鸣器

1.分析原理图 最好自己先去查查138以及ULN2003的使用方法,我这里直接讲思路。 由上图我们可以看到如果138输入ABC101,则输出Y50,此时若WR通过跳线帽接地则Y5C1 ,于是573(U9)处于输出跟随输入P0状态,此时若P061,则573输出Q71&am…

CPC认证 TEMU出口儿童便携式游泳池ASTM F2666测试标准

便携式游泳池是由PVC加网布制成供儿童和家庭洗澡娱乐的便携式游泳池。简介它和国内的充气水池区别在于,充气水池主要是供儿童钓鱼或摸鱼娱乐而用。所以,业内又叫其为摸鱼池。儿童充气游泳池上架亚马逊出口需要办理CPC认证ASTM F2666标准测试。咨询看首页…

Vue好看的组件库:Element

文章目录 1、什么是Element2、Element快速入门3、Element布局3.1、 Layout 局部3.2、容器布局 1、什么是Element Element:是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库,用于快速构建网页 Element 提供了很多组件(组成网页的部件…

怎么隐藏磁盘或U盘分区?

隐藏分区需求确实存在! 某用户将自己的U盘驱动器分为两个分区,一个是可引导的活动主分区,另一个分区包含服务包和其他用于技术支持的内容,他一直被以下两个问题所困扰: 是否可以隐藏U盘分区? 如果想更改内…

10.docker卷

Docker Volume ​Docker Volume 是 docker的数据卷,用于保持数据持久化。MySQL运行在Docker容器中时,一般将数据通过Docker Volume保存在主机上,即使删除MySQL容器,数据不会丢失。 MySQL Dockerfile 找到docker hub上的mysql 5…

QEMU搭建arm虚拟机开发环境

获取QEMU代码 git clone https://gitlab.com/qemu-project/qemu.git 切换对应的工程分支 使用git指令切换到对应的分支上,我这里使用的是stable-4.0的分支 git checkout -b stable-4.0 remotes/origin/stable-4.0 配置&编译 在工程的根目录下执行 ./conf…