使用Nexus3搭建Docker私有仓库

很多事情,在于折腾,其实harbor做docker的私有仓库挺好的,然后我折腾一下nexus3,鹅鹅鹅……

1. Nexus的安装(OpenShift)

Nexus3的安装不是本篇要说的内容,略过,但附上在Openshift上部署的yaml文件:

apiVersion: v1
kind: Template
labels:
  template: nexus3-template
metadata:
  name: nexus3
  annotations:
    description: Sonatype Nexus 3 template
    tags: pipelines
    iconClass: icon-nexus3
objects:
- apiVersion: v1
  kind: DeploymentConfig
  metadata:
    labels:
      app: ${SERVICE_NAME}
    name: ${SERVICE_NAME}
  spec:
    replicas: 1
    selector:
      deploymentconfig: ${SERVICE_NAME}
    strategy:
      type: Recreate
    template:
      metadata:
        labels:
          deploymentconfig: ${SERVICE_NAME}
      spec:
        containers:
        - image: docker.io/sonatype/nexus3:${NEXUS_VERSION}
          imagePullPolicy: IfNotPresent
          livenessProbe:
            exec:
              command:
              - echo
              - ok
            failureThreshold: 3
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          name: ${SERVICE_NAME}
          ports:
          - containerPort: 8081
            protocol: TCP
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /
              port: 8081
              scheme: HTTP
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          resources:
            limits:
              memory: ${MAX_MEMORY}
            requests:
              memory: 512Mi
          terminationMessagePath: /dev/termination-log
          volumeMounts:
          - mountPath: /nexus-data
            name: ${SERVICE_NAME}-data
        dnsPolicy: ClusterFirst
        restartPolicy: Always
        securityContext: {}
        terminationGracePeriodSeconds: 30
        volumes:
        - name: ${SERVICE_NAME}-data
          persistentVolumeClaim:
            claimName: ${SERVICE_NAME}-pv
    test: false
    triggers:
    - type: ConfigChange
- apiVersion: v1
  kind: Service
  metadata:
    labels:
      app: ${SERVICE_NAME}
    name: ${SERVICE_NAME}
  spec:
    ports:
    - name: 8081-tcp
      port: 8081
      protocol: TCP
      targetPort: 8081
    selector:
      deploymentconfig: ${SERVICE_NAME}
    sessionAffinity: None
    type: ClusterIP
- apiVersion: v1
  kind: Route
  metadata:
    labels:
      app: ${SERVICE_NAME}
    name: ${SERVICE_NAME}
  spec:
    port:
      targetPort: 8081-tcp
    to:
      kind: Service
      name: ${SERVICE_NAME}
      weight: 100
- apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    labels:
      app: ${SERVICE_NAME}
    name: ${SERVICE_NAME}-pv
  spec:
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: ${VOLUME_CAPACITY}
parameters:
- displayName: Sonatype Nexus service name
  name: SERVICE_NAME
  required: true
  value: nexus3
- displayName: Sonatype Nexus version
  name: NEXUS_VERSION
  required: true
  value: 3.18.1
- description: Volume space available for Sonatype Nexus e.g. 512Mi, 2Gi
  displayName: Volume Space for Nexus
  name: VOLUME_CAPACITY
  required: true
  value: 5Gi
- description: Max memory allocated to the Nexus pod
  displayName: Max Memory
  name: MAX_MEMORY
  required: true
  value: 2Gi

2. Nexus上Docker代理仓库的设置

 

创建hosted类型repository:

创建一个proxy的repository:

创建一个group类型的repository:

添加docker的Realm

3. 设置OpenShift上Nexus的Services和Route

上面创建了两个http的端口,8082和8083,所以需要创建两个对应的services:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: nexus3
    template: nexus3-template
  name: nexus3-docker
  namespace: cicd
spec:
  ports:
    - name: 8082-tcp
      port: 8082
      protocol: TCP
      targetPort: 8082
  selector:
    deploymentconfig: nexus3
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nexus3
    template: nexus3-template
  name: nexus3-docker-hosted
  namespace: cicd
spec:
  ports:
    - name: 8083-tcp
      port: 8083
      protocol: TCP
      targetPort: 8083
  selector:
    deploymentconfig: nexus3
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

创建route:

nexus3-docker:http://nexus3-docker-cicd.apps.test.openshift.com,对应nexus3-docker services

Nexus3-docker-hosted:http://nexus3-docker-hosted-cicd.apps.test.openshift.com,对应nexus3-docker-hosted services

 

4. Docker客户端的设置:

在/etc/docker/daemon.json里添加insecure-registries、registry-mirrors两项。

{
  "insecure-registries": ["nexus3-docker-cicd.apps.test.openshift.com:80", "nexus3-docker-hosted-cicd.apps.test.openshift.com:80"],
  "registry-mirrors": ["nexus3-docker-cicd.apps.test.openshift.com:80"]
}
# systemctl damon-reload
# systemctl restart docker

文档结束。

 

posted @ 2020-05-21 11:51  kunsile  阅读(4311)  评论(0编辑  收藏  举报