福建省工程建设信息官方网站/重庆森林经典台词图片
【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
相关文章:

【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.…...

C/C++ - 编程语法特性
目录 标准控制台框架 输入输出对象 命名空间 标准控制台框架 头文件 #include <iostream> 告诉编译器我们要使用iostream库尖括号中的名字指定了某个头文件(header) 入口函数 int main(void) 返回 return 0; 输出语句 std::cout << "H…...

Backtrader 文档学习-Target Orders
Backtrader 文档学习-Target Orders 第五部分 ipython 代码中,有详细解释持仓价值Value的计算,算是彩蛋。 1. 概述 sizer不能决定操作是买还是卖,意味着需要一个新的概念,通过增加小智能层可以决定买卖,即通过持仓份…...

QT发生弹出警告窗口
QTC开发程序弹出警告窗口,如上图 实施代码: #include <QMessageBox> int main() {// 在发生错误的地方QMessageBox::critical(nullptr, "错误", "发生了一个错误,请检查您的操作。");}上面的文字可以更改&#x…...

vue3使用特殊字符@、~代替路径src
在vite.config.js中引入 import { resolve } from pathexport default defineConfig({resolve:{alias:{~:resolve(__dirname,src)}} })vue3使用特殊字符、~代替路径src_vue3 ~/-CSDN博客...

Java中的HTTPS通信
在Java中实现HTTPS通信,主要涉及到SSL/TLS协议的使用,用于提供数据传输的安全性。下面我们将深入探讨如何使用Java进行HTTPS通信。 一、基本概念 HTTPS,全称为Hypertext Transfer Protocol Secure,是HTTP的安全版本。它使用SSL/…...

威联通QNAP NAS结合cpolar内网穿透实现公网远程访问NAS中存储的文件
文章目录 推荐 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣…...

Ubuntu上安装部署Qt
首先需要下载对应的虚拟机软件和ubuntu镜像,虚拟机软件使用VMware或者Virtual Box都行,我用的是前者,这里是VMware的下载链接:下载 VMware Workstation Pro | CN。Ubuntu镜像推荐去清华的网站下载:Index of /ubuntu-re…...

MySQL的`FOR UPDATE`详解
MySQL的FOR UPDATE详解 欢迎阅读本博客,今天我们将深入探讨MySQL中的FOR UPDATE语句,它用于在事务中锁定选择的数据行,确保在事务结束前其他事务无法修改这些数据。 1. FOR UPDATE基础 FOR UPDATE是用于SELECT语句的一种选项,它…...

计算机网络 第4章(网络层)
系列文章目录 计算机网络 第1章(概述) 计算机网络 第2章(物理层) 计算机网络 第3章(数据链路层) 计算机网络 第4章(网络层) 计算机网络 第5章(运输层) 计算机…...

HDD的烦恼:HAMR会让SMR黯然失色吗?
HDD相关阅读参考: HDD回暖于2024,与SSD决战于2028 HDD最后的冲刺:大容量硬盘的奋力一搏 叠瓦式磁记录技术(SMR)自20世纪90年代起开始研究,于2010年后逐渐商业化应用于高密度硬盘。该技术的核心理念在于通…...

linux安装docker(入门一)
环境:centos 7(linux) 网站 官网: https://docs.docker.com/ Docker Hub 网站: https://hub.docker.com/ 容器官方概述 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立软件包 &…...

Node.js中fs模块
fs模块是Node.js中的一个核心模块,全称为File System(文件管理系统)。该模块专门用来操作系统中的文件,常用的操作方式是对文件的读取和写入。 fs模块的API大都提供三种操作方式: 同步操作文件:代码会被阻…...

google-webrtc 原理
Google WebRtc Android 使用详解(包括客户端和服务端代码) - 知乎 (zhihu.com) 【记】Android使用WebRTC未释放资源导致的内存泄露 - 掘金 (juejin.cn)...

uniapp 框架搭建及使用
uniapp官方文档 uview官网文档 前期工作: 1.下载Hbuilder X编辑器;2.熟悉uniapp的相关文档;3.查找合适的UI组件库,我使用的是uview(适配H5和小程序) 创建uniapp 新建: 新项目的话打开Hbuilder X选择项目&…...

嵌入式软件工程师面试题——2025校招社招通用(计算机网络篇)(三十二)
说明: 面试群,群号: 228447240面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但…...

《WebKit 技术内幕》学习之十一(4):多媒体
4 WebRTC 4.1 历史 相信读者都有过使用Tencent QQ或者FaceTime进行视频通话的经历,这样的应用场景相当典型和流行,但是基本上来说它们都是每个公司推出的私有产品,而且通信等协议也都是保密的,这使得一种产品的用户基本上不可能…...

