搭建Docker私有仓库Registry-v2

环境说明:Centos 7.1 64Bit + Docker 1.9.1,仓库的存储以使用本地磁盘为例。

一、安装配置registry server v2

官方部署指南: Deploying a registry server

由于v1版本的registry要被官方废弃了,所以我们选择安装v2版本。(注:v2版本需要TLS加密连接)

1、Get a certificate(为域名TLS访问配置证书)

创建一个 certs 目录:

$ mkdir -p certs

然后将仓库域名在权威机构申请的证书 crt 文件放入并命名为 certs/domain.crt ,将 key 文件放入并命名为  certs/domain.key

如果使用私有证书,可以这么创建:

$ mkdir -p certs && openssl req \
   -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
   -x509 -days 365 -out certs/domain.crt

为了让 docker 客户端信任私有证书,需要将证书文件放入使用该仓库的所有 docker 客户端的服务器上:

以仓库所在的 docker 本机为例:

$ sudo mkdir /etc/docker/certs.d/docker-hub.yourdomain.com:5000/ -p
$ sudo cp certs/domain.crt /etc/docker/certs.d/docker-hub.yourdomain.com\:5000/ca.crt

2、Native basic auth(配置登陆认证,本例使用 htpasswd 方式)

使用 htpasswd 命令生成密码文件前,需要先安装 httpd-tools 。另外 htpasswd 授权必须配合TLS一同使用,并且只支持 bcrypt 格式的密码。

创建 htpasswd 密码文件,并添加一个用户user1

$ mkdir auth
$ htpasswd -cB auth/htpasswd user1

再添加一个用户user2

$ htpasswd -B htpasswd user2

3、启动 registry 容器(本例网络使用 host 模式)

$ docker pull registry:2
$ docker run -d --net=host --restart=always --name registry \
   -v `pwd`/data:/var/lib/registry \     (注:仓库的数据目录)
   -v `pwd`/auth:/auth \
   -e "REGISTRY_AUTH=htpasswd" \
   -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
   -v `pwd`/certs:/certs \
   -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
   -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
   registry:2

4、启动成功,测试一下

$ docker pull ubuntu
$ docker tag ubuntu docker-hub.yourdomain.com:5000/ubuntu:latest
$ docker login -u user1 -p yourpasswd -e "your@email-address.com" docker-hub.yourdomain.com:5000
$ docker push docker-hub.yourdomain.com:5000/ubuntu:latest
$ docker pull docker-hub.yourdomain.com:5000/ubuntu:latest

二、安装 docker-registry-frontend (可选)

安装配置笔记简单,参考上面的docker hub链接即可,也可以参考 其github主页

$ docker pull konradkleine/docker-registry-frontend
$ docker run \
   --net=host -d \
   -e ENV_DOCKER_REGISTRY_HOST=hub.docker.localhost \ (注:先在 /etc/hosts 中添加registry容器的IP)
   -e ENV_DOCKER_REGISTRY_PORT=5000 \
   -e ENV_DOCKER_REGISTRY_USE_SSL=1 \
   -e ENV_MODE_BROWSE_ONLY=true \   (注:browse mode, no repos/tags management feature in the UI)
   konradkleine/docker-registry-frontend:v2

在办公电脑上用浏览器访问一下试试:http://docker-hub.yourdomain.com/ 。

三、使用Docker Compose 来管理容器的启停(可选)

1、安装 Docker Compose(参考 官方文档

$ sudo curl -L https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

2、安装 Command Completion(命令补全)

for Bash:

$ sudo curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose --version | awk 'NR==1{print $NF}')/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

3、使用 Compose 来管理上述2个容器

1)先创建一个Compose项目目录,该目录的名字默认为项目的名字

$ mkdir compose_registry

2)编辑docker-compose.yml文件:

$ cd compose_registry
$ vi docker-compose.yml

registry:
  restart: always
  image: registry:2
  net: host
  environment:
    REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
    REGISTRY_HTTP_TLS_KEY: /certs/domain.key
    REGISTRY_AUTH: htpasswd
    REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
    REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
  volumes:
    - /home1/docker_registry:/var/lib/registry
    - /home/docker/registry_certs:/certs:ro
    - /home/docker/auth:/auth:ro
    
registry-frontend:
  restart: always
  image: konradkleine/docker-registry-frontend:v2
  net: host
  environment:
    ENV_DOCKER_REGISTRY_HOST: hub.docker.localhost
    ENV_DOCKER_REGISTRY_PORT: 5000
    ENV_MODE_BROWSE_ONLY: 'true'
    ENV_DOCKER_REGISTRY_USE_SSL: '1'
    ENV_USE_SSL: 'yes'
  volumes:
    - /home/docker/registry_certs/domain.crt:/etc/apache2/server.crt:ro
    - /home/docker/registry_certs/domain.key:/etc/apache2/server.key:ro

3)使用 Compose 启动容器

# docker-compose up -d

之后就可以使用 docker-compose 命令来方便的停止、启动、查看容器日志了,不需要记住负载的docker run 命令里的参数了!

# docker-compose info
# docker-compose stop
# docker-compose start
# docker-compose logs
我来评几句
登录后评论

已发表评论数()

相关站点

热门文章