本文收录在容器技术学习系列文章总目录html
(1)Repositorynginx
(2)Indexgit
(1)拉取镜像github
docker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
(2)上传镜像web
docker push [OPTIONS] NAME[:TAG]
例:docker pull quay.io/coreos/flannel:v0.10.0-amd64redis
博主前面的文章已经详细介绍过,从第三方的registry 上传拉取镜像了;这篇就是详细讲解若是搭建私有registry ,并在私有registry上传拉取镜像了。sql
docker提供的开源Registry,可是很简单,只能做为存储镜像的仓库,没有额外的功能;如管理页面等docker
两种方案安装,我采用的是方案2数据库
[root@docker2 ~]# yum info docker-distribution 已加载插件:fastestmirror Loading mirror speeds from cached hostfile 可安装的软件包 名称 :docker-distribution 架构 :x86_64 版本 :2.6.2 发布 :2.git48294d9.el7 大小 :3.5 M 源 :extras/7/x86_64 简介 : Docker toolset to pack, ship, store, and deliver content 网址 :https://github.com/docker/distribution 协议 : ASL 2.0 描述 : Docker toolset to pack, ship, store, and deliver content [root@docker2 ~]# yum -y install docker-distribution
(1)拉取镜像json
[root@docker2 ~]# docker pull registry:2.6.2 2.6.2: Pulling from library/registry d6a5679aa3cf: Pull complete ad0eac849f8f: Pull complete 2261ba058a15: Pull complete f296fda86f10: Pull complete bcd4a541795b: Pull complete Digest: sha256:5a156ff125e5a12ac7fdec2b90b7e2ae5120fa249cf62248337b6d04abc574c8 Status: Downloaded newer image for registry:2.6.2
(2)启动registry 容器
[root@docker2 ~]# docker run --name registry -p 5000:5000 -v /data/registry:/var/lib/registry -d registry:2.6.2 a43f802e737eba89879a4dc02562b38e0042db981f9bdb91782b453f0bac4119 [root@docker2 ~]# docker port registry 5000/tcp -> 0.0.0.0:5000 [root@docker2 ~]# ss -nutlp |grep 5000 tcp LISTEN 0 128 :::5000 :::* users:(("docker-proxy",pid=4901,fd=4)) [root@docker2 ~]# docker inspect -f {{."Mounts"}} registry [{bind /data/registry /var/lib/registry true rprivate}]
注:
(1)先将本地仓库打上合适的标签
[root@docker1 ~]# docker tag busybox:latest 192.168.10.102:5000/busybox:v0.1 [root@docker1 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.10.102:5000/busybox v0.1 758ec7f3a1ee 13 days ago 1.15 MB busybox latest 758ec7f3a1ee 13 days ago 1.15 MB
(2)尝试删除镜像
[root@docker1 ~]# docker push 192.168.10.102:5000/busybox:v0.1 The push refers to a repository [192.168.10.102:5000/busybox] Get https://192.168.10.102:5000/v1/_ping: http: server gave HTTP response to HTTPS client
上传镜像失败;缘由:docker 上传下载默认只支持https协议,搭建的私有仓库是http协议。
(3)修改重启docker服务
[root@docker1 ~]# vim /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"], "insecure-registries": ["192.168.10.102:5000"] } [root@docker1 ~]# systemctl restart docker
注:就是将私有仓库认证为安全仓库:"insecure-registries": [""]
(4)再次上传镜像,成功
[root@docker1 ~]# docker push 192.168.10.102:5000/busybox:v0.1 The push refers to a repository [192.168.10.102:5000/busybox] 23bc2b70b201: Pushed v0.1: digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe size: 527
(5)在私有仓库的服务器上验证
[root@docker2 ~]# ls /data/registry/docker/registry/v2/ blobs repositories
(6)从私有仓库拉取镜像,先删除再拉取
[root@docker1 ~]# docker rmi 192.168.10.102:5000/busybox:v0.1 Untagged: 192.168.10.102:5000/busybox:v0.1 Untagged: 192.168.10.102:5000/busybox@sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe [root@docker1 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 758ec7f3a1ee 2 weeks ago 1.15 MB [root@docker1 ~]# docker pull 192.168.10.102:5000/busybox:v0.1 v0.1: Pulling from busybox Digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe Status: Downloaded newer image for 192.168.10.102:5000/busybox:v0.1 [root@docker1 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.10.102:5000/busybox v0.1 758ec7f3a1ee 2 weeks ago 1.15 MB
(1)参数介绍
① 配置参数位于文件harbor.cfg中。
② 在harbor.cfg中有两类参数,必需参数和可选参数。
③ 注意:若是您选择经过Portal设置这些参数,请务必在Harbour启动后当即执行此操做。特别是,您必须在Harbour中注册或建立任何新用户以前设置所需的auth_mode。当系统中有用户时(除默认管理员用户外), 没法更改auth_mode。
④ 请注意,至少须要更改hostname属性。
(2)必需参数
(3)可选参数
(4)配置存储后端(可选)
默认状况下,Harbor将图像存储在本地文件系统中。在生产环境中,您能够考虑使用其余存储后端而不是本地文件系统,如S3,OpenStack Swift,Ceph等。这些参数是注册表的配置。
例如,若是使用Openstack Swift做为存储后端,则参数可能以下所示:
registry_storage_provider_name = swift registry_storage_provider_config = “ username:admin,password:ADMIN_PASS,authurl:http:// keystone_addr:35357 / v3 / aut
注意:有关注册表存储后端的详细信息,请参阅“ 注册表配置参考”。
资源 | 容量 | 描述 |
---|---|---|
CPU | 最小2 CPU | 4 CPU是首选 |
内存 | 最小4GB | 8GB是首选 |
磁盘 | 最小40GB | 160GB是首选 |
软件 | 版 | 描述 |
---|---|---|
Python | 2.7或更高版本 | 请注意,您可能必须在Linux发行版(Gentoo,Arch)上安装Python,默认状况下不安装Python解释器 |
Docker engine | 版本1.10或更高版本 | 有关安装说明,请参阅:https://docs.docker.com/engine/installation/ |
Docker Compose | 版本1.6.0或更高版本 | 有关安装说明,请参阅:https://docs.docker.com/compose/install/ |
Openssl | 最新的是首选 | 为Harbor生成证书和密钥 |
端口 | 协议 | 描述 |
---|---|---|
443 | HTTPS | Harbor门户和核心API将接受此端口上的https协议请求 |
4443 | HTTPS | 只有在启用“公证”时才须要链接到Dock的Docker Content Trust服务 |
80 | HTTP | Harbor端口和核心API将接受此端口上的http协议请求 |
博主也是太长时间没有进行硬盘添加的操做了,熟悉一遍
(1)查询添加的磁盘的名字
$ fdisk -l Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
(2)对磁盘进行分区
$ fdisk /dev/sdb Command (m for help): m Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Using default response p Partition number (1-4, default 1): First sector (2048-104857599, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-104857599, default 104857599): Using default value 104857599 Partition 1 of type Linux and of size 50 GiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
(3)磁盘文件格式化
$ [root@centos7-1 ~]# mkfs.ext3 /dev/sdb1
(4)挂载磁盘
$ vim /etc/fstab 设为开机自动挂载 /dev/sdb1 /data ext3 defaults 0 0 $ mount -a 挂载磁盘
(5)验证
[root@centos7-1 ~]# df -h /data Filesystem Size Used Avail Use% Mounted on /dev/sdb1 50G 52M 47G 1% /data
方案1:直接yum安装
[root@docker2 ~]# yum -y install docker-compose
方案2:在GitHub上选择本身须要的版本下载安装https://github.com/docker/compose/releases
$ curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose $ docker-compose version docker-compose version 1.23.2, build 1110ad01 docker-py version: 3.6.0 CPython version: 3.6.7 OpenSSL version: OpenSSL 1.1.0f 25 May 2017
资源能够下载的很慢,我已经将1.7.1版本放入个人网盘了,须要的私聊
[root@docker2 ~]# wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.1.tgz [root@docker2 ~]# tar -C /data/ -xvf harbor-offline-installer-v1.7.1.tgz
(1)修改harbor.cfg 配置文件
[root@docker2 ~]# cd /data/harbor/ [root@docker2 harbor]# grep "^[^#]" harbor.cfg _version = 1.7.0 hostname = docker2 ui_url_protocol = http max_job_workers = 2 customize_crt = on ssl_cert = /data/cert/server.crt ssl_cert_key = /data/cert/server.key secretkey_path = /data admiral_url = NA log_rotate_count = 50 log_rotate_size = 200M http_proxy = https_proxy = no_proxy = 127.0.0.1,localhost,core,registry email_identity = email_server = smtp.mydomain.com email_server_port = 25 email_username = sample_admin@mydomain.com email_password = abc email_from = admin <sample_admin@mydomain.com> email_ssl = false email_insecure = false harbor_admin_password = Harbor12345 auth_mode = db_auth ldap_url = ldaps://ldap.mydomain.com ldap_basedn = ou=people,dc=mydomain,dc=com ldap_uid = uid ldap_scope = 2 ldap_timeout = 5 ldap_verify_cert = true ldap_group_basedn = ou=group,dc=mydomain,dc=com ldap_group_filter = objectclass=group ldap_group_gid = cn ldap_group_scope = 2 self_registration = on token_expiration = 30 project_creation_restriction = everyone db_host = postgresql db_password = along db_port = 5432 db_user = postgres redis_host = redis redis_port = 6379 redis_password = along redis_db_index = 1,2,3 clair_db_host = postgresql clair_db_password = along clair_db_port = 5432 clair_db_username = postgres clair_db = postgres clair_updaters_interval = 12 uaa_endpoint = uaa.mydomain.org uaa_clientid = id uaa_clientsecret = secret uaa_verify_cert = true uaa_ca_cert = /path/to/ca.pem registry_storage_provider_name = filesystem registry_storage_provider_config = registry_custom_ca_bundle =
主要修改了:
hostname:主机名
max_job_workers:最大cpu数,小于等于本身服务器的硬件
(2)定义docker-compose.yml 文件(可省略)
docker-compose.yml 文件是docker 编排时,对容器的一些操做:
① 端口
ports:
- 80:80
- 443:443
- 4443:4443
② 众多存储器路径
如:volumes:
- /data/registry:/storage:z
在生产环境中,尽可能将容器的存储卷定义在空间较为充足的磁盘;
本身根据实际状况进行修改;
[root@docker2 harbor]# ./install.sh [Step 0]: checking installation environment ... Note: docker version: 18.03.1 Note: docker-compose version: 1.23.2 [Step 1]: loading Harbor images ... Loaded image: goharbor/registry-photon:v2.6.2-v1.7.1 Loaded image: goharbor/harbor-migrator:v1.7.1 Loaded image: goharbor/harbor-adminserver:v1.7.1 Loaded image: goharbor/harbor-core:v1.7.1 Loaded image: goharbor/harbor-log:v1.7.1 Loaded image: goharbor/harbor-jobservice:v1.7.1 Loaded image: goharbor/notary-server-photon:v0.6.1-v1.7.1 Loaded image: goharbor/clair-photon:v2.0.7-v1.7.1 Loaded image: goharbor/harbor-portal:v1.7.1 Loaded image: goharbor/harbor-db:v1.7.1 Loaded image: goharbor/redis-photon:v1.7.1 Loaded image: goharbor/nginx-photon:v1.7.1 Loaded image: goharbor/harbor-registryctl:v1.7.1 Loaded image: goharbor/notary-signer-photon:v0.6.1-v1.7.1 Loaded image: goharbor/chartmuseum-photon:v0.7.1-v1.7.1 [Step 2]: preparing environment ... Generated and saved secret to file: /data/secretkey Generated configuration file: ./common/config/nginx/nginx.conf Generated configuration file: ./common/config/adminserver/env Generated configuration file: ./common/config/core/env Generated configuration file: ./common/config/registry/config.yml Generated configuration file: ./common/config/db/env Generated configuration file: ./common/config/jobservice/env Generated configuration file: ./common/config/jobservice/config.yml Generated configuration file: ./common/config/log/logrotate.conf Generated configuration file: ./common/config/registryctl/env Generated configuration file: ./common/config/core/app.conf Generated certificate, key file: ./common/config/core/private_key.pem, cert file: ./common/config/registry/root.crt The configuration files are ready, please use docker-compose to start the service. [Step 3]: checking existing instance of Harbor ... [Step 4]: starting Harbor ... Creating network "harbor_harbor" with the default driver Creating harbor-log ... done Creating registry ... done Creating harbor-db ... done Creating registryctl ... done Creating harbor-adminserver ... done Creating redis ... done Creating harbor-core ... done Creating harbor-portal ... done Creating harbor-jobservice ... done Creating nginx ... done ✔ ----Harbor has been installed and started successfully.---- Now you should be able to visit the admin portal at http://docker2. For more details, please visit https://github.com/goharbor/harbor .
(1)打开了一些端口
[root@docker2 harbor]# ss -nutlp |grep docker tcp LISTEN 0 128 127.0.0.1:1514 *:* users:(("docker-proxy",pid=1440,fd=4)) tcp LISTEN 0 128 :::80 :::* users:(("docker-proxy",pid=2204,fd=4)) tcp LISTEN 0 128 :::443 :::* users:(("docker-proxy",pid=2192,fd=4)) tcp LISTEN 0 128 :::4443 :::* users:(("docker-proxy",pid=2181,fd=4))
(2)harbor实际就是启动了一些docker服务
[root@docker2 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES def22a8eeb9a goharbor/nginx-photon:v1.7.1 "nginx -g 'daemon of…" 2 hours ago Up 2 hours (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx a410a38479fa goharbor/harbor-portal:v1.7.1 "nginx -g 'daemon of…" 2 hours ago Up 2 hours (healthy) 80/tcp harbor-portal e25f87eb80db goharbor/harbor-jobservice:v1.7.1 "/harbor/start.sh" 2 hours ago Up 2 hours harbor-jobservice 2be7211535a2 goharbor/harbor-core:v1.7.1 "/harbor/start.sh" 2 hours ago Up 2 hours (healthy) harbor-core 26681dde1dec goharbor/harbor-db:v1.7.1 "/entrypoint.sh post…" 2 hours ago Up 2 hours (healthy) 5432/tcp harbor-db 80f592176896 goharbor/harbor-registryctl:v1.7.1 "/harbor/start.sh" 2 hours ago Up 2 hours (healthy) registryctl def7f9892e46 goharbor/redis-photon:v1.7.1 "docker-entrypoint.s…" 2 hours ago Up 2 hours 6379/tcp redis 9af874368813 goharbor/registry-photon:v2.6.2-v1.7.1 "/entrypoint.sh /etc…" 2 hours ago Up 2 hours (healthy) 5000/tcp registry 0f7156ac62f7 goharbor/harbor-adminserver:v1.7.1 "/harbor/start.sh" 2 hours ago Up 2 hours (healthy) harbor-adminserver 3e45524ef1f0 goharbor/harbor-log:v1.7.1 "/bin/sh -c /usr/loc…" 2 hours ago Up 2 hours (healthy) 127.0.0.1:1514->10514/tcp harbor-log
(1)网页登陆http://192.168.130.102
(2)登陆harbor 后一些简单的操做
(3)用户管理
注:密码要有必定的复杂度
(4)邮件配置
(5)新建一个项目
(1)修改docker配置,添加harbor仓库为新人地址
[root@docker1 ~]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"], "insecure-registries": ["192.168.10.102:5000"], "insecure-registries": ["docker2:80"] } [root@docker1 ~]# systemctl restart docker
(2)把要上传的镜像打上合适的标签
[root@docker1 ~]# docker tag busybox:latest docker2:80/demo/busybox:v0.1 [root@docker1 ~]# docker tag nginx:1.14-alpine docker2:80/demo/nginx:v0.1 [root@docker1 ~]# docker tag nginx:1.14 docker2:80/demo/nginx:v0.2 [root@docker1 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE docker2:80/demo/nginx v0.2 3f55d5bb33f3 11 days ago 109 MB docker2:80/demo/busybox v0.1 758ec7f3a1ee 2 weeks ago 1.15 MB docker2:80/demo/nginx v0.1 c5b6f731fbc0 2 weeks ago 17.7 MB
(3)登陆harbor仓库
[root@docker1 ~]# docker login docker2:80 Username: admin Password: Login Succeeded
(4)上传镜像
[root@docker1 ~]# docker push docker2:80/demo/busybox:v0.1 The push refers to a repository [docker2:80/demo/busybox] 23bc2b70b201: Pushed v0.1: digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe size: 527 [root@docker1 ~]# docker push docker2:80/demo/nginx #若是不知道tag,会把这个镜像的全部tag都上传 The push refers to a repository [docker2:80/demo/nginx] 59b059d445c1: Layer already exists 0246bb21855f: Layer already exists 42acf078bf60: Layer already exists 7bff100f35cb: Layer already exists v0.1: digest: sha256:438d8080098025e9983f253af806c1d1aa6b48be2ef1913991dab506bb3d4f72 size: 1153 6959f2c2a244: Pushed 06eb7a5682d6: Pushed 7b4e562e58dc: Pushed v0.2: digest: sha256:1313a52e3fd1718b1c36822cefa0e51950654004dcf12b08affb3067e02c6d9c size: 948
(5)在harbor 上验证上传成功
(6)拉取harbor 中的镜像
[root@docker1 ~]# docker rmi docker2:80/demo/busybox:v0.1 Untagged: docker2:80/demo/busybox:v0.1 Untagged: docker2:80/demo/busybox@sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe [root@docker1 ~]# docker image ls docker2:80/demo/busybox:v0.1 REPOSITORY TAG IMAGE ID CREATED SIZE [root@docker1 ~]# docker pull docker2:80/demo/busybox:v0.1 v0.1: Pulling from demo/busybox Digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe Status: Downloaded newer image for docker2:80/demo/busybox:v0.1 [root@docker1 ~]# docker image ls docker2:80/demo/busybox:v0.1 REPOSITORY TAG IMAGE ID CREATED SIZE docker2:80/demo/busybox v0.1 758ec7f3a1ee 2 weeks ago 1.15 MB
(7)在harbor web页面能够进行不少实用的操做
如:给镜像打标、复制镜像、删除镜像等
在harbor 安装路径下,使用docker-compose 命令对harbor 进行控制
(1)暂停harbor服务
[root@docker2 harbor]# docker-compose pause Pausing harbor-log ... done Pausing harbor-adminserver ... done Pausing registry ... done Pausing redis ... done Pausing registryctl ... done Pausing harbor-db ... done Pausing harbor-core ... done Pausing harbor-jobservice ... done Pausing harbor-portal ... done Pausing nginx ... done
(2)关闭harbor服务
[root@docker2 harbor]# docker-compose stop Stopping nginx ... done Stopping harbor-portal ... done Stopping harbor-jobservice ... done Stopping harbor-core ... done Stopping harbor-db ... done Stopping registryctl ... done Stopping redis ... done Stopping registry ... done Stopping harbor-adminserver ... done Stopping harbor-log ... done [root@docker2 harbor]# ss -nutl Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 128 *:22 *:*
(3)开启harbor服务
[root@docker2 harbor]# docker-compose start Starting log ... done Starting registry ... done Starting registryctl ... done Starting postgresql ... done Starting adminserver ... done Starting core ... done Starting portal ... done Starting redis ... done Starting jobservice ... done Starting proxy ... done