k8s基础知识
理解docker [二] - namespace - 知乎 Kubernetes Controller 机制详解(一)-赵化冰的博客 | Zhaohuabing Blog K8S之自定义Controller - 知乎 Controller - K8S - 知乎 https://coolshell.cn/articles/17010.html/comment-page-2#comment-2133157 ht…...

Docker容器引擎(3)
目录 一.Docker 镜像的创建 1.基于现有镜像创建 2.基于本地模板创建 3.基于Dockerfile创建: Dockerfile 操作常用的指令: ADD 和 COPY 的区别? CMD 和 ENTRYPOINT 的区别? 容器启动命令的优先级 如…...

【Android12】Android Framework系列---Adb和PMS安装apk源码流程
Adb和PMS安装apk源码流程 adb install命令 通过adb install命令可以将apk安装到Android系统(注意:特定类型的apk,比如persist类型是无法通过adb安装的) 下述命令中adb解析install命令,并调用Android PackageManagerS…...

web漏洞总结大全(基础)
前言 本文章是和cike_y师傅一起写的,cike_y博客:https://blog.csdn.net/weixin_53912233?typeblog 也欢迎大家对本文章进行补充和指正,共同维护这个项目,本文的github项目地址: https://github.com/baimao-box/Sum…...

获取双异步返回值时,如何保证主线程不阻塞?
目录 一、前情提要二、JDK8的CompletableFuture1、ForkJoinPool2、从ForkJoinPool和ThreadPoolExecutor探索CompletableFuture和Future的区别 三、通过CompletableFuture优化 “通过Future获取异步返回值”1、通过Future获取异步返回值关键代码(1)将异步…...

hosts文件修改后无法保存的解决办法
目录 第一步 右键点击C盘里的hosts文件,选择重命名。 第二步 在桌面新建一个txt文件,命名为hosts。并把自己需要的内容写入保存。 第三步 把hosts.txt文件复制到原本hosts文件的路径下。右键选中hosts.txt文件,选择重命名,去掉…...

源码篇--Redis 五种数据类型
文章目录 前言一、 字符串类型:1.1 字符串的编码格式:1.1.1 raw 编码格式:1.1.2 empstr编码格式:1.1.3 int 编码格式:1.1.4 字符串存储结构展示: 二、 list类型:2.1 List 底层数据支持:2.2 List 源码实现:2.3 List 结构…...

Sulfo Cy2 Biotin,水溶性 Cy2 生物素,能够与各种氨基基团特异性结合
您好,欢迎来到新研之家 文章关键词:Sulfo Cyanine2 Biotin,Sulfo Cy2 Biotin,水溶性 Cy2 生物素,Sulfo-Cy2-Biotin,水溶性-Cy2-生物素 一、基本信息 产品简介:Sulfo Cyanine2 Biotin, also k…...

NineData支持制定安全、可靠的SQL开发规范
在和数据库打交道中,不管是数据库管理员(DBA)还是开发人员,经常会做一些CURD操作。因为每个人对数据库的了解程度不一样,所以在项目上线时,往往还需要专职人员对数据库的CURD操作进行审核,确保C…...

LSTM时间序列预测
本文借鉴了数学建模清风老师的课件与思路,可以点击查看链接查看清风老师视频讲解:【1】演示:基于LSTM深度学习网络预测时间序列(MATLAB工具箱)_哔哩哔哩_bilibili % Forecast of time series based on LSTM deep learn…...

Rocky8 顺利安装 Airflow 并解决数据库报错问题
rocky是替代centos的服务器系统,稳定可靠。rocky8会比centos7新,可以支持更多服务软件的安装,免去升级各种库的麻烦,本文运行airflow服务就用rocky8系统。airflow是一个定时任务管理系统,功能强大,目前是ap…...

[足式机器人]Part2 Dr. CAN学习笔记- 最优控制Optimal Control Ch07-3 线性二次型调节器(LQR)
本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记 - 最优控制Optimal Control Ch07-3 线性二次型调节器(LQR) 1. 数学推导2. 案例反洗与代码详解 1. 数学推导 2. 案例反洗与代码详解...

Eyes Wide Shut? Exploring the Visual Shortcomings of Multimodal LLMs
大开眼界?探索多模态模型种视觉编码器的缺陷。 论文中指出,上面这些VQA问题,人类可以瞬间给出正确的答案,但是多模态给出的结果却是错误的。是哪个环节出了问题呢?视觉编码器的问题?大语言模型出现了幻觉&…...