资讯专栏INFORMATION COLUMN

Docker 创建私有仓库

Kylin_Mountain / 2008人阅读

摘要:清除所有处于终止状态的容器访问仓库仓库是集中存放镜像的地方。仓库可以看成是一个具体的项目或目录。是注册服务器地址,是仓库名。生成认证文件编辑修改编辑启动测试私有仓库功能登录到私有仓库尝试推送拉取镜像端口若被占用请尝试用代理

docker save load 与 docker export import

利用ssh pv Linux管道 实现镜像迁移(带进度条)

docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> "cat |docker load"

docker load 与 docker import区别

容器快照文件将丢失所有的历史数据和元数据信息(仅保存容器当时的快照状态)
从容器快照文件导入时可以重新指定标签等元数据信息。
镜像存储文件则将保存完整记录, 体积也要更大。
清除所有处于终止状态的容器
docker container prune
访问仓库

仓库(Repository)是集中存放镜像的地方。

一个容易混淆的概念是注册服务器(Registry)。

Registry是管理仓库的具体服务器,每个Registry可以有多个Repository,每个Repository下面多个image。

仓库可以看成是一个具体的项目或目录。

d1.dockerpool.com/ubuntu, d1.dockerpool.com是注册服务器地址,ubuntu是仓库名。

Docker Hub

需要先注册一个Docker账号

命令行登陆 退出

docker login
docker logout

查找 拉取镜像

docker search
docker pull

推送镜像

用户在登陆后 docker push 将自己的镜像推送到Docker Hub

自动创建

创建并登陆Docker Hub 以及目标网站

在目标网站中连接账户到Docker Hub

在Docker Hub中配置一个自动创建

选取一个目标网站中的项目(需要包含Dockerfile)和分支

指定Dockerfile位置, 并提交创建

私有仓库

容器运行

docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry

在私有仓库上传、搜索、下载镜像

docker tag 标记一个镜像,并推送到仓库。比如私有仓库地址为127.0.0.1:5000

格式: docker tag IMAGE[:TAG] [REGISTRY_HOST][:REGISTRY_PORT/]REPOSITORY[:TAG]
docker tag docker.io/mysql:5 127.0.0.1:5000/docker.io/mysql:5

docker push 上传标记的镜像

docker push 127.0.0.1:5000/docker.io/mysql

curl 查看仓库中的镜像

curl 127.0.0.1:5000/v2/_catalog

从私有仓库下载

需要先删除已有镜像
docker  image rm 127.0.0.1:5000/docker.io/mysql:5
docker pull 127.0.0.1:5000/docker.io/mysql:5

注意事项

Docker默认不允许非HTTPS方式推送镜像,可以通过docker配置选项取消这个限制

对于upstar系统(Ubuntu 14.04 Debian7 Wheezy)

编辑/etc/default/docker,在其中的DOCKER_OPTS增加内容
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com --insecure-registries=10.9.2.100:5000"

sudo service docker restart

对于systemd系统(Ubuntu16.04+ Debian8+ centos7)

编辑/etc/docker/daemon.json (不存在则新建)

{
    "registry-mirror": [
    "https://registry.docker-cn.com"
    ],
    "insecure-registries": [
    "122.112.207.157:5000"
    ]
}

systemctl restart docker

私有仓库高级配置
使用Docker Compose构建,搭建一个拥有权限认证、TLS的私有仓库

使用openssl自行签发docker.domain.com的站点的SSL证书

step1 创建 CA 密钥

openssl genrsa -out "root-ca.key" 4096

step2 利用私钥创建 CA 根证书请求文件

openssl req 
-new -key "root-ca.key" 
-out "root-ca.csr" -sha256 
-subj "/C=CN/ST=Zhejiang/L=Hangzhou/O=eichong/CN=eichong Docker Registry CA"
-subj参数
/C 表示国家 如CN
/ST 表示省
/L 表示城市或地区
/O 表示组织名
/CN 通用名称

step3 配置 CA 根证书,新建root-ca.cnf

[root_ca]
basicConstraints = critical, CA:TRUE, pathlen:1
keyUsage = critical, nonRepudiation, cRLSign, keyCertSign
subjectKeyIdentifier=hash

step4 签发根证书

openssl x509 -req -days 3650 -in "root-ca.csr" 
-signkey "root-ca.key" -sha256 -out "root-ca.crt" 
-extfile "root-ca.cnf" -extensions 
root_ca

step5 生成站点 SSL 私钥

openssl genrsa -out "docker.domain.com.key" 4096

step6 使用私钥生成证书请求文件

openssl req -new -key "docker.domain.com.key" -out "site.csr" -sha256 
-subj "/C=CN/ST=Zhejiang/L=Hangzhou/O=eichong/CN=docker.domain.com"

step7 配置证书,新建 site.cnf 文件

[server]
authorityKeyIdentifier=keyid, issuer
basicConstraints = critical, CA:FALSE
extendedKeyUsage=serverAuth
keyUsage = critical, digitalSignature, keyEncipherment
subjectAltName = DNS:docker.domain.com, IP:127.0.0.1
subjectKeyIdentifier=hash

step8 签署站点 SSL 证书

