搭建 Docker 私有镜像仓库 - 乔京飞 - 博客园

mikel阅读(343)

来源: 搭建 Docker 私有镜像仓库 – 乔京飞 – 博客园

我们获取镜像,绝大多数情况下,从 Docker 官方仓库或者知名第三方仓库(如阿里云)中获取,但是对于公司内基于自身的业务生成的 Docker 镜像,很有可能涉及到商业利益,肯定不能对外公开,因此需要存放在公司的 Docker 私有镜像仓库中。

有关 Docker 的私有仓库的搭建过程,也非常简单,一般是获取和运行 Docker 官方提供的 Registry 镜像来实现。但是官网没有提供图形化界面,第三方提供了图形化界面 docker-registry-ui 镜像可以使用。本篇博客就展示带有图形化界面的 Docker 私有镜像仓库搭建过程。

DockerRegistry 的官网地址为:https://hub-stage.docker.com/_/registry

 

一、配置 Docker 信任地址

本篇博客基于之前已经安装好 Docker 的虚拟机进行演示,虚拟机的 ip 地址是:192.168.216.128

使用命令 vim /etc/docker/daemon.json 编辑 docker 服务配置文件,内容如下:

{
//这个是之前添加的 docker 阿里云仓库地址(这里隐藏了我个人账号登录阿里云后看到的仓库地址)
“registry-mirrors”: [“https://xxxxxxxxxx.mirror.aliyuncs.com”],
//这个新增加的 docker 私有镜像仓库 web 页面的地址(这里假设 web 使用的是 8050 端口)
“insecure-registries”:[“http://192.168.216.128:8050”]
}

以上内容新增加了即将要搭建的 Docker 私有镜像仓库的 web 图形化界面访问的地址和端口。

添加完成之后,需重新加载 daemon 服务以及重启 docker 服务:

# 重新加载 daemon
systemctl daemon-reload
# 重启 docker
systemctl restart docker

 

二、搭建私有镜像仓库

我个人喜欢把软件安装在 /app 目录中,因此我先在 app 目录下创建一个目录:mkdir /app/registry-ui

然后进入目录:cd /app/registry-ui/ ,然后创建并编辑 docker-compose.yml 文件:vim docker-compose.yml

version: ‘3.2’
services:
registry:
container_name: registry
restart: always
image: registry
volumes:
./registry-data:/var/lib/registry
ports:
7050:5000
networks:
reg_net
registry-ui:
container_name: registry-ui
restart: always
image: joxit/docker-registry-ui:1.5-static
ports:
8050:80
networks:
reg_net
environment:
REGISTRY_TITLE=乔豆豆的私有仓库
REGISTRY_URL=http://registry:5000
CATALOG_ELEMENTS_LIMIT=”1000″
depends_on:
registry
networks:
reg_net:
driver: bridge

对于 docker-compose 程序说,docker-compose.yml 就是它的配置文件,不要更改配置文件的名字。

当前我们已经进入了 /app/registry-ui/ 目录中,在该目录中指定 docker-compose 命令后,就会读取当前目录下的 docker-compose.yml 配置文件,去拉去两个镜像:registry 和 joxit/docker-registry-ui:1.5-static ,然后运行这两个镜像。其中 joxit/docker-registry-ui:1.5-static 镜像配置了 depends_on 为 registry ,因此 joxit/docker-registry-ui:1.5-static 镜像会在 registry 镜像运行后再运行。

对于 docker-compose 编排的多个容器,如果其内部需要互相访问的话,则需要指定服务名称,比如这里的 joxit/docker-registry-ui:1.5-static 镜像启动后的容器需要访问 registry 镜像运行的容器,因为 registry 镜像运行的容器的服务名称是 registry ,内部启动的端口是 5000 ,因此 joxit/docker-registry-ui:1.5-static 启动的容器,可以通过 http://registry:5000 访问 registry 启动的容器。

在 registry 镜像下配置了数据卷的映射:./registry-data:/var/lib/registry ,因为我们运行 docker-compose 命令是在 /app/registry-ui/ 目录下运行,因此后续我们上传的私有 Docker 镜像,就会存放在 /app/registry-ui/registry-data 目录中。

最后,让我们在 /app/registry-ui/ 下运行 docker-compose 命令吧:docker-compose up -d

image

最后通过 docker ps -a 查看启动的两个容器:

image

然后我们就可以打开浏览器输入 http://192.168.216.128:8050 访问搭建好的 docker 私有镜像仓库页面:

image

 

三、向私有仓库上传镜像

使用 docker images 命令查看本地系统中的镜像列表:

image

我们就以之前自己通过 dockerfile 制作的 fileupdown 镜像为例,介绍如何将其上传到私有镜像仓库中。

要想将自己本地机器上的 Docker 镜像推送到刚才搭建的 Docker 私有镜像仓库中,首先需要重新指定 tag 标签。

比如运行命令:docker tag fileupdown:1.0 192.168.216.128:8050/fileupdown:v1 ,可以发现新的 tag 标签必须包含有私有仓库的 web 页面访问地址,这里将版本号修改成了 v1 进行区别。

image

使用 docker images 重新查看镜像列表,能够发现打了新 tag 标签的镜像,并且其与原镜像具有相同的 image id

执行命令推送镜像到私有仓库:docker push 192.168.216.128:8050/fileupdown:v1

image

刷新私有镜像仓库的网址:http://192.168.216.128:8050 就能展示出我们上传的镜像:

image

点击 fileupdown 可以看到该镜像下的版本列表,当前只有一个版本 v1 ,所以只有一条记录:

image

 

四、从私有仓库下载镜像

使用 docker images 命令查看本地系统中的镜像列表:

image

为了方便识别和区分从私有仓库中下载的镜像,我们先将本地中两个 fileupdown 镜像删除掉,由于两个镜像的 image id 相同,因此只能通过镜像名称和 tag 的组合来删除这两个镜像,运行以下命令:

docker rmi fileupdown:1.0 192.168.216.128:8050/fileupdown:v1

image

然后执行以下命令从私有仓库中下载镜像:

docker pull 192.168.216.128:8050/fileupdown:v1

image

 

五、删除私有仓库中的镜像

默认情况下,不提供删除私有仓库镜像的功能,web 图形化界面中也没有提供,如果想要删除的话,需要进行以下操作。

查看当前运行的容器,找到 registry 容器的 id,执行命令 docker ps -a

image

查看到了 registry 的容器 id 为:3550836066ed ,然后执行以下命令进入容器中:

docker exec -it 3550836066ed sh

然后编辑文件:vi /etc/docker/registry/config.yml

version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
## 增加 delete 下的 enabled 配置,启用删除镜像功能
delete:
enabled: true
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3

修改完成保存后,退出容器,重启 registry 的容器:docker restart 3550836066ed

在本篇博客上面【搭建私有仓库】中有关 docker-compose.yml 配置文件中,我们对于 registry 服务暴露出来的端口是 7050,之所以暴露出这个端口,目的也是为了通过命令直接操作私有镜像仓库,我们首先执行以下命令获取要删除的镜像的 sh256 值:

# 访问地址的格式是:http://私有仓库地址:端口号/v2/镜像名称/manifests/镜像的tag
curl -I -XGET –header “Accept:application/vnd.docker.distribution.manifest.v2+json” \
http://192.168.216.128:7050/v2/fileupdown/manifests/v1

获取的结果为:sha256:6f6351900d2ed40826d85dcbbfd6cf3b12b36d42026e9c06f10f86b51096685f

image

当然最简单的获取方式就是,直接从 web 图形化界面中进行复制:

image

然后就可以删除镜像了,如果采用图形化界面删除的话,可以采用 Postman 发送 delete 请求:

http://192.168.216.128:7050/v2/fileupdown/manifests/sha256:6f6351900d2ed40826d85dcbbfd6cf3b12b36d42026e9c06f10f86b51096685f

image

当然也可以采用 linux 命令,如下所示:

# 反斜杠( \ )表示换行,由于命令太长,不方便查看,所以进行了换行
curl -I -X DELETE \
http://192.168.120.107:5000/v2/fileupdown/manifests/\
sha256:4d523adb3c653bab7dfd0326081860b3cba24dc393f69d6731daa513c435ec0c

以上操作完成后,虽然在 web 图形化界面中看不到了,实际上被删除镜像对于空间的占用并没有释放,因此还需要进入容器中执行命令进行空间垃圾回收:

docker exec -it 3550836066ed sh -c ‘ registry garbage-collect /etc/docker/registry/config.yml’

最终 web 界面中展示的效果如下所示:

image

image

如果你想彻底删除的话,就直接进入数据卷映射的目录中进行删除镜像的名称。

例如:本篇博客映射到本地的数据卷目录为 /app/registry-ui/registry-data ,执行以下命令进入镜像存放的目录:

# 进入存放镜像的目录中
cd /app/registry-ui/registry-data/docker/registry/v2/repositories/

然后执行 ll 查看上传到私有仓库的镜像列表,我们发现只有一个:fileupdown

然后执行删除命令,删除 fileupdown 目录即可:rm -rf fileupdown/

image

最后再执行命令,进行一下空间的垃圾回收即可:

docker exec -it 3550836066ed sh -c ‘ registry garbage-collect /etc/docker/registry/config.yml’

最后强烈建议重启一下私有镜像仓库的容器服务:docker restart 3550836066ed

然后我们再看一下 web 图形化界面,发现就比较干净了:

image

一个基于 C# Unity 开发的金庸群侠传 3D 版,直呼牛逼! - 追逐时光者 - 博客园

mikel阅读(213)

来源: 一个基于 C# Unity 开发的金庸群侠传 3D 版,直呼牛逼! – 追逐时光者 – 博客园

前言

大家应该都知道 Unity 游戏引擎是基于 C# 编程语言开发的,今天大姚给大家分享一个基于 C# Unity 开发的金庸群侠传 3D 版,该游戏真的是勾起了一代人的慢慢回忆。

项目介绍

JYX2一个基于 C# Unity 开发的金庸群侠传 3D 重制版是一个回合制战棋战斗开放世界RPG游戏,它是一个非盈利游戏项目,项目目标为重制经典游戏《金庸群侠传》(在线玩DOS原版)并支持后续一系列MOD和二次开发。你可以在PC、MAC或移动手机平台(或其他支持平台)游玩。

Unity介绍

Unity是一款广泛使用的游戏引擎,它支持多种平台,包括PC、移动设备、游戏主机等,并且提供了丰富的工具和资源,使得开发者能够高效地创建高质量的游戏和应用程序。

项目结构示意图

项目开发计划

技术实现简介

游戏画面截图

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个Star支持💖。

优秀项目和框架精选

该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。

DotNetGuide技术社区

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
  • 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群👪

DeepWiki:AI驱动、免费且实用的 GitHub 源码阅读与分析神器! - 追逐时光者 - 博客园

mikel阅读(1587)

来源: DeepWiki:AI驱动、免费且实用的 GitHub 源码阅读与分析神器! – 追逐时光者 – 博客园

前言

GitHub 作为全球最大的代码托管平台,汇聚了无数开发者的智慧结晶,为各行各业的技术进步提供了宝贵的资源。然而,面对浩瀚如海的代码库,如何高效地阅读、理解和分析源码,成为了摆在众多开发者面前的一大挑战。今天大姚给大家分享一个 AI 驱动、免费且实用的 GitHub 源码阅读与分析神器:DeepWiki,帮助开发者更加便捷地探索、理解和利用 GitHub 上的源码资源,从而提升开发效率,加速创新进程。

DeepWiki介绍

DeepWiki 是由 Cognition Labs 公司推出的一款专为开发者打造的免费的 AI 驱动 GitHub 源码阅读与分析神器。它结合了最前沿的人工智能技术,旨在帮助开发者更高效地阅读、理解和分析 GitHub 上的源码,从而加速开发进程,提升代码质量(无需注册即可使用)。

DeepWiki核心功能

  • DeepWiki具备强大的代码解析引擎,能够自动识别并提取代码中的关键元素,如函数、类、变量和注释等。
  • 提供直观的代码可视化功能,如类图、函数调用关系图等,帮助开发者以图形化的方式理解代码结构。
  • 内置多种代码分析工具,如代码质量评估、潜在缺陷预测等,帮助开发者发现代码中的潜在问题。
  • 提供代码片段搜索功能,开发者可以根据关键词快速找到相关的代码示例。
  • 等等…

一键生成 Wiki 轻松搞懂开源项目

只需要将对应 GitHub 仓库链接中的 GitHub 替换为 DeepWiki,即可直接访问对应的 DeepWiki 页面。如:https://deepwiki.com/<user>/<repository>

如下所示,我们要阅读 abp 的源码:

直接一键就给我们生成了 abp 源代码的项目详细 Wiki 文档:

Module Classes 模块类:

Module Lifecycle 模块生命周期:

项目模板概述:

向 DeepWiki 提问关于如何使用开源项目

 

Linux环境安装Git(详细图文)_linux安装git-CSDN博客

mikel阅读(182)

来源: Linux环境安装Git(详细图文)_linux安装git-CSDN博客

说明
此文档Linux环境为:Ubuntu 22.04,本文档介绍两种安装方式,一种是服务器能联网的情况通过yum或apt命令下载,第二种采用源码方式安装。

一、yum/apt方式安装
1.yum方式安装Git
如果你的服务器环境是centos/redhot,就可以按照以下方式进行安装Git,只不过这样安装的Git的版本不能确定。

Git 的工作需要调用 curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先安装这些依赖工具。

(1)先下载相关依赖

yum install curl-devel expat-devel gettext-devel \
openssl-devel zlib-devel
(2)下载Git

yum -y install git-core
(3)验证Git

git –version
2.apt方式安装Git
(1)下载相关依赖

apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
libz-dev libssl-dev
(2)下载Git

apt-get install git
中途如果要输入y/n直接输入y即可。如果弹出什么紫色界面,直接选择OK即可。

(3)验证Git

git –version
二、源码安装Git
1.源码下载地址
官方地址:Git

 

2.依赖准备
还是按照上面提到的使用yum或者apt将相关系统依赖下载。

yum

yum install curl-devel expat-devel gettext-devel \
openssl-devel zlib-devel
apt

apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
libz-dev libssl-dev
3.解压安装源码包
# 解压
tar -zxf git-2.34.1.tar.gz
# 切换到解压好的目录
cd git-2.34.1
# 编译
make prefix=/usr/local/git all
# 安装
make prefix=/usr/local/git install
4.配置环境变量
vim /etc/profile

在文件底部加上如下所示:

export PATH=$PATH:/usr/local/git/bin
保存退出。

刷新环境变量

source /etc/profile

5.验证Git
git –version

到此,git安装结束。

参考文档:Git 安装配置 | 菜鸟教程
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_52985087/article/details/136205445

Linux 搭建安装Maven环境以及编译打包_使用源码编译mvn package-CSDN博客

mikel阅读(217)

来源: Linux 搭建安装Maven环境以及编译打包_使用源码编译mvn package-CSDN博客

1.前言
这里,已经提前下载并安装好JDK 。如果没安装,先安装JDK。
2. 安装Maven
2.1 下载
# wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
2.2 解压
# tar -zxvf apache-maven-3.3.9-bin.tar.gz
# mv apache-maven-3.3.9 /usr/local/maven3
2.3 配置系统maven环境
# vim /etc/profile
MAVEN_HOME=/usr/local/maven3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
# source /etc/profile
2.4 验证是否成功
# mvn -v
3. 建立maven仓库
3.1 建立一个文件夹保存常用的包
假设路径为: /home/sailing/DAG_web/repo
3.2 配置用户范围settings.xml 文件
# vim /usr/local/maven3/conf/settings.xml
设置仓库路径:
<!– localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  –>
<localRepository>/home/sailing/DAG_web/repo</localRepository>
网络不好,也可以更换镜像源 :
  <mirrors>
    <!– mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |–>
   <mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  <mirrorOf>central,*</mirrorOf>
</mirror>
<mirror>
<id>repo1</id>
<mirrorOf>repo1</mirrorOf>
<name>maven central</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<mirror>
<id>spring</id>
<mirrorOf>spring-milestones</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>https://repo.spring.io/libs-snapshot/</url>
</mirror>
  </mirrors>
3.3 在终端运行命令将常用的包从maven中央仓库下载文件到本地:
# mvn help:system
打开/home/sailing/DAG_web/repo目录会发现多了很多文件
4. jar包编译打包
Maven最主要的命令:mvn clean compile、mvn clean test、mvn clean package、mvn clean install。执行test之前是会先执行compile的,执行package之前是会先执行test的,而类似地,install之前会执行package。
mvn clean compile:clean告诉Maven清理输出目录target/,compile告诉Maven编译项目主代码
mvn clean test:执行src/test/main下面的test方法,在执行测试之前,会自动执行项目主资源处理、主代码编译、测试资源处理、测试代码编译等工作
mvn clean package:打包,使用默认打包类型jar,在打包前会执行编译、测试等操作。生产的jar文件位于target下面
mvn clean install:将项目输入的jar安装到了Maven本地仓库中
4.1 切换到pom.xml目录下,编译打包
# mvn clean && mvn compile && mvn package       //偷懒,这里一行命令
如果maven项目更新pom.xml后,需要执行mvn update ,本地更新maven项目会自动更新jar包。
————————————————
                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/finghting321/article/details/108596803

项目首页 - LinuxJDK1.8安装包下载:本仓库提供了一个适用于Linux系统的JDK 1.8安装包,方便开发者在Linux环境下快速安装和配置Java开发环境 - GitCode

mikel阅读(235)

来源: 项目首页 – LinuxJDK1.8安装包下载:本仓库提供了一个适用于Linux系统的JDK 1.8安装包,方便开发者在Linux环境下快速安装和配置Java开发环境 – GitCode

简介

本仓库提供了一个适用于Linux系统的JDK 1.8安装包,方便开发者在Linux环境下快速安装和配置Java开发环境。

资源文件

  • 文件名jdk-1.8.tar.gz
  • 描述: 该文件为Linux系统下的JDK 1.8安装包,适用于大多数Linux发行版。

使用说明

  1. 下载文件: 点击仓库中的jdk-1.8.tar.gz文件进行下载。
  2. 解压文件:
    tar -xzvf jdk-1.8.tar.gz
    
  3. 配置环境变量:
    • 打开~/.bashrc~/.zshrc文件,添加以下内容:
      export JAVA_HOME=/path/to/jdk1.8
      export PATH=$JAVA_HOME/bin:$PATH
      
    • 保存并关闭文件,然后执行以下命令使配置生效:
      source ~/.bashrc  # 或 source ~/.zshrc
      
  4. 验证安装:
    java -version
    

    如果显示java version "1.8.x_xxx",则表示安装成功。

注意事项

  • 请确保下载的安装包与您的Linux系统架构(如x86_64)匹配。
  • 在配置环境变量时,请将/path/to/jdk1.8替换为实际的JDK安装路径。

支持与反馈

如果您在使用过程中遇到任何问题或有任何建议,欢迎通过仓库的Issue功能进行反馈。

宝塔中安装的docker目录在哪_mob649e81624618的技术博客_51CTO博客

mikel阅读(277)

来源: 宝塔中安装的docker目录在哪_mob649e81624618的技术博客_51CTO博客

宝塔中安装的 Docker 目录及使用指南

引言

在现代网络应用开发和部署中,Docker 技术的引入大大简化了软件的分发和管理。为了方便用户在 Web 环境中使用 Docker,宝塔面板提供了良好的支持。然而,很多用户在安装了 Docker 后,可能会对其工作目录结构和数据存储位置感到困惑。本文将详细介绍宝塔中 Docker 的安装目录,并提供示例代码,帮助用户更好地理解和使用 Docker。

宝塔面板简介

宝塔面板是一个面向 Web 服务器管理的工具,用户可以通过其图形化界面进行一系列操作,包括网站管理、数据库管理、Docker 容器管理等。在宝塔面板中,Docker 提供了一种便于管理和部署应用的方式。

Docker 的安装目录

在宝塔中,Docker 的安装目录通常位于 /var/lib/docker。这个目录是 Docker 默认存储所有容器、卷、镜像等数据的位置。下面是 Docker 目录的一些基本结构:

/var/lib/docker
├── overlay2
├── containers
├── networks
├── images
├── volumes
└── ...

 

  • overlay2: 存储镜像和文件系统层。
  • containers: 存储容器的文件和元数据。
  • networks: 存储网络配置。
  • images: 存储镜像信息。
  • volumes: 存储数据卷,允许持久化数据。

访问 Docker 目录

要访问 Docker 的安装目录,您可以使用 SSH 连接到服务器,并执行以下命令:

cd /var/lib/docker
ls -la

该命令将列出 Docker 所有的子目录和文件。

Docker 的基本操作

在宝塔面板中,用户可以很方便地创建、启动、停止 Docker 容器。以下是一些基础的 Docker 命令示例:

创建并运行 Docker 容器

我们可以通过以下命令创建并启动一个新的 Docker 容器,以下示例使用 Nginx 镜像:

docker run -d --name mynginx -p 80:80 nginx

查看运行中的容器

要查看当前正在运行的 Docker 容器,可以使用:

docker ps

停止和删除容器

如果需要停止并删除某个容器,可以使用以下命令:

docker stop mynginx
docker rm mynginx

删除镜像

如果需要删除一个不再需要的 Docker 镜像,可以使用:

docker rmi nginx

关系图

为了更好地理解 Docker 容器、镜像和数据卷之间的关系,我们绘制了下面的关系图。

 

CONTAINERstringnamestringiddatetimecreated_atIMAGEstringnamestringiddatetimecreated_atVOLUMEstringnamestringidusesmounts

在这个关系图中,我们看到每个容器都可以使用多个镜像,并且可以挂载多个数据卷。

数据的持久化

在 Docker 容器中,应用的数据可以通过数据卷进行持久化。在宝塔中,使用数据卷可以确保即使容器被删除,数据仍然存在。

创建数据卷

您可以通过以下命令创建一个数据卷:

docker volume create myvolume

在容器中使用数据卷

在运行容器时,可以将数据卷挂载到容器中,例如,将数据卷挂载到 /data 目录:

docker run -d --name myapp -v myvolume:/data myimage

使用宝塔面板管理 Docker

宝塔面板提供了一个友好的界面来管理 Docker。用户可以通过面板轻松创建、管理容器,下面是简单的操作步骤:

  1. 登录宝塔面板。
  2. 在左侧导航栏选择“Docker”。
  3. 点击“创建”按钮,填写容器相关信息。
  4. 点击“确认”创建并运行容器。

通过宝塔面板的图形化界面,用户无需掌握太多命令行操作即可完成对 Docker 的管理。

饼状图示例

以下是 Docker 资源占用情况的饼状图示例,我们假设有多个资源占用情况:

 

40%30%20%10%Docker Resource AllocationContainer UsageImage UsageVolume UsageNetwork Usage

这个饼状图表示了 Docker 各类资源的占用比例,帮助用户更直观地理解资源分布情况。

结尾

通过以上内容,我们了解了宝塔中 Docker 的安装目录、基本操作,以及如何在宝塔面板中管理 Docker。Docker 的使用不仅提高了开发效率,也对应用的部署与维护带来了极大的便利。希望本文能够帮助您更好地理解和使用 Docker,如果您有任何问题或想法,请随时反馈。

Maven插件下载失败?三步解决SSL握手错误与镜像配置-CSDN博客

mikel阅读(1111)

来源: Maven插件下载失败?三步解决SSL握手错误与镜像配置-CSDN博客

引言
在使用Maven构建Java项目时,你是否遇到过类似以下错误?

[ERROR] Plugin org.apache.maven.plugins:maven-jar-plugin:3.1.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-jar-plugin:jar:3.1.1: The following artifacts could not be resolved: org.apache.maven.plugins:maven-jar-plugin:pom:3.1.1 (absent): Could not transfer artifact org.apache.maven.plugins:maven-jar-plugin:pom:3.1.1 from/to central (https://repo.maven.apache.org/maven2): Remote host terminated the handshake: SSL peer shut down incorrectly -> [Help 1]

这个错误通常与网络连接、SSL证书或仓库配置有关。本文将通过一个真实案例,手把手教你如何快速解决此类问题。

问题分析
错误信息中的关键点:

插件无法下载:Maven无法从中央仓库(https://repo.maven.apache.org/maven2)获取maven-jar-plugin插件。
SSL握手失败:错误提示SSL peer shut down incorrectly,说明SSL/TLS协议版本不兼容或网络问题。
常见原因:

网络限制:国内用户可能因网络政策无法直接访问Maven中央仓库。
SSL/TLS版本过低:旧版本Java或Maven可能使用不兼容的SSL协议(如TLS 1.0)。
本地缓存损坏:Maven缓存文件可能被污染,导致插件无法正确下载。
解决方案:配置国内Maven镜像
通过将Maven的中央仓库地址替换为国内镜像,可以快速解决问题。以下是具体步骤:

步骤1:找到Maven配置文件
Maven的全局配置文件是settings.xml,路径如下:

Linux/macOS:~/.m2/settings.xml
Windows:C:\Users\<你的用户名>\.m2\settings.xml
如果文件不存在,直接创建即可。

步骤2:添加国内镜像配置
在settings.xml中添加以下内容,配置阿里云或华为云的Maven镜像:

<settings>
<!– 其他配置… –>
<mirrors>
<!– 阿里云镜像(推荐) –>
<mirror>
<id>aliyun</id>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!– 华为云镜像 –>
<mirror>
<id>huaweicloud</id>
<name>Huawei Maven</name>
<url>https://repo.huaweicloud.com/maven</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>

解释:
<mirrorOf>central</mirrorOf> 表示将Maven中央仓库的请求重定向到指定镜像。
阿里云和华为云镜像均支持国内高速访问,选择其中一个即可。
步骤3:验证配置生效
保存settings.xml后,重新运行Maven命令(如mvn clean install)。
如果成功,你会看到类似以下日志:

[INFO] Downloading from aliyun: https://maven.aliyun.com/repository/public/org/apache/maven/plugins/maven-jar-plugin/3.1.1/maven-jar-plugin-3.1.1.pom
[INFO] ————————————————————————
[INFO] BUILD SUCCESS

扩展建议
如果上述方法未解决问题,可尝试以下补充方案:

1. 强制使用TLS 1.2协议
在运行Maven时,通过JVM参数指定TLS版本:

# Linux/macOS
MAVEN_OPTS=”-Dhttps.protocols=TLSv1.2″ mvn clean install

# Windows
set MAVEN_OPTS=”-Dhttps.protocols=TLSv1.2″ && mvn clean install

2. 清理本地Maven缓存
删除本地仓库中损坏的插件目录:

rm -rf ~/.m2/repository/org/apache/maven/plugins/maven-jar-plugin

3. 检查Java版本
确保Java版本≥8(推荐使用Java 11+):

java -version

总结
通过配置国内Maven镜像,可以轻松解决因网络或SSL协议导致的插件下载失败问题。本文的步骤简单且通用,适用于大多数Maven相关网络问题。如果遇到其他类似错误,不妨尝试以下思路:

优先配置镜像:国内用户首选阿里云或华为云镜像。
检查SSL/TLS版本:强制使用TLS 1.2。
清理缓存与升级工具:确保Maven和Java版本最新。
附录:常见问题
Q:修改settings.xml后,如何确认镜像生效?
A:在Maven日志中查看下载源是否为镜像地址(如https://maven.aliyun.com)。

Q:是否需要同时配置多个镜像?
A:只需选择一个即可,多个镜像可能冲突。

Q:公司网络有代理怎么办?
A:在settings.xml中添加代理配置(参考Maven官方文档)。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/JakeMa1024/article/details/147502211

简化部署流程:Rainbond让Jeepay支付系统部署更轻松 - Rainbond开源 - 博客园

mikel阅读(370)

来源: 简化部署流程:Rainbond让Jeepay支付系统部署更轻松 – Rainbond开源 – 博客园

简化部署流程:Rainbond让Jeepay支付系统部署更轻松 

在如今的开发环境中,部署一套像 Jeepay 这样的 Java 支付系统往往需要开发者面对繁琐的配置、依赖环境管理以及服务的高可用性保障,手动部署和运维变得异常艰巨和费时。然而,借助 Rainbond 这样的云原生 PaaS 平台,这一过程变得前所未有的简单。通过 Rainbond 的“点点点”式应用管理和自动化运维功能,开发者可以轻松完成 Jeepay 系统的部署,极大减少了传统的部署难度和复杂性,让你更专注于业务的快速迭代和创新。

本文将详细介绍如何通过 Rainbond 平台一步步部署 Jeepay 系统,无需复杂的配置,只需简单操作即可完成,帮助开发者快速构建一个稳定、安全的支付系统。

关于 Jeepay#

Jeepay是一套适合互联网企业使用的开源支付系统,支持多渠道服务商和普通商户模式。已对接微信支付支付宝云闪付官方接口,支持聚合码支付。Jeepay使用Spring BootAnt Design Vue开发,集成Spring Security实现权限管理功能,是一套非常实用的web开发框架。

项目特性#

  • 支持多渠道对接,支付网关自动路由
  • 已对接微信服务商和普通商户接口,支持V2V3接口
  • 已对接支付宝服务商和普通商户接口,支持RSA和RSA2签名
  • 已对接云闪付服务商接口,可选择多家支付机构
  • 提供http形式接口,提供各语言的sdk实现,方便对接
  • 接口请求和响应数据采用签名机制,保证交易安全可靠
  • 系统安全,支持分布式部署,高并发
  • 管理端包括运营平台商户系统
  • 管理平台操作界面简洁、易用
  • 支付平台到商户系统的订单通知使用MQ实现,保证了高可用,消息可达
  • 支付渠道的接口参数配置界面自动化生成
  • 使用spring security实现权限管理
  • 前后端分离架构,方便二次开发
  • 由原XxPay团队开发,有着多年支付系统开发经验

使用 Rainbond 开源应用商店部署 Jeepay#

首先需要在你的服务器上部署 Rainbond,只需一条命令即可完成部署,更多部署方式请参阅 Rainbond 部署文档

curl -o install.sh https://get.rainbond.com && bash ./install.sh

部署完成后,进入 Rainbond 平台,选择通过应用市场部署,在开源应用商店中搜索Jeepay 并进行一键安装。

等待拓扑图中的组件颜色变为绿色,即可点击访问按钮访问 Jeepay。

  • Jeepay-ui-manager 是 Jeepay 运营平台,默认账号密码:jeepay/jeepay123
  • Jeepay-ui-merchant 是 Jeepay 商户系统,默认账号密码:账号在运营平台创建/密码为jeepay666

使用 Rainbond 源码部署 Jeepay#

本章节介绍如何在 Rainbond 上通过源代码部署 Jeepay。

中间件部署#

软件名称 版本 说明
Redis 3.2.8 分布式缓存,高版本也支持
MySQL 5.7 不低于5.7,支持8.0高版本
MQ ActiveMQ 或 RabbitMQ 或 RocketMQ 消息中间件

中间件准备:

  • Redis: 通过 Rainbond 应用商店搜索并部署,随意一个版本都可以。
  • MySQL: 通过Rainbond 应用商店搜索并部署,部署 8.0 以上的版本,部署后打开 MySQL 组件的对外端口,通过本地工具连接,初始化 Jeepay SQL
  • MQ: 这里选择部署 RabbitMQ,有两种方式可选:
    1. 根据 Jeepay 提供的 Dockerfile 构建 RabbitMQ 并配置。
    2. 通过 Rainbond 应用商店把整套 Jeepay 部署下来,删除其他只保留 RabbitMQ(同样来自 Jeepay提供的Dockerfile构建)

部署 Jeepay 后端服务#

在部署之前需要修改 pom.xml 文件启动 RabbitMQ,jeepay-components/jeepay-components-mq/pom.xml

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-amqp</artifactId>
-  <scope>provided</scope>
+  <!-- <scope>provided</scope> -->
</dependency>
  1. 修改完成后,选择基于源码构建组件,填写 Git 相关信息

  1. 检测完成后进入多模块构建,选择可启动的模块并创建

  1. 切换到编辑模式,将后端服务都连接到中间件。

  1. 修改后端服务配置文件,根据 Jeepay 提供模版进行修改,只需修改对应连接中间件的信息即可。这里采用环境变量的方式,是因为在 Rainbond 上组件A依赖了组件B后,组件B的环境变量会被注入到组件A中,那么组件A就可以很灵活的连接后端服务。
# https://gitee.com/jeequan/jeepay/tree/master/conf
spring:
  datasource:
+   url: jdbc:mysql://${DB_HOST}:3306/${MYSQL_DATABASE}?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
    username: root
+   password: ${MYSQL_ROOT_PASSWORD}
  redis:
+   host: ${REDIS_HOST}
    port: 6379
    database: 2    #1库:运营平台  #2库:商户系统 #3库:支付网关
    timeout: 1000
    password:
  rabbitmq:
+   addresses: ${RABBITMQ_HOST}:5672
    username: admin
    password: admin
    dynamic: true
    virtual-host: jeepay
  mq:
+   vender: rabbitMQ

环境变量可在组件的依赖信息中查看。

  1. 为各个组件挂载配置文件,在组件的环境配置下进行挂载,每个服务挂载它对应的配置文件即可。挂载路径都保持一致/app/application.yml

部署 Jeepay 前端服务#

前端服务目录结构

jeepay-ui
├── jeepay-ui-cashier -- 聚合收银台项目
├── jeepay-ui-manager -- 运营平台web管理端
└── jeepay-ui-merchant -- 商户系统web管理端
  1. 通过源码部署 jeepay-ui-manager 前端项目,填写相关 Git 信息以及子目录

  1. 检测完成后选择 NodeJSStatic 语言,如下

  1. Node版本选择 16.20.0 其他不变。

  1. 等待构建完成。jeepay-ui-merchant、jeepay-ui-cashier重复上述操作,只修改子目录路径即可。
  2. 建立前端到后端服务的依赖关系。

  1. 添加前端 Nginx 配置文件,3个前端服务都需要挂载配置文件,只是内容不同。

以下配置文件只需修改 proxy_pass 的地址,同样也可以像上述一样采用环境变量或者填写实际的后端服务的对内地址和端口。

# jeepay-ui-manager
server {
  listen 5000;
  
  location / {
      root   /app/www;
      index  index.html index.htm;
    try_files $uri $uri/ /index.html;
  }
  location /api/{
    proxy_next_upstream http_502 http_504 error timeout invalid_header;
    proxy_set_header Host  $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://${MANAGER_HOST}:9217;
    # 启用支持websocket连接
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}

# jeepay-ui-merchant
server {
  listen 5000;
  
  location / {
      root   /app/www;
      index  index.html index.htm;
      try_files $uri $uri/ /index.html;
  }
  location /api/{
    proxy_next_upstream http_502 http_504 error timeout invalid_header;
    proxy_set_header Host  $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://${MERCHANT_HOST}:9218;
    # 启用支持websocket连接
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}

# jeepay-ui-cashier
server {
  listen 5000;
  
  location / {
      root   /app/www;
      index  index.html index.htm;
      try_files $uri $uri/ /index.html;
  }
  location /api/{
    proxy_next_upstream http_502 http_504 error timeout invalid_header;
    proxy_set_header Host  $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://${PAYMENT_HOST}:9218;
    # 启用支持websocket连接
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}

添加配置文件后更新组件。

到这就部署完成了,可以通过各个前端的对外地址进行访问,如遇问题可参考 Jeepay 文档进行排查。

最后#

通过上述步骤,我们已经成功在 Rainbond 平台上部署了 Jeepay 支付系统。借助 Rainbond,我们可以非常简单的部署应用和开发应用,使我们无需关心部署相关,只需关注代码即可。如果是第一次接触 Rainbond 的小伙伴上来就通过源码去部署 Jeepay 可能相对会懵懂一些,预计节后会录制一个通过源代码部署 Jeepay 的视频,大家可关注Rainbond B站账号动态。

手把手教你搭建Docker私有仓库Harbor - sowler - 博客园

mikel阅读(274)

来源: 手把手教你搭建Docker私有仓库Harbor – sowler – 博客园

1、什么是Docker私有仓库

Docker私有仓库是用于存储和管理Docker镜像的私有存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部署在本地云环境中,用于组织内部开发、测试和生产环境中的容器镜像管理。保证数据安全性。

2、Docker有哪些私有仓库

以下是一些常见的Docker私有仓库:

  • Harbor:作为一个企业级的Docker Registry服务,Harbor提供了安全、可信赖的镜像存储和管理功能。它支持RBAC权限控制、镜像复制、镜像签名、漏洞扫描等功能。
  • Docker Trusted Registry (DTR):由Docker官方推出的企业级Docker私有仓库服务,与Docker Engine紧密集成,支持高度的安全性和可靠性。
  • Portus:一个开源的Docker镜像管理和认证服务,提供用户管理、团队管理、镜像审核等功能,与Docker Registry兼容。
  • Nexus Repository Manager:虽然主要是用于构建和管理Java组件,但也可以用作Docker私有仓库。它具有强大的存储管理和权限控制功能。
  • GitLab Container Registry:GitLab集成了容器注册表功能,允许您存储、管理和分发Docker镜像。这是GitLab自带的功能,无需额外部署。
  • AWS Elastic Container Registry (ECR):如果使用AWS云服务,可以考虑使用AWS ECR作为私有仓库。它与AWS的其他服务集成紧密,对AWS用户来说是一个方便的选择。

本篇使用Harbor搭建Docker私有仓库。

3、Harbor简介

Harbor是一个开源的企业级Docker Registry服务,它提供了一个安全、可信赖的仓库来存储和管理Docker镜像。Harbor翻译为中文名称为”庇护;居住;”。可以理解为是Docker镜像的”居住环境”或者是镜像的”庇护所”。Harbor最初由VMware公司开发,旨在解决企业级Docker镜像管理的安全和可信任性问题。VMware于2016年发布,在2017年,VMware将Harbor开源,这使得更广泛的社区和组织可以自由地使用和贡献代码。Harbor是一个成熟、功能丰富且安全可靠的企业级Docker Registry服务,为企业容器化应用的部署和管理提供了强大的支持。

Harbor官网地址:Harbor (goharbor.io)

Github开源地址:https://github.com/goharbor/harbor

4、Harbor下载

4.1、通过Linux命令下载
wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz
4.2、GitHub下载

下载地址:https://github.com/goharbor/harbor/releases 下载离线版本

下载成功后,把包通过 xftp 上传到服务器。

4.3、解压

解压文件

tar -zxvf harbor-offline-installer-v2.10.0.tgz 

5、启动Harbor

5.1、修改配置文件

复制harbor.yml.tmpl 文件并重命名为harbor.yml修改此配置文件,需要设置hostname、端口、数据库密码等。

cp harbor.yml.tmpl harbor.yml #拷贝

vim harbor.yml

修改配置文件:

#修改hostname的值,如果没有域名就使用本机IP地址
hostname: 192.168.42.133

#配置启动端口号
# http related config 
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 5000

# 如果没有申请证书,需要隐藏https
#https:
  # https port for harbor, default is 443
#  port: 443
  # The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path

#启动成功后,admin用户登录密码
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: AdminHarbor12345

5.2、启动

配置文件修改成功后,执行 install.sh 脚本进行安装harbor

./install.sh 

启动报错:

[Step 0]: checking if docker is installed ...

Note: docker version: 26.1.3

[Step 1]: checking docker-compose is installed ...
/opt/harbor/common.sh: line 119: docker-compose: command not found
✖ Failed to parse docker-compose version.

可以看到,该服务器安装的 docker 没有安装 docker-compose 插件

5.3、安装docker-compose

进入docker-compose 官网下载执行文件,地址: https://github.com/docker/compose 下载成功后,把可执行文件加入Linux 系统命令目录

cp docker-compose-linux-x86_64 /usr/local/bin/

重命名:

mv docker-compose-linux-x86_64 docker-compose

授权:

chmod +x /usr/local/bin/docker-compose

执行命令查看是否安装成功:

docker-compose --version

如果需要卸载,直接删除即可:

rm -f /usr/bin/docker-compose
5.4、再次启动

再次执行 ./install.sh

提示安装成功。接下来就可以访问Harbor了。访问IP+端口:http://192.168.42.133:5000

访问成功,由于Harbor是通过docker管理的,所以启动非常方便。如果首页访问成功说明Docker私有仓库已经部署成功了。

6、Harbor Web页面操作说明

默认用户名是admin,密码是启动时设置的密码:AdminHarbor12345

登录成功进入主页面了。从系统首页可以看到系统分为三个菜单:项目、日志、系统管理。

6.1、项目

项目管理顾名思义就是用来管理项目的。可以为每一个开发项目创建一个私有项目库,然后把Docker镜像存储到指定的项目中,为每个项目实现项目镜像隔离。创建项目的时候,Harbor提供了公开库(public repository)和私有库(private repository)两种类型的镜像存储空间。

通过详情信息可以看到:公开库中的镜像是对所有用户可见和可访问的,任何人都可以查看和拉取其中的镜像。而私有库中的镜像则需要登录才能访问控制,只有被授权的用户或团队才能够查看、拉取和推送镜像。 可以根据需要创建相关的项目。

项目创建成功后,可以点击进入项目。在里面可以为每个项目单独设置不同的配置信息。可以为每一个项目添加成员信息。

角色权限说明:

  • 项目管理员(Project Administrator):拥有项目的最高权限,可以对项目进行全面管理,包括创建和删除项目、管理项目成员和权限、配置项目属性、查看项目日志等。
  • 维护人员(Maintainer):类似于项目管理员,但权限稍低,通常用于协助管理项目,可以进行项目的部分管理操作,如添加和删除镜像、配置镜像的复制和同步规则等。
  • 开发者(Developer):具有对项目中镜像仓库的读写权限,可以拉取、推送和删除镜像,以及管理部分项目配置,但不能进行项目管理操作。
  • 访客(Guest):只具有对项目中镜像仓库的只读权限,可以查看镜像和元数据,但无法对镜像进行修改或删除操作。通常用于分享项目或镜像给外部团队或用户。
  • 受限访客(Restricted Guest):是一种更加受限的访客角色,通常用于提供给外部用户或系统,具有对项目中镜像仓库的只读权限,但可能会限制访问的部分内容或功能。

在右上角显示推送命令,可以通过提示命令进行docker镜像推送。

6.2、日志

日志菜单就是记录用户操作日志信息的。

6.3、系统管理

系统管理主要用来管理Harbor用户人员信息、镜像仓库的各种配置、权限和系统设置。

7、Docker命令使用私有仓库

7.1、登录

首先登录私有仓库地址:

docker login  -u admin -p AdminHarbor12345 http://192.168.42.133:5000

会报错:

WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://192.168.42.133:5000/v2/": proxyconnect tcp: dial tcp 192.168.65.7:3128: connect: connection refused

docker认为这个地址是不安全的,所以需要在docker守护进程配置文件中把该地址加入安全范围。

{
  "registry-mirrors": ["https://ejes884z.mirror.aliyuncs.com"],
  "log-driver":"json-file",
  "log-opts": {"max-size":"1g", "max-file":"3"},
  "live-restore": true,
  "insecure-registries": ["192.168.42.133:5000"]
}

# insecure-registries 不安全的注册表配置一些不安全的地址信息,让Docker认为是安全的。多个地址使用 "," 分割

加入配置成功后,再次登录。

WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

通过输出发现登录成功。认证信息存储在 ~/.docker/config.json 文件中,只要登录信息存在,登录会一直生效不需要每次推送拉取之前都登录。

7.2、推送

重新命名镜像名称

docker tag 94543a6c1aef 192.168.42.133:5000/blog_project/nginx:1.26.0

推送

docker push 192.168.42.133:5000/blog_project/nginx:1.26.0

查看Harbor仓库,推送成功。

7.3、拉取

通过另一台服务器,使用 docker pull拉取镜像从私有仓库拉取镜像:

docker pull 192.168.42.133:5000/blog_project/nginx:1.26.0

拉取成功

查看下载数,发现已经更新了。

8、总结

关于使用Harbor搭建Docker私有仓库就介绍完毕了,如果大家有兴趣可以查看一下其他搭建方式,然后在它们之间进行对比一下看看那种方式更适合。本篇为入门级Harbor的基础使用,其他功能可以自行研究。