基于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: always
    hostname: '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'] = 2222
        unicorn['port'] = 8888
        nginx['listen_port'] = 8080
    ports:
      - '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: always
    image: sonatype/nexus3
    container_name: nexus
    ports:
      - 8081:8081
    volumes:
      - /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-releasesid>
  <username>adminusername>
  <password>admin123password>
server>

<server>
  <id>nexus-snapshotsid>
  <username>adminusername>
  <password>admin123password>
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-releasesid>  
    <name>Nexus Release Repositoryname>  
    <url>http://127.0.0.1:8081/repository/maven-releases/url>  
  repository>  
  <snapshotRepository>  
    <id>nexus-snapshotsid>  
    <name>Nexus Snapshot Repositoryname>  
    <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>nexusid>
        <name>Nexus Repositoryname>
        <url>http://127.0.0.1:8081/repository/maven-public/url>
        <snapshots>
            <enabled>trueenabled>
        snapshots>
        <releases>
            <enabled>trueenabled>
        releases>
    repository>
repositories>
<pluginRepositories>
    <pluginRepository>
        <id>nexusid>
        <name>Nexus Plugin Repositoryname>
        <url>http://127.0.0.1:8081/repository/maven-public/url>
        <snapshots>
            <enabled>trueenabled>
        snapshots>
        <releases>
            <enabled>trueenabled>
        releases>
    pluginRepository>
pluginRepositories>

5 安装 Docker Registry 私服

5.1 概述

官方的 Docker Hub 是一个用于管理公共镜像的地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么你就需要 Docker Registry,它可以用来存储和管理自己的镜像。

5.2 安装

在之前的 Docker 私有仓库 章节中已经提到过如何配置和使用容器运行私有仓库,这里我们使用 docker-compose 来安装,配置如下:

version: '3.1'
services:
  registry:
    image: registry
    restart: always
    container_name: registry
    ports:
      - 5000:5000
    volumes:
      - /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:5000
 127.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 nginx
    docker 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:v2
    ports:
      - 8080:80
    volumes:
      - ./certs/frontend.crt:/etc/apache2/server.crt:ro
      - ./certs/frontend.key:/etc/apache2/server.key:ro
    environment:
      - ENV_DOCKER_REGISTRY_HOST=192.168.75.133
      - ENV_DOCKER_REGISTRY_PORT=5000

注意:请将配置文件中的主机和端口换成自己docker鏡像仓库的地址

运行成功后在浏览器访问:http://192.168.75.133:5000

你可能感兴趣的:(docker)