搭建企业级私有仓库harbor并上传自己的镜像

Docker 平台

在这里插入图片描述
Docker 平台基本上由三部分组成:

客户端:用户使用 Docker 提供的工具(CLI 以及 API 等)来构建,上传镜像并发布命令来创建和启动容器
Docker 主机:从 Docker registry 上下载镜像并启动容器
Docker registry:Docker 镜像仓库,用于保存镜像,并提供镜像上传和下载

与Mavan的管理一样,Docker不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有镜像仓库。

1.公有云中央仓库
官方的hub.docker
国内厂商,阿里云,daocloud提供的免费中央仓库

2.也可以使用官方hub安装自建私有仓库
目前最为广泛使用的Harbor

如果只关注Harbor可以直接跳过前面,彼此之间并没有直接关联性,只是作为横向对比

公有云仓库

这里以阿里云仓库为例

准备工作

首先你得准备一个hub 的帐号, 去 https://hub.docker.com 注册吧!

查看本地已有镜像

docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              9f38484d220f        2 months ago        202 MB

创建dockerfile

mkdir docker_file
cd docker_file/
vi Dockerfile 

内容如下

FROM centos
MAINTAINER sandywei <zjcjava@163.com>
# move all configuration files into container

RUN yum install -y httpd
EXPOSE 80
CMD ["sh","-c","service httpd start;bash"]
docker build -t cenots/httpd:1.0 .

...
Removing intermediate container bd9551733fae
Successfully built 88bb00e21fc6

查看当前已经有两个镜像了

  docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
cenots/httpd        1.0                 88bb00e21fc6        3 minutes ago       329 MB
docker.io/centos    latest              9f38484d220f        2 months ago        202 MB

cenots的拼写我这里写错了

创建容器
docker run -d 88bb00e21fc6 bash -c "while true; do echo hello world; sleep 1; done"

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2907ad80faca        88bb00e21fc6        "bash -c 'while tr..."   13 seconds ago      Up 13 seconds       80/tcp              wonderful_spence
发布docker镜像

接下来就是登录一个hub帐号了 命令: docker login 如果成功则显示下图

docker login

输入用户名,密码登陆成功即可

这个过程和github的使用非常相似

1.commit一个容器 命令: docker commit CONTAINER_ID 仓库路径

docker commit 2907ad80faca zhangbamboo/test

2.将刚才的镜像push 到你的hub 那里去 命令: docker push 仓库路径:版本号 这个latest其实就是一个tag name 会在hub的Tags那里显示


docker push zhangbamboo/test:latest 
The push refers to a repository [docker.io/zhangbamboo/test]
d8153f44fb20: Pushing [==================================================>] 128.3 MB
d69483a6face: Pushing [==================================================>] 209.5 MB

success

现在验证一下 命令: docker inspect zhangbamboo/test

 docker inspect zhangbamboo/test
[
    {
        "Id": "sha256:188f3ed072afad90f22cf0c7024029fc2437365744e432b8566f36c9b8349044",
        "RepoTags": [
            "zhangbamboo/test:latest"
        ],
        "RepoDigests": [
            "zhangbamboo/test@sha256:702a594f74413ba060664e587fb8535d7fcbf5a50b5a628d21c90ebb70b555aa"
        ],
        "Parent": "sha256:88bb00e21fc683553117487f57ba637054f84220eb6c4fe445b31c2cdc1fbd2d",
        "Comment": "",
        "Created": "2019-06-05T10:03:03.807710776Z",
        "Container": "2907ad80faca19257db56491da14c24627ddfc708604c5455cbeabbefae1c767",
        "ContainerConfig": {
            "Hostname": "2907ad80faca",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "bash",
                "-c",
                "while true; do echo hello world; sleep 1; done"
            ],
            "Image": "88bb00e21fc6",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20190305",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "DockerVersion": "1.13.1",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "bash",
                "-c",
                "while true; do echo hello world; sleep 1; done"
            ],
            "Image": "",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20190305",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 329320764,
        "VirtualSize": 329320764,
        "GraphDriver": {
            "Name": "overlay2",
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/8115006f63caf4a90d60d3eee5643d0068c5a853f07e3b559d21d6f0c7ba07a0/diff",
                "MergedDir": "/var/lib/docker/overlay2/8aa447669d56da1205fa222c144ea3449d860c3b2905c1e5e48026624a9e0589/merged",
                "UpperDir": "/var/lib/docker/overlay2/8aa447669d56da1205fa222c144ea3449d860c3b2905c1e5e48026624a9e0589/diff",
                "WorkDir": "/var/lib/docker/overlay2/8aa447669d56da1205fa222c144ea3449d860c3b2905c1e5e48026624a9e0589/work"
            }
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d69483a6face4499acb974449d1303591fcbb5cdce5420f36f8a6607bda11854",
                "sha256:d8153f44fb200d131212f3db77bcdd32e352d717d590b1ad344006a7c9aef63d"
            ]
        }
 

上传Docker镜像到阿里云

配置阿里云的镜像加速器:https://cr.console.aliyun.com/#/accelerator
参考 配置docker加速器中的内容
https://blog.csdn.net/zjcjava/article/details/91380509

  1. 登录阿里云Docker Registry
    $ sudo docker login --username=zjcjava@163.com registry.cn-hangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在产品控制台首页修改登录密码。

  1. 从Registry中拉取镜像
    $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/dreamer/dokcer_test:[镜像版本号]
  1. 将镜像推送到Registry

这里我们以我系统里面已经pull的nginx为例

   $ sudo docker login --username=zjcjava@163.com registry.cn-hangzhou.aliyuncs.com  #如果已经登陆过这里可以跳过
docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx     latest              719cd2e3ed04        33 hours ago        109 MB

