基于docer 构建微服务基础设施
基于docer 构建微服务基础设施
文章目录
- 基于docer 构建微服务基础设施
- 1. 基于docker 安装 gitlab
- 2. 基于docker 安装 Nexus
- 2.1 安裝
- 2.2 登录控制台验证安装
- 3、Maven 仓库介绍
- 3.1 代理仓库(Proxy Repository)
- 3.2 宿主仓库(Hosted Repository)
- 3.3 仓库组(Repository Group)
- 4 在项目中使用 Maven 私服
- 4.1 配置认证信息
- 4.2 Snapshots 与 Releases 的区别
- 4.3 配置自动化部署
- 4.4 部署到仓库
- 4.5 上传第三方 JAR 包
- 4.6 如第三方JAR包:aliyun-sdk-oss-2.2.3.jar
- 4.7配置代理仓库
- 5 安装 Docker Registry 私服
- 5.1 概述
- 5.2 安装
- 5.3 测试
- 6 配置 Docker Registry 客户端
- 6.1 概述
- 6.2 检查客户端配置是否生效
- 6.3 测试镜像上传
- 拉取一个镜像
- 查看全部镜像
- 标记本地镜像并指向目标仓库(ip:port/image_name:tag,该格式为标记版本号)
- 提交镜像到仓库
- 查看全部镜像
- 查看指定镜像
- 测试拉取镜像
- 6.4 部署 Docker Registry WebUI
- docker-registry-frontend
1. 基于docker 安装 gitlab
我们使用 Docker 来安装和运行 GitLab 中文版,由于新版本问题较多,这里我们使用目前相对稳定的 10.5 版本,docker-compose.yml
version: '3.1'
services:web:image: 'twang2218/gitlab-ce-zh'restart: alwayshostname: '192.168.75.145'environment:TZ: 'Asia/Shanghai'GITLAB_OMNIBUS_CONFIG: |external_url 'http://192.168.175.194:8080'gitlab_rails['gitlab_shell_ssh_port'] = 2222unicorn['port'] = 8888nginx['listen_port'] = 8080ports:- '8080:8080'- '8443:443'- '2222:22'volumes:- /usr/local/docker/gitLab/config:/etc/gitlab- /usr/local/docker/gitLab/data:/var/opt/gitlab- /usr/local/docker/gitLab/logs:/var/log/gitlab
2. 基于docker 安装 Nexus
2.1 安裝
我们使用 Docker 来安装和运行 Nexus,docker-compose.yml
配置如下:
version: '3.1'
services:nexus:restart: alwaysimage: sonatype/nexus3container_name: nexusports:- 8081:8081volumes:- /usr/local/docker/nexus/data:/nexus-data
启动时如果出现权限问题可以使用:
chmod 777 /usr/local/docker/nexus/data
赋予数据卷目录可读可写的权限
2.2 登录控制台验证安装
地址:http://ip:port/ 用户名:admin 密码:admin123
3、Maven 仓库介绍
3.1 代理仓库(Proxy Repository)
意为第三方仓库,如:
maven-central
nuget.org-proxy
版本策略(Version Policy):
Release: 正式版本
Snapshot: 快照版本
Mixed: 混合模式
布局策略(Layout Policy):
Strict:严格
Permissive:宽松
3.2 宿主仓库(Hosted Repository)
存储本地上传的组件和资源的,如:
maven-releases
maven-snapshots
nuget-hosted
部署策略(Deployment Policy):
Allow Redeploy:允许重新部署
Disable Redeploy:禁止重新部署
Read-Only:只读
3.3 仓库组(Repository Group)
通常包含了多个代理仓库和宿主仓库,在项目中只要引入仓库组就可以下载到代理仓库和宿主仓库中的包,如:
maven-public
nuget-group
4 在项目中使用 Maven 私服
4.1 配置认证信息
在 Maven settings.xml 中添加 Nexus 认证信息(servers 节点下):
<server><id>nexus-releases</id><username>admin</username><password>admin123</password>
</server><server><id>nexus-snapshots</id><username>admin</username><password>admin123</password>
</server>
4.2 Snapshots 与 Releases 的区别
nexus-releases: 用于发布 Release 版本
nexus-snapshots: 用于发布 Snapshot 版本(快照版)
Release 版本与 Snapshot 定义如下:
Release: 1.0.0/1.0.0-RELEASE
Snapshot: 1.0.0-SNAPSHOT
在项目 pom.xml 中设置的版本号添加 SNAPSHOT 标识的都会发布为 SNAPSHOT 版本,没有 SNAPSHOT 标识的都会发布为 RELEASE 版本。
SNAPSHOT 版本会自动加一个时间作为标识,如:1.0.0-SNAPSHOT 发布后为变成 1.0.0-SNAPSHOT-20180522.123456-1.jar
4.3 配置自动化部署
在 pom.xml 中添加如下代码:
<distributionManagement> <repository> <id>nexus-releases</id> <name>Nexus Release Repository</name> <url>http://127.0.0.1:8081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://127.0.0.1:8081/repository/maven-snapshots/</url> </snapshotRepository>
</distributionManagement>
注意事项:ID 名称必须要与 settings.xml 中 Servers 配置的 ID 名称保持一致。项目版本号中有 SNAPSHOT 标识的,会发布到 Nexus Snapshots Repository,否则发布到 Nexus Release Repository,并根据 ID 去匹配授权账号。
4.4 部署到仓库
mvn deploy
4.5 上传第三方 JAR 包
Nexus 3.0 不支持页面上传,可使用 maven 命令:
4.6 如第三方JAR包:aliyun-sdk-oss-2.2.3.jar
mvn deploy:deploy-file -DgroupId=com.aliyun.oss -DartifactId=aliyun-sdk-oss -Dversion=2.2.3 -Dpackaging=jar -Dfile=D:\aliyun-sdk-oss-2.2.3.jar -Durl=http://127.0.0.1:8081/repository/maven-3rd/ -DrepositoryId=nexus-releases
注意事项:建议在上传第三方 JAR 包时,创建单独的第三方 JAR 包管理仓库,便于管理有维护。(maven-3rd)-DrepositoryId=nexus-releases 对应的是 settings.xml 中 Servers 配置的 ID 名称。(授权)
4.7配置代理仓库
<repositories><repository><id>nexus</id><name>Nexus Repository</name><url>http://127.0.0.1:8081/repository/maven-public/</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>true</enabled></releases></repository>
</repositories>
<pluginRepositories><pluginRepository><id>nexus</id><name>Nexus Plugin Repository</name><url>http://127.0.0.1:8081/repository/maven-public/</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>true</enabled></releases></pluginRepository>
</pluginRepositories>
5 安装 Docker Registry 私服
5.1 概述
官方的 Docker Hub 是一个用于管理公共镜像的地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么你就需要 Docker Registry,它可以用来存储和管理自己的镜像。
5.2 安装
在之前的 Docker 私有仓库 章节中已经提到过如何配置和使用容器运行私有仓库,这里我们使用 docker-compose 来安装,配置如下:
version: '3.1'
services:registry:image: registryrestart: alwayscontainer_name: registryports:- 5000:5000volumes:- /usr/local/docker/registry/data:/var/lib/registry
5.3 测试
启动成功后需要测试服务端是否能够正常提供服务,有两种方式:
浏览器端访问
http://ip:5000/v2/
6 配置 Docker Registry 客户端
6.1 概述
Ubuntu Server 16.04 LTS 版本,属于 systemd 系统,需要在 /etc/docker/daemon.json 中增加如下内容(如果文件不存在请新建该文件)
{"registry-mirrors": [ "https://registry.docker-cn.com"],"insecure-registries": ["ip:5000"]
}
注意:该文件必须符合 json 规范,否则 Docker 将不能启动。
之后重新启动服务。
$ sudo systemctl daemon-reload$ sudo systemctl restart docker
6.2 检查客户端配置是否生效
使用 docker info 命令手动检查,如果从配置中看到如下内容,说明配置成功
Insecure Registries:192.168.75.133:5000127.0.0.0/8
6.3 测试镜像上传
我们以 Nginx 为例测试镜像上传功能
拉取一个镜像
docker pull nginx
查看全部镜像
docker images
标记本地镜像并指向目标仓库(ip:port/image_name:tag,该格式为标记版本号)
docker tag nginx 192.168.75.133:5000/nginx
提交镜像到仓库
docker push 192.168.75.133:5000/nginx
查看全部镜像
curl -XGET http://192.168.75.133:5000/v2/_catalog
查看指定镜像
以 Nginx 为例,查看已提交的列表
curl -XGET http://192.168.75.133:5000/v2/nginx/tags/list
测试拉取镜像
先删除镜像
docker rmi nginxdocker rmi 192.168.75.133:5000/nginx
再拉取镜像
docker pull 192.168.75.133:5000/nginx
6.4 部署 Docker Registry WebUI
私服安装成功后就可以使用 docker 命令行工具对 registry 做各种操作了。然而不太方便的地方是不能直观的查看 registry 中的资源情况。如果可以使用 UI 工具管理镜像就更好了。这里介绍两个 Docker Registry WebUI 工具
docker-registry-frontend
docker-registry-web
两个工具的功能和界面都差不多,我们以 docker-registry-fontend 为例讲解
docker-registry-frontend
我们使用 docker-compose 来安装和运行,docker-compose.yml 配置如下:
version: '3.1'
services:frontend:image: konradkleine/docker-registry-frontend:v2ports:- 8080:80volumes:- ./certs/frontend.crt:/etc/apache2/server.crt:ro- ./certs/frontend.key:/etc/apache2/server.key:roenvironment:- ENV_DOCKER_REGISTRY_HOST=192.168.75.133- ENV_DOCKER_REGISTRY_PORT=5000
注意:请将配置文件中的主机和端口换成自己docker鏡像仓库的地址
运行成功后在浏览器访问:http://192.168.75.133:5000
基于docer 构建微服务基础设施相关推荐
- 如何基于 DDD 构建微服务?
本文将讨论微服务与 DDD 涉及到的概念.策划和设计方法,并且尝试将一个单体应用拆分成多个基于 DDD 的微服务. 微服务的定义 微服务中的"微"虽然表示服务的规模,但它并不是使应 ...
- 如何基于DDD构建微服务架构
微服务构建本质上是软件构建过程中长期演进积累的一系列理念.架构原则.工具和最佳实践. 领域驱动设计的软件思想体系和方法论可以用于指导微服务建模.微服务划分.微服务架构设计等相关工作,它可以促使技术人员 ...
- 蚂蚁课堂-第四期-基于springcloud构建微服务电商项目_阿里巴巴29个屌炸天的开源项目,你用过几个?附编程资料!!!...
1. 分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案.此项目包含开发分布式应用服务 ...
- 技术研究院005---如何基于DDD构建微服务架构
微服务构建本质上是软件构建过程中长期演进积累的一系列理念.架构原则.工具和最佳实践. 领域驱动设计的软件思想体系和方法论可以用于指导微服务建模.微服务划分.微服务架构设计等相关工作,它可以促使技术人员 ...
- 基于springCloud构建微云架构技术分享
一,什么是微服务 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及部署,并通过各自暴露的API ...
- Aooms_基于SpringCloud的微服务基础开发平台实战_002_工程构建
为什么80%的码农都做不了架构师?>>> 一.关于框架更名的一点说明 最近在做年终总结.明年规划.还有几个项目需要了结.出解决方案,事情还比较多,死了不少脑细胞,距离上一篇文章 ...
- 基于事件驱动架构构建微服务第1部分:应用程序特定的业务规则
原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part1-applicatio ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十二)——istio+dapr构建多运行时服务网格...
多运行时是一个非常新的概念.在 2020 年,Bilgin Ibryam 提出了 Multi-Runtime(多运行时)的理念,对基于 Sidecar 模式的各种产品形态进行了实践总结和理论升华.那到 ...
- 基于Spring Cloud及K8S构建微服务应用
摘要 广发证券蔡波斯先生通过三个大方向来为我们分享基于Spring Cloud及K8S构建微服务应用. 内容来源:2017年6月10日,广发证券蔡波斯在"Spring Cloud中国社区技术 ...
- 基于 Docker 的微服务架构实践
http://dockone.io/article/4887 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Do ...
最新文章
- springboot-mysql-email集成
- vim 配置文件 C/C++
- SVN库迁移整理方法总结
- 【Android 逆向】ARM CPU 架构体系 ( ARM 处理器工作模式 | ARM 架构模型 )
- iOS - Swift NSSize 尺寸
- SpringIOC的依耐注入DI---set注入---constructor有参构造注入---了解P命名空间---了解SpEL
- 【slighttpd】基于lighttpd架构的Server项目实战(3)—MasterWorker模式
- 工作199:获取接口token
- 大话设计模式-原型模式的浅复制与深复制
- 使用Samba构建工程
- Android之安装开发环境
- Weld(CDI)教程
- PMP-PMBOK(第六版)--49个过程ITTO记忆口诀(第一辑)
- 微信小程序模板平台_小程序模板免费使用_小程序界面模板
- 虚拟机上安装linux版QQ并卸载
- 黄山学院计算机科学与技术怎么样,黄山学院怎么样?黄山学院点评及最新评价情况...
- 质量与规范,敬我们那些年欠下的技术债
- RK3568的红外遥控
- 基于Java机器学习自学笔记(第81-87天:CNN卷积神经网络的入门到全代码编写)
- 领芯微基于LCM32F037吹风筒方案
热门文章
- 第04课:了解数据必备的文本可视化技巧
- ERNIE-Gram: Pre-Training with Explicitly N-Gram Masked Language Modeling for Natural ...(2020-10-23)
- 软考计算机专业英语,软考计算机专业英语常用词汇(首字母S)
- 【STM32】几款常用产品(F1、F4、F7)的区别
- 电脑重装系统需要多少钱?
- ABE或IBE中属性撤销的寻找最小覆盖集的基本算法
- java登录界面圆形头像,Android使用CircleImageView实现圆形头像的方法
- 20个优秀手机界面扁平化设计,让你一秒看懂扁平化
- D3D9利用顶点缓冲区绘制三角形
- 详解后端工程师必看学习路线图(含初、中、高阶)