基于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 构建微服务基础设施相关推荐

  1. 如何基于 DDD 构建微服务?

    本文将讨论微服务与 DDD 涉及到的概念.策划和设计方法,并且尝试将一个单体应用拆分成多个基于 DDD 的微服务. 微服务的定义 微服务中的"微"虽然表示服务的规模,但它并不是使应 ...

  2. 如何基于DDD构建微服务架构

    微服务构建本质上是软件构建过程中长期演进积累的一系列理念.架构原则.工具和最佳实践. 领域驱动设计的软件思想体系和方法论可以用于指导微服务建模.微服务划分.微服务架构设计等相关工作,它可以促使技术人员 ...

  3. 蚂蚁课堂-第四期-基于springcloud构建微服务电商项目_阿里巴巴29个屌炸天的开源项目,你用过几个?附编程资料!!!...

    1. 分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案.此项目包含开发分布式应用服务 ...

  4. 技术研究院005---如何基于DDD构建微服务架构

    微服务构建本质上是软件构建过程中长期演进积累的一系列理念.架构原则.工具和最佳实践. 领域驱动设计的软件思想体系和方法论可以用于指导微服务建模.微服务划分.微服务架构设计等相关工作,它可以促使技术人员 ...

  5. 基于springCloud构建微云架构技术分享

    一,什么是微服务 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及部署,并通过各自暴露的API ...

  6. Aooms_基于SpringCloud的微服务基础开发平台实战_002_工程构建

    为什么80%的码农都做不了架构师?>>>    一.关于框架更名的一点说明 最近在做年终总结.明年规划.还有几个项目需要了结.出解决方案,事情还比较多,死了不少脑细胞,距离上一篇文章 ...

  7. 基于事件驱动架构构建微服务第1部分:应用程序特定的业务规则

    原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part1-applicatio ...

  8. 通过Dapr实现一个简单的基于.net的微服务电商系统(十二)——istio+dapr构建多运行时服务网格...

    多运行时是一个非常新的概念.在 2020 年,Bilgin Ibryam 提出了 Multi-Runtime(多运行时)的理念,对基于 Sidecar 模式的各种产品形态进行了实践总结和理论升华.那到 ...

  9. 基于Spring Cloud及K8S构建微服务应用

    摘要 广发证券蔡波斯先生通过三个大方向来为我们分享基于Spring Cloud及K8S构建微服务应用. 内容来源:2017年6月10日,广发证券蔡波斯在"Spring Cloud中国社区技术 ...

  10. 基于 Docker 的微服务架构实践

    http://dockone.io/article/4887 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Do ...

最新文章

  1. springboot-mysql-email集成
  2. vim 配置文件 C/C++
  3. SVN库迁移整理方法总结
  4. 【Android 逆向】ARM CPU 架构体系 ( ARM 处理器工作模式 | ARM 架构模型 )
  5. iOS - Swift NSSize 尺寸
  6. SpringIOC的依耐注入DI---set注入---constructor有参构造注入---了解P命名空间---了解SpEL
  7. 【slighttpd】基于lighttpd架构的Server项目实战(3)—MasterWorker模式
  8. 工作199:获取接口token
  9. 大话设计模式-原型模式的浅复制与深复制
  10. 使用Samba构建工程
  11. Android之安装开发环境
  12. Weld(CDI)教程
  13. PMP-PMBOK(第六版)--49个过程ITTO记忆口诀(第一辑)
  14. 微信小程序模板平台_小程序模板免费使用_小程序界面模板
  15. 虚拟机上安装linux版QQ并卸载
  16. 黄山学院计算机科学与技术怎么样,黄山学院怎么样?黄山学院点评及最新评价情况...
  17. 质量与规范,敬我们那些年欠下的技术债
  18. RK3568的红外遥控
  19. 基于Java机器学习自学笔记(第81-87天:CNN卷积神经网络的入门到全代码编写)
  20. 领芯微基于LCM32F037吹风筒方案

热门文章

  1. 第04课:了解数据必备的文本可视化技巧
  2. ERNIE-Gram: Pre-Training with Explicitly N-Gram Masked Language Modeling for Natural ...(2020-10-23)
  3. 软考计算机专业英语,软考计算机专业英语常用词汇(首字母S)
  4. 【STM32】几款常用产品(F1、F4、F7)的区别
  5. 电脑重装系统需要多少钱?
  6. ABE或IBE中属性撤销的寻找最小覆盖集的基本算法
  7. java登录界面圆形头像,Android使用CircleImageView实现圆形头像的方法
  8. 20个优秀手机界面扁平化设计,让你一秒看懂扁平化
  9. D3D9利用顶点缓冲区绘制三角形
  10. 详解后端工程师必看学习路线图(含初、中、高阶)