#   $ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/dreamer/dokcer_test:[镜像版本号]  #命名规则按照阿里的命名规则设置
sudo docker tag 719cd2e3ed04  registry.cn-hangzhou.aliyuncs.com/dreamer/dokcer_test:v1.0

#可以看到719cd2e3ed04有两个tag不同的名称
docker images
REPOSITORY                                              TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx                                         latest              719cd2e3ed04        33 hours ago        109 MB
registry.cn-hangzhou.aliyuncs.com/dreamer/dokcer_test   v1.0                719cd2e3ed04        33 hours ago        109 MB
 
#$ sudo docker push registry.cn-hangzhou.aliyuncs.com/dreamer/dokcer_test:[镜像版本号] 发布版本到仓库
   sudo docker push registry.cn-hangzhou.aliyuncs.com/dreamer/dokcer_test:v1.0

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

  1. 选择合适的镜像仓库地址
    从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录,并作为镜像命名空间前缀。

  1. 示例
    使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。
    $ sudo docker images
    REPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    registry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB
    $ sudo docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

使用"docker images"命令找到镜像,将该镜像名称中的域名部分变更为Registry专有网络地址。

    $ sudo docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

从registry中拉取镜像:

$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/qz/nginx-vim:[镜像版本号]

登录阿里云查看已上传的镜像列表:https://cr.console.aliyun.com/#/imageList

自建私有仓库

目前绝大数公司都是使用自己的私有仓库存放公司的项目镜像,比较公有云环境对于有些商业项目来说存在安全问题,因此这里主要以harbor为例如何构建私有仓库

安装私有仓库Harbor

目前使用最多的仓库类型,提供账号和密码功能,有自己的web管理面板

1 .HARBOR新版本安装
https://segmentfault.com/a/1190000022812745

2.解压并修改配置信息

tar  -xvf harbor-offline-installer-v2.5.0.tgz
cd harbor
cp harbor.yml.tmpl  harbor.yml
vi harbor.yml

vim harbor.yml:
hostname: 172.16.12.200 #如果要用https需要添加证书,这里直接使用IP 
http:
    port: 80 #curl测试用
#https:
#  port: 443 #自动监听443端口,不通过Nginx
#  certificate: /opt/certs/client.pem
#  private_key: /opt/certs/client-key.pem

database:
    password: root123 #默认
harbor_admin_password: Harbor12345 #默认
log:
    location: /data/harbor/logs
data_volume: /data/harbor/

3.安装并登录管理页面,创建一个新项目

./prepare
./install.sh

http://172.16.12.200/默认用户名和密码如下: user:admin password:Harbor12345
在这里插入图片描述

4.修该docker配置信息,并重启服务

vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://ehbu9xsm.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.88.61"]
}

systemctl daemon-reload
 systemctl restart docker

5.构建自己的docke镜像并提交到私有仓库中

FROM openjdk:8-jdk-alpine
MAINTAINER bamoo
ADD springboot-demo.jar springboot-demo.jar
RUN echo "Asia/Shanghai" >/etc/timezone
RUN sh -c 'touch /springboot-demo.jar'
ENV JAVA_OPTS=""
CMD exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /springboot-demo.jar
EXPOSE 8000


#创建镜像
docker build . -t springboot-demo:v1 -f Dockerfile


运行镜像容器
 docker run -d -p 8000:8000  --name demo-test springboot-demo:v1

docker rm 9bbc8f9a7e4b
curl localhost:8000

 docker commit -a "bamboo" d7366f3cf72d springboot-demo:v1

修改镜像tag前
docker images
REPOSITORY                                                        TAG                 IMAGE ID            CREATED             SIZE
springboot-demo                                                   v1                  3ed4b8bc215f        26 minutes ago      140MB

修改镜像tag
docker tag springboot-demo:v1 172.16.12.200/demo/springboot-demo:v1

修改镜像tag后
docker images
REPOSITORY                                                        TAG                 IMAGE ID            CREATED             SIZE
172.16.12.200/demo/springboot-demo                                v1                  3ed4b8bc215f        28 minutes ago      140MB

docker push 172.16.12.200/demo/springboot-demo:v1
The push refers to repository [172.16.12.200/demo/springboot-demo]
bee8556929fc: Pushed
83d6eb80e314: Pushed
1ad5d9220ec2: Pushed
32229f31d413: Pushed
ceaf9e1ebef5: Pushed
9b9b7f3d56a0: Pushed
f1b5933fe4b5: Pushed
v1: digest: sha256:567b056ce9d54521c50ff888adcabaa8180ce50ccad01c5db0214bfa5ecbb30f size: 1786

在这里插入图片描述

基于Nexus 3搭建的Docker私有仓库

nexus
Nexus简介
Nexus是一个多功能的仓库管理系统,是企业常用的私有仓库服务器软件。目前常被用来作为Maven私服、Docker私服。
如果用java的maven组件那么这个大公司基本都会有自己的私服nexus仓库。

优点
安装简单,并且有官方Docker镜像
用户界面,并提供REST API
支持浏览、检索以及检查机制
支持npm与bower以及Raw repositories、NuGet repositories
总之Nexus物美价廉,又提供功能全面的oss版,加之支持种类众多的依赖管理,又可以统一管理docker镜像。

安装
参考之前写的一篇博客:本地私服仓库nexus3.3.1使用手册 。当然,这里我们有更简洁的安装方式,由于nexus3+依赖于JDK1.8,可能有不少企业系统上安装的还是1.7甚至是1.6版本,这里建议主机安装安装,不适用Dokerfile。

参考资料

本地私服仓库nexus3.3.1使用手册
https://blog.52itstyle.vip/archives/1025/
自建私有仓库habor
https://blog.csdn.net/weixin_43546282/article/details/107696564

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值