FW 配置一个私有的Docker仓库

思维 66 3月1日 发布

  • 建分支 0 分支
  • 收藏 0 收藏

我们在本地开发时,如果内网能部署一台Docker服务器,无疑会极大的方便镜像的分享发布,有些私有镜像就是可以直接放到内网服务器上,省去了不必要的网络下载。

本课程需要配两个虚拟机,一台作为私有仓库部署,一台作为工作机。

//Docker仓库部署-虚拟机
docker-machine create -d virtualbox registry
//Docker工作机
docker-machine create -d virtualbox default

Setup1 安装并配置Registry

mkdir ~/docker-registry && cd $_
mkdir data

mate docker-compose.yml

registry:
 image: registry
 ports:
  - 127.0.0.1:5000:5000
 environment:
  REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
 volumes:
  - ./data:/data

执行

docker-compose up

Setp2配置Nginx容器

mkdir ~/docker-registry/nginx

mate docker-compose.yml

nginx:
 image: "nginx"
 ports:
  - 443:443
 links:
  - registry:registry
 volumes:
  - ./nginx/:/etc/nginx/conf.d:ro

registry:
 image: registry
 ports:
  - 5000:5000
 environment:
  REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
 volumes:
  - ./data:/data

mate ~/docker-registry/nginx/registry.conf

upstream docker-registry {
  server registry:5000;
}

server {
  listen 443;
  server_name registry.51yixiao.com;

  # SSL
  # ssl on;
  # ssl_certificate /etc/nginx/conf.d/domain.crt;
  # ssl_certificate_key /etc/nginx/conf.d/domain.key;

  # disable any limits to avoid HTTP 413 for large image uploads
  client_max_body_size 0;

  # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
  chunked_transfer_encoding on;

  location /v2/ {
    # Do not allow connections from docker 1.5 and earlier
    # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
    if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
      return 404;
    }

    # To add basic authentication
    # auth_basic "registry.localhost";
    # auth_basic_user_file /etc/nginx/conf.d/registry.password;
    # add_header ‘Docker-Distribution-Api-Version‘ ‘registry/2.0‘ always;

    proxy_pass                          http://docker-registry;
    proxy_set_header  Host              $http_host;   # required for docker client‘s sake
    proxy_set_header  X-Real-IP         $remote_addr; # pass on real client‘s IP
    proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_read_timeout                  900;
  }
}

执行

docker-compose up
//测试
curl http://www.registry.com:443
curl http://www.registry.com:5000

Setup3 设置HTTP验证

cd ~/docker-registry/nginx

htpasswd -c registry.password USERNAME
//USERNAME替换自己想添加的用户名,比如:markthink,如果要继续添加其他用户
//htpasswd registry.password USERNAME

mate ~/docker-registry/nginx/registry.conf

 #To add basic authentication
 auth_basic "registry.localhost";
 auth_basic_user_file /etc/nginx/conf.d/registry.password;
 add_header ‘Docker-Distribution-Api-Version‘ ‘registry‘ always;

执行

cd ~/docker-registry
docker-compose up

curl http://www.registry.com:443/

<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.9.11</center>
</body>
</html>

//使用HTTP验证访问-用上面配置的用户名和密码 
curl http://markthink:[email protected]:443/

Setup4设置SSL验证

使用HTTP验证并不安全,因为连接没有加密传输,下面启用SSL配置

mate ~/docker-registry/nginx/registry.conf

  # SSL
  ssl on;
  ssl_certificate /etc/nginx/conf.d/domain.crt;
  ssl_certificate_key /etc/nginx/conf.d/domain.key;

为我们的域名购买一个证书或申请一个免费SSL证书

Setup5申请免费证书

沃通CA(WoSign CA)
https://buy.wosign.com/free/#myorder
https://buy.wosign.com/FreeSSL.html

用申请好的证书更新nginx配置文件

Setup6配置域名

mate /etc/hosts
//宿主机添加
192.168.99.100 registry.51yixiao.com

Setup7测试

docker-machine start default
//重新分配IP
docker-machine regenerate-certs default

docker-machine ssh default
sudo -i
vi /etc/hosts
192.168.99.100 registry.51yixiao.com

docker login https://registry.51yixiao.com
//输入前面配置的用户和密码 登陆成功

Setup8从工作机推送镜像至服务器

eval $(docker-machine env default)
docker images
//为本地镜像打标签
docker pull busybox
docker tag busybox registry.51yixiao.com/busybox

//登陆服务器
docker login https://registry.51yixiao.com

//向服务器推送镜像
docker push registry.51yixiao.com/busybox

curl https://markthink:[email protected]/v2/
//网页直接访问
https://markthink:[email protected]/v2/
//退出服务器
docker logout https://registry.51yixiao.com

//查看镜像仓库已有的镜像
https://markthink:[email protected]/v2/_catalog

Setup9从镜像服务器下载镜像至工作机

docker-machine start default
docker-machine regenerate-certs default
docker-machine ssh default
sudo -i
vi /etc/hosts
//添加IP地址
192.168.99.100 registry.51yixiao.com
//登陆服务器
docker login https://registry.51yixiao.com
//下载镜像
docker pull registry.51yixiao.com/busybox
//镜像改名
docker tag registry.51yixiao.com/busybox busybox

制作自己的证书

