田园牧歌桃源乡

柔风,细雨,黛码,好时光

Latest

容器环境中的几种文件系统

Docker 的存储驱动是容器文件系统的关键组成部分,决定了容器镜像和数据的存储方式。以下是常见的存储驱动及其优缺点: 1. OverlayFS/Overlay2 简介: Overlay 是现代 Linux 文件系统中一种高效的联合文件系统,Overlay2 是其改进版本,是 Docker 的默认驱动。 Overlay文件系统允许将两个或多个文件系统的内容合并呈现给用户。这种技术常用于容器技术,比如Docker和Kubernetes,以实现文件系统的层叠。Overlay文件系统通过将一个文件系统层“覆盖”在另一个文件系统层之上,使得两个文件系统看起来像是一个统一的文件系统。 优点: * 性能好:特别是在现代 Linux 系统上,Overlay2 的写入和读取性能优于 Overlay。 * 资源利用率高:只在需要时合并文件,减少了存储和 I/O 开销。 * 镜像层管理简单:支持更深的层数,适合大多数工作负载。 * 社区支持:得到 Docker 官方的推荐和持续优化。 缺点: * 内核依赖:需要 Linux

从Debian bookworm升级到Debian trixie后,podman使用中出现`User-selected graph driver "overlay" overwritten by graph driver "vfs" from database`的解决办法

执行podman命令时,出现一条警告: podman ps ERRO[0000] User-selected graph driver "overlay" overwritten by graph driver "vfs" from database - delete libpod local files ("/home/nalan/.local/share/containers/storage") to resolve. May prevent use of images created by other tools CONTAINER ID IMAGE COMMAND CREATED

Ghost 6.0缺陷重重

不知道Ghost团队是如何考虑的,她们将许多JS和CSS文件外包给jsdelivr。但jsdelivr的访问是时好时坏的。因此这个外包的文件通常都无法访问,导致功能异常。 因上述原因,搜索、注册框无法访问。 因上述原因,管理界面的Networks无法访问。 之前的Explore似乎被取消了。Ghost团队真是随意抛弃功能。 管理界面单独设定了域名后,activitypub接口无法访问。 容器化版本的Ghost(Docker Hub),似乎没有办法固定到指定的版本使用。无论是测试还是日常使用,都非常不便。只能使用最新版本。而最新版本问题多多。 正在考虑停止使用Ghost。

在Debian trixie中升级PostgreSQL 15到PostgreSQL 17

首先,升级Debian bookworm到Debian trixie。 升级后,不要急。不要急着清理(purge)旧的软件包。待升级PostgreSQL 15到PostgreSQL 17后,再清理旧的postgresql-15软件包。 如果你和我一样,已经将postgresql-15软件包清理了,则需要先安装postgresql-15软件包。当然,Debian trixie已经不再提供postgres-15软件包了,所以需要从第三方处安装。 如果已经将postgresql-15包清理了,执行下列脚本: /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh 该脚本将Postgreql官方提供的(而不是Debian项目提供的)仓库加入软件源中。 再更新软件源。 apt update 再安装postgresql-15软件包。 apt install postgresql-15 执行postgresql数据的更新。 查看先有的数据库集群: pg_lscluster 升级数据库集群: pg_upgradeclu

Debian 12到Debian 13的升级(Debian bookworm到Debian trixie的升级)

Debian 12代号:bookworm Debian 13代号:trixie 从Debian 12升级到Debian 13,是主要改动,有大量的破坏性更新。因此升级需要小心谨慎。 首先需要确定CPU架构,Debian 13支持以下CPU架构: * 64-bit PC (amd64) * 64-bit ARM (arm64) * ARM EABI (armel) * ARMv7 (EABI hard-float ABI, armhf) * 64-bit little-endian PowerPC (ppc64el) * 64-bit little-endian RISC-V (riscv64) * IBM System z (s390x) 此外,在64位的PC机器上,部分用户空间的32位程序(i386)是可用的。但整体而言,不支持i386架构的机器。因此,i386架构的机器不应该升级到Debian

podman主机和容器间文件的复制