openssl x509 -req -days 750 -in "site.csr" -sha256 
-CA "root-ca.crt" -CAkey "root-ca.key" -CAcreateserial 
-out "docker.domain.com.crt" -extfile "site.cnf" -extensions server
经过以上步骤,就拥有了docker.domain.com的网站SSL私钥 docker.domain.com.key 和 SSL证书 docker.domain.com.crt
新建ssl文件夹将 docker.domain.com.key docker.domain.com.crt 移入,其他删除

配置私有仓库

 私有仓库默认的配置文件位于 /etc/docker/registry/config.yml ,我们先在本地编辑
 config.yml ,之后挂载到容器中。

version: 0.1
log:
    accesslog:
        disabled: true
    level: debug
    formatter: text
    fields:
        service: registry
        environment: staging
storage:
    delete:
        enabled: true
    cache:
        blobdescriptor: inmemory
    filesystem:
        rootdirectory: /var/lib/registry
auth:
    htpasswd:
        realm: basic-realm
        path: /etc/docker/registry/auth/nginx.htpasswd
http:
    addr: :443
    host: https://docker.domain.com
    headers:
        X-Content-Type-Options: [nosniff]
    http2:
        disabled: false
    tls:
        certificate: /etc/docker/registry/ssl/docker.domain.com.crt
        key: /etc/docker/registry/ssl/docker.domain.com.key
health:
    storagedriver:
        enabled: true
        interval: 10s
threshold: 3

生成 http 认证文件

 mkdir auth

 docker run --rm 
 --entrypoint htpasswd registry 
 -Bbn username password > auth/nginx.htpasswd

编辑 docker-compose.yml

version: "3"

services:
    registry:
        image: registry
        ports:
            - "443:443"
        volumes:
            - ./:/etc/docker/registry
            - registry-data:/var/lib/registry
volumes:
    registry-data:

修改 hosts

编辑 /etc/hosts

docker.domain.com 127.0.0.1

启动

docker-compose up -d

测试私有仓库功能

登录到私有仓库

docker login docker.domain.com

尝试推送、拉取镜像

docker pull ubuntu:17.10
docker tag ubuntu:17.10 docker.domain.com/username/ubuntu:17.10
docker push docker.domain.com/username/ubuntu:17.10
docker image rm docker.domain.com/username/ubuntu:17.10
docker pull docker.domain.com/username/ubuntu:17.10

443端口若被占用,请尝试用Nginx代理

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27423.html

相关文章

  • Docker零基础入门指南(五):Docker仓库使用

    摘要:原文地址零基础入门指南五仓库是集中存放镜像的地方。最常使用的公开服务是官方的,这也是默认的,并拥有大量的高质量的官方镜像。登录可以通过执行命令交互式的输入用户名及密码来完成在命令行界面登录。使用将这个镜像标记为。 原文地址:Docker零基础入门指南(五) 仓库( Repository )是集中存放镜像的地方。一个容易混淆的概念是注册服务器( Registry )。实际上注册服务器是管...

    silenceboy 评论0 收藏0
  • Nexus3私有仓库搭建 docker+maven+npm

    摘要:安装号称是世界上最流行的私服管理软件可以搭建几乎目前所有常见的仓库如等更是增加了对仓库的支持应该是搭建私服的唯一选择有两个版本和其中版本是免费专业版需要收费对于日常的仓库管理已经足够用支持二进制文件安装和安装这里选择安装简单方便运行以下命令 安装 Nexus号称是世界上最流行的私服管理软件(The worlds most popular repository),可以搭建几乎目前所有常见...

    bang590 评论0 收藏0
  • 使用nexus3.x配置docker镜像仓库仓库代理

    摘要:正好我们在使用作为的仓库,同时提供了等诸多类型的仓库功能。值得一提的是,我们可以使用这个仓库从和下载镜像,但是我们不能通过这个仓库推送镜像到远程仓库。 背景 我们一直使用 harbor 作为docker的镜像仓库,但Harbor只能作为私有仓库,当需要Docker Hub 或 Google Cloud Containers 上的镜像时,我们只能自己手动pull,重新打tag,再push...

    HollisChuang 评论0 收藏0
  • npm私有仓库 配置verdaccio在docker环境

    摘要:前端开发过程中,少不了自己封装一些通用的包,但又不想放在公共的平台,所以搭建一个私有的仓库是很有必要的。在这里简单介绍如何使用在环境下的配置。轻量级私有代理注册表。加上,那就真的无敌方便了,搭建一个私有仓库轻轻松松几分钟搞定。前端开发过程中,少不了自己封装一些通用的包,但又不想放在公共的平台,所以搭建一个npm私有的仓库是很有必要的。 在这里简单介绍如何使用 verdoccio 在docke...

    vboy1010 评论0 收藏0
  • 使用 docker + verdaccio 搭建npm私有仓库

    摘要:本文介绍如何使用搭建私有仓库,以及使用时如何映射到本地目录,方便简单对仓库进行各种操作。其次,创建目录,并添加的配置文件。当需要把某个项目发布到私有库时,直接。使用包名,即可安装私有包了。本文介绍如何使用 verdaccio 搭建私有npm仓库,以及使用 docker 时如何映射到本地目录,方便简单对仓库进行各种操作。系统环境是 Linux。 verdaccio verdacci...

    fantix 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<