Docker 私有仓库搭建

原文: Docker 私有仓库搭建

1、简介

在 Docker 中,当咱们执行 docker pull xxx 的时候 ,它其实是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为咱们提供的公共仓库。在工做中,咱们不可能把企业项目push到公有仓库进行管理。因此为了更好的管理镜像,Docker不只提供了一个中央仓库,同时也容许咱们搭建本地私有仓库。这一篇介绍registry、harbor两种私有仓库搭建。html

2、registry 的搭建

1. 搭建

Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可使用了。mysql

docker pull registry:2
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2

Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,咱们将主机的/opt/registry目录挂载到该目录,便可实现将镜像保存到主机的/opt/registry目录了。nginx

浏览器访问http://127.0.0.1:5000/v2,出现下面状况说明registry运行正常。git

2. 验证

如今经过push镜像到registry来验证一下。程序员

查看本地镜像:github

$ docker images
REPOSITORY                                             TAG                 IMAGE ID            CREATED             SIZE
nginx                                                  latest              568c4670fa80        5 weeks ago         109MB
ubuntu                                                 latest              93fd78260bd1        7 weeks ago         86.2MB
elasticsearch                                          6.5.1               32f93c89076d        7 weeks ago         773MB

要经过docker tag将该镜像标志为要推送到私有仓库:sql

docker tag nginx:latest localhost:5000/nginx:latest

经过 docker push 命令将 nginx 镜像 push到私有仓库中:docker

docker push localhost:5000/nginx:latest

访问 http://127.0.0.1:5000/v2/_catalog 查看私有仓库目录,能够看到刚上传的镜像了:shell

下载私有仓库的镜像,使用以下命令:ubuntu

docker pull localhost:5000/镜像名:版本号
例如
docker pull localhost:5000/nginx:latest

2、harbor 的搭建

docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增长了一些安全、访问控制、管理的功能以知足企业对于镜像仓库的需求。

1.搭建

下载

地址:https://github.com/goharbor/harbor/releases 本文是有 v1.2.2

配置

解压下载的安装包 harbor-offline-installer-v1.2.2.tgz

tar -xvf harbor-offline-installer-v1.2.2.tgz

修改 harbor.cfg

#hostname 改成本地ip,非 Mac OS系统 能够不指定端口
hostname = 192.168.31.143:9090
#设置secretkey_path 的路径为 当前目录的data下
secretkey_path = ./data

须要注意的是,非 Mac 用户只须要 修改 harbor.cfg 中的 hostname ,就能够直接经过./install.sh 就能够构建镜像,并把服务启动起来。不须要 secretkey_path 和 下面 docker-compose.yml 的修改

修改 docker-compose.yml

由于harbor使用了不少目录挂载,Mac有不少目录是不容许挂载的,因此若是是Mac用户,须要修改docker-compose.yml 中的挂载目录,修改后的 docker-compose.yml 以下:

version: '2'
services:
  log:
    image: vmware/harbor-log:v1.2.2
    container_name: harbor-log 
    restart: always
    volumes:
      - ./log/:/var/log/docker/:z
    ports:
      - 127.0.0.1:1514:514
    networks:
      - harbor
  registry:
    image: vmware/registry:2.6.2-photon
    container_name: registry
    restart: always
    volumes:
      - ./data/registry:/storage:z
      - ./common/config/registry/:/etc/registry/:z
    networks:
      - harbor
    environment:
      - GODEBUG=netdns=cgo
    command:
      ["serve", "/etc/registry/config.yml"]
    depends_on:
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "registry"
  mysql:
    image: vmware/harbor-db:v1.2.2
    container_name: harbor-db
    restart: always
    volumes:
      - ./data/database:/var/lib/mysql:z
    networks:
      - harbor
    env_file:
      - ./common/config/db/env
    depends_on:
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "mysql"
  adminserver:
    image: vmware/harbor-adminserver:v1.2.2
    container_name: harbor-adminserver
    env_file:
      - ./common/config/adminserver/env
    restart: always
    volumes:
      - ./data/config/:/etc/adminserver/config/:z
      - ./data/secretkey:/etc/adminserver/key:z
      - ./data/:/data/:z
    networks:
      - harbor
    depends_on:
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "adminserver"
  ui:
    image: vmware/harbor-ui:v1.2.2
    container_name: harbor-ui
    env_file:
      - ./common/config/ui/env
    restart: always
    volumes:
      - ./common/config/ui/app.conf:/etc/ui/app.conf:z
      - ./common/config/ui/private_key.pem:/etc/ui/private_key.pem:z
      - ./data/secretkey:/etc/ui/key:z
      - ./data/ca_download/:/etc/ui/ca/:z
      - ./data/psc/:/etc/ui/token/:z
    networks:
      - harbor
    depends_on:
      - log
      - adminserver
      - registry
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "ui"
  jobservice:
    image: vmware/harbor-jobservice:v1.2.2
    container_name: harbor-jobservice
    env_file:
      - ./common/config/jobservice/env
    restart: always
    volumes:
      - ./data/job_logs:/var/log/jobs:z
      - ./common/config/jobservice/app.conf:/etc/jobservice/app.conf:z
      - ./data/secretkey:/etc/jobservice/key:z
    networks:
      - harbor
    depends_on:
      - ui
      - adminserver
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "jobservice"
  proxy:
    image: vmware/nginx-photon:1.11.13
    container_name: nginx
    restart: always
    volumes:
      - ./common/config/nginx:/etc/nginx:z
    networks:
      - harbor
    ports:
      - 9090:80
      - 443:443
      - 4443:4443
    depends_on:
      - mysql
      - registry
      - ui
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "proxy"
networks:
  harbor:
    external: false

经过运行 install.sh 构建镜像,并把服务启动起来:

./install.sh

2. 使用

访问 http://127.0.0.1:9090/ 以下:

默认 admin 用户的密码为 Harbor12345 ,能够在 harbor.cfg 进行修改。登陆后以下:

图中的项目是以前上传的 ,新部署的 Harbor 登陆后项目下是空的。

能够建立项目,建立用户,给项目分配用户等等,操做都很简单 。

3. 上传镜像

首先登陆私有仓库,可使用 admin 用户 ,也可使用咱们本身建立的具备上传权限的用户:

docker login -u admin -p Harbor12345 127.0.0.1:9090

要经过docker tag将该镜像标志为要推送到私有仓库,例如:

docker tag nginx:latest 127.0.0.1:9090/library/nginx:latest

上传镜像:

docker push 127.0.0.1:9090/library/nginx:latest

访问 http://127.0.0.1:9090/harbor/projects ,在 library 项目下能够看见刚上传的 nginx镜像了:




欢迎扫码或微信搜索公众号《程序员果果》关注我,关注有惊喜~

相关文章
相关标签/搜索