使用容器时,在主机和容器直接复制文件是常见的需求。本文简述这一流程的操作过程。 podman cp命令被用于主机和容器之间的文件复制。可以复制目录,也可以复制文件。使用podman cp命令,可以将文件从容器复制到主机,也可以将文件从主机复制到容器,还可以在两个容器之间复制文件。 将目录从主机复制到容器: podman cp images container-id:/my_app/images 这个命令会将images目录下的文件和目录复制到容器中的目标文件夹下。 将文件从主机复制到容器: podman cp images/girl.png container-id:/my_app/images 这个命令会将这个文件复制到容器中的目标文件夹下。 podman cp container-id:/my_app/images ./images 将目录从容器复制到主机: podman cp container-id:/my_app/images/girl.png ./images 这个命令会将容器中的指定目录中的文件复制到主机的目标目录下。

为Java项目配备Maven腾讯云镜像,以加速项目依赖的解析和下载

Maven配置文件夹的路径: 全局配置:~/.m2/settings.xml 项目配置:./pom.xml Gradle配置文件夹的路径: 全局配置:~/.gradle/init.gradle 项目配置:./build.gradle 全局配置和项目配置根据实际情况配置即可。一般情况下,选择项目配置,无需全局配置。 一般的项目管理,会在maven和gradle两者构建工具中选择一个使用,因此仅需要修改一个工具的配置文件。 Maven配置文件需要添加的内容: <mirror> <id>nexus-tencentyun</id> <mirrorOf>*</mirrorOf> <name>Nexus tencentyun</name> <url&

为Gradle Wrapper配备腾讯云镜像,以加速Gradle二进制文件的下载

进入工程目录。 找到wrapper文件夹。这个文件夹通常在gradle/wrapper目录下。 修改gradle wrapper配置文件。用编辑器打开gradle-wrapper.properties文件。 修改distributionUrl。例如: distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.14-bin.zip 修改并检查无误后,之下gradlew命令。 ./graldew Gradle Wrapper这时会使用这里配备的镜像,下载Gradle二进制文件。 其他镜像: Gradle原始发布地址:https://services.gradle.org/distributions/ 腾讯云Gradle镜像:https://mirrors.cloud.tencent.com/gradle/ 阿里云Gradle镜像:https://mirrors.aliyun.com/gradle/ 除了 配备Gradle镜像外,还需要配备Maven仓库镜像,以便项目中的依赖使用。

Java学习笔记之十 继承

继承,inheritance。利用继承,人们可以基于已经存在的类构造一个新类。 继承已存在的类就是复用(继承)这些类的方法和域。在此基础上,还可以添加新的方法和域。 反射,reflection。反射,指在程序运行期间发现更多的类及其属性的能力。 类、超类、子类 class Manager extends Employee { ... } is-a关系是继承的一个明显特征。 关键字extends表示继承。 在Java中,所有的继承都是公有继承。 关键字extends表明正在构造的新类派生于一个已经存在的类。已存在的类被称为超类,superclass、基类,base class,或父类,parent class。新类被称为子类,subclass,派生类,derived class,或孩子类,child class。 如果需要调用超类的方法,可以使用关键字super。 super不是一个对象的引用,不能将super赋值给另一个对象变量,它只是一个指示编译器调用超类方法的特有关键字。 在子类中可以增加域、增加方法或覆盖(override)超类的方法。

Java学习笔记之九 对象与类

面向对象程序设计概述 在20世纪70年代,流行“结构化”过程化程序设计开发技术。 在20世纪末,面向对象程序设计成为主流的程序设计范型。 面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。 程序中的许多对象来自于标准库,还有一些是自定义的。 是自己构造对象,还是从外界购买对象,完全取决于预算和时间。 从根本上说,只要对象能够满足要求,就不必关心其功能的具体实现过程。 结构化程序设计通过设计一系列的过程(算法)来求解问题。这些过程一旦被确定,就要考虑存储数据的方式。所以,Pascal语言设计者Niklaus Wirth说:算法+数据结构=程序。(他1975年发布的书名)。这里,算法是第一位的,数据结构是第二位的。 面向对象程序设计中,数据被放在了第一位,之后再考虑操作数据的算法。 类(class)是构造对象的模板或者蓝图。由类构造(constuct)对象的过程称为创建类的实例(instance)。 用Java编写的代码都位于某个类的内部。 封装(encapsulation,有时称为数据隐藏)是与对象有关的一个重要概念。对象中的数据称