由于Dokcer目前不允许使用自签名的SSL证书,这一步比平时更加复杂,我们必须建立自己的系统,对我们自己的证书签名授权。

1.生成根密钥

cd ~/docker-registry/nginx
//生成新的根密钥
openssl genrsa -out devdockerCA.key 2048

2.生成根证书-Common Name填写证书签发者的域名 比如:www.trjcn.com

openssl req -x509 -new -nodes -key devdockerCA.key -days 10000 -out devdockerCA.crt

3.为nginx生成ssl密钥

//生成nginx域名的SSL证书
openssl genrsa -out domain.key 2048

我们的CA中心与要申请证书的服务器是同一个,否则应该是在另一台需要用到证书的服务器上生成

4.为nginx生成证书签署请求

//生成ssl_certificate_key证书
openssl req -new -key domain.key -out dev-docker-registry.com.csr

需要注意的是Common Name必须输入我们要授予证书的服务器IP或域名

5.私有CA根据请求来签发证书

//签署证书申请
openssl x509 -req -in dev-docker-registry.com.csr -CA devdockerCA.crt -CAkey devdockerCA.key -CAcreateserial -out domain.crt -days 10000
``
此过程用到了前两步生成的根密钥和根证书

至此SSL证书制作完成,但是我们生成的证书没有已经的证书颁发机构验证,因此需要在Docker Registry中注册。

下面是基于centsos的部署过程

scp ./devdockerCA.crt registry:/home/docker/
docker-machine ssh registry
sudo -i
mkdir /usr/local/share/ca-certificates/docker-dev-cert
mv /home/docker/devdockerCA.crt /usr/local/share/ca-certificates/docker-dev-cert/
//update-ca-certificates

重启Docker daemon守护进程

docker-machine restart registry
//service docker restart

时间: 2024-10-09 17:54:36

FW 配置一个私有的Docker仓库的相关文章

搭建私有 Docker 仓库服务器

Docker Hub 是 Docker 官方的公共仓库服务器,用户在 DockerHub 上只能创建一个私有仓库,这对于有些用户是不够用的,而且 DockerHub 服务器的访问速度也是个很大问题,那么我们希望能在自己本地的服务器上创建一个类似于 DockerHub 仓库服务器供团队使用,这也是可以的. 我测试的环境是 Mac OSX 下,已经通过 Boot2Docker 工具安装好 Docker 的环境,通过 命令boot2docker ip 可以查看虚拟机的 IP 是 192.168.59.

Docker 镜像及Docker仓库配置 [四]

Docker 镜像及Docker仓库配置 [四] Docker 时间:2016年11月8日15:45:20 一.Docker 镜像介绍 Docker镜像构建分为两种,一种是手动构建,另一种是Dockerfile(自动构建) Docker镜像手动构建案例: 我们基于centos镜像进行构建,制作nginx镜像 [[email protected] ~]# docker run --name abcdocker -it centos[[email protected] /]# yum install

Docker 学习笔记【3】 Docker 仓库、数据卷、数据卷容器,网络基础实操。高级网络配置学习

Docker 学习笔记[4] 高级网络配置实操,实战案例实验 =========================================================================== Docker 学习笔记[2] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,记录开始 =========================================================================== 被格式化的脚本内容: #开头代表

docker 仓库

Docker仓库 仓库(Repository)是集中存放镜像的地方. 一个容易混淆的概念是注册服务器(Registry).实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像.从这方面来说,仓库可以被认为是一个具体的项目或目录.例如对于仓库地址 docker.sina.com.cn/centos:centos63 来说,docker.sina.com.cn是注册服务器地址,centos 是仓库名,centos63 是仓库的 tag. Docker Hub

Docker 学习笔记【2】 Docker 基础操作实,Docker仓库、数据卷,网络基础学习

Docker 学习笔记[3] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,实操 网络基础  ---------高级网络配置和部分实战案例学习 ============================================================= Docker 学习笔记[1]Docker 相关概念,基本操作--------实操记录开始 ============================================================= 被

(五)Docker 仓库

前面在下载镜像的适应已经用到了Docker仓库,如果是镜像的一个托管平吧. 仓库 一个容易混淆的概念是注册服务器(Registry). 实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像.从这方面来说, 仓库可以被认为是一个具体的项目或目录.例如对于仓库地址registry.hub.docker.com/ubuntu 来说,registry.hub.docker.com是注册服务器地址,ubuntu是仓库名.大部分时候,并不需要严格区分这两者的概念. D

docker 仓库及镜像的上传下载

                                                                       Docker 仓库 仓库是集中存放镜像文件的场所.有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分.实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag). 一个 Docker Registry 中可以包含多个仓库(Repository):每个仓库可以包含多个标签(Tag):每个标签对

docker 仓库harbor 1.8.2 http 部署

docker 仓库harbor 1.8.2 http 部署 Harbor是VMware公司开源的企业级Docker Registry项目,项目地址: https://github.com/vmware/harbor1.下载离线安装包 2.安装Docker3.安装docker-compose4. Harbor安装与配置5. Docker主机访问Harbor 部署 curl -L https://github.com/docker/compose/releases/download/1.25.0-r

docker学习-docker仓库

docker仓库中心:https://hub.docker.com/ 网易蜂巢仓库中心:https://c.163.com/hub#/m/home/