澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站:Docker入门之搭建私人民居

2019-09-22 作者:澳门新萄京官方网站   |   浏览(176)

一、Docker hub 交互

    Docker hub 是 Docker 官方维护的一个公共仓库,大部分需求都可以通过在 Docker hub 中直接下载镜像来完成。接下来,来看一下怎么与 Docker hub 进行交互,包括登陆登出以及将本地镜像推送到 Docker hub 等...

注册:https://hub.docker.com/ 注册的时候需要FQ~~

登陆:docker login 

澳门新萄京官方网站 1

登出:docker logout

搜索镜像

docker search [name] --filter=stars=30
                     --filter=stars=N (参数可以指定仅显示收藏数量为 N 以上的镜像)

澳门新萄京官方网站 2

拉取镜像:docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

推送镜像

#1、打镜像标签(username 表示Docker账号用户名)
docker tag REPOSITORY[:tag] username/REPOSITORY[:tag]
docker tag myenv:1.0 jmcui/myenv:1.0

#2、推送到Docker hub
docker push username/REPOSITORY[:tag]
docker push jmcui/myenv:1.0

主要思路:

澳门新萄京官方网站 3

Docker入门之搭建私有企业级镜像仓库Harbor

澳门新萄京官方网站 4

澳门新萄京官方网站 5

二、创建 Docker 私库(基于HTTP)

    在企业中把内部的一些工具包放入 Nexus 中是比较常见的做法,最新版本 Nexus3.x 全面支持 Docker 的私有镜像。所以使用 Nexus3.x 一个软件来管理 Docker , Maven , Yum , PyPI 等是一个明智的选择。

  1. Docker Registry 说明

为什么要搭建私有镜像仓库

  对于一个刚刚接触Docker的人来说,官方的Docker hub是用于管理公共镜像。既然官方提供了镜像仓库我们为什么还要去自己搭建私有仓库呢?虽然也可以托管私有镜像。我们可以非常方便的把我们自己镜像推送上去,但是Docker hub提供的私有仓库个数有限。对于个人来说Docker hub是个不错的选择,但是对于企业来说,相对于安全 ,成本和公司的架构来说搭建自己的私有镜像仓库才是正确的道路。

为什么要搭建私有镜像仓库

  对于一个刚刚接触Docker的人来说,官方的Docker hub是用于管理公共镜像。既然官方提供了镜像仓库我们为什么还要去自己搭建私有仓库呢?虽然也可以托管私有镜像。我们可以非常方便的把我们自己镜像推送上去,但是Docker hub提供的私有仓库个数有限。对于个人来说Docker hub是个不错的选择,但是对于企业来说,相对于安全 ,成本和公司的架构来说搭建自己的私有镜像仓库才是正确的道路。

3.png

1、使用 Docker 安装 Nexus

docker run -d --name nexus3 --restart=always -p 8081:8081 -p 8082:8082 -p 8083:8083 --mount src=nexus-data,target=/nexus-data sonatype/nexus3
## 8081:nexus3网页端
## 8082:docker(hosted)私有仓库,可以pull和push
## 8083:docker(proxy)代理远程仓库,只能pull 

关于如何创建和使用本地仓库,其实已经有很多文章介绍了。因为docker技术正处于发展和完善阶段,所以有些文章要么内容已经过时,要么给出了错误的配置,导致无法正常创建仓库。本文记录的是个人完整的搭建过程,docker version为1.1.2。

什么是Harbor?为什么要选择Harbor

  Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

  • 基于角色的访问控制 - 用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
  • 镜像复制 - 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
  • 图形化用户界面 - 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
  • AD/LDAP 支持 - Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
  • 审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
  • RESTful API - RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
  • 部署简单 - 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
    这就是官网原话。完美解释了什么是Harbor?为什么要选择Harbor。上面解释那么多的Harbor, 现在我们来开始安装吧。

    #### Harbor安装

      要安装Harbor,有以下几个先决条件:
        Python版本大于或者等于2.7     Docker engine的版本大于等于1.10
        Docker Compose的版本大于1.6.0

  首先我们需要检查自己服务器是否支持上面3个条件。输入以下代码检查

#python2.7官网安装页面

#检查Python版本.Ubuntu 16.04已经集成了python2.7。
python -V
#检查Docker的版本
docker -v
#Docker Compose安装脚本
sudo curl -L -s`-`uname -m` -o /usr/local/bin/docker-compose
#检查Docker Compose的版
docker-compose --version
#如果提示Permission denied。执行以下语句赋权
sudo chmod x /usr/local/bin/docker-compose

  确保服务器上的软件版本已经满足以上要求之后。我们现在开始安装Harbor。如果不知道怎么安装docker 可以参考  https://www.linuxidc.com/Linux/2018-03/151318.htm

什么是Harbor?为什么要选择Harbor

  Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

  • 基于角色的访问控制 - 用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
  • 镜像复制 - 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
  • 图形化用户界面 - 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
  • AD/LDAP 支持 - Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
  • 审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
  • RESTful API - RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
  • 部署简单 - 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
    这就是官网原话。完美解释了什么是Harbor?为什么要选择Harbor。上面解释那么多的Harbor, 现在我们来开始安装吧。

    #### Harbor安装

      要安装Harbor,有以下几个先决条件:
        Python版本大于或者等于2.7     Docker engine的版本大于等于1.10
        Docker Compose的版本大于1.6.0

  首先我们需要检查自己服务器是否支持上面3个条件。输入以下代码检查

#python2.7官网安装页面

#检查Python版本.Ubuntu 16.04已经集成了python2.7。
python -V
#检查Docker的版本
docker -v
#Docker Compose安装脚本
sudo curl -L -s`-`uname -m` -o /usr/local/bin/docker-compose
#检查Docker Compose的版
docker-compose --version
#如果提示Permission denied。执行以下语句赋权
sudo chmod x /usr/local/bin/docker-compose

  确保服务器上的软件版本已经满足以上要求之后。我们现在开始安装Harbor。如果不知道怎么安装docker 可以参考 

上一篇文章搭建了一个具有基础功能,权限认证、TLS 的私有仓库,但是Docker Registry 作为镜像仓库,连管理界面都没有,甚至连一些运维必备的功能都是缺失的,还有什么 Docker 镜像仓库管理工具呢?
这里有一个简单好用的企业级 Registry 服务器 - Harbor,推荐在生产环境上使用。

2、登陆

    访问 http:// ip地址:8081 默认账号:admin,默认密码:admin123

澳门新萄京官方网站 6

官方提供了Docker Hub网站来作为一个公开的集中仓库。然而,本地访问Docker Hub速度往往很慢,并且很多时候我们需要一个本地的私有仓库只供网内使用。

下载Harbor

#下载安装包
wget
#解压
tar -xzf harbor-offline-installer-v1.1.2.tgz
cd harbor
#编辑配置文件
vi harbor.cfg

下载Harbor

#下载安装包
wget
#解压
tar -xzf harbor-offline-installer-v1.1.2.tgz
cd harbor
#编辑配置文件
vi harbor.cfg

Harbor 简介

HarborVMware公司开源的企业级Docker Registry项目,其目标是帮助用户迅速搭建一个企业级的Docker registry服务。

它以Docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based AccessControl),AD/LDAP集成、以及审计日志(Auditlogging) 等企业用户需求的功能,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution

作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。

Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中,确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

Harbor 是由 VMware 中国研发团队负责开发的开源企业级 Docker Registry,不仅解决了我们直接使用 Docker Registry 的功能缺失,更解决了我们在生产使用 Docker Registry 面临的高可用、镜像仓库直接复制、镜像仓库性能等运维痛点。

 3、创建私有仓库

    页面上方的齿轮按钮 —> Repository —> Repositories —> Create repository —> 选择 docker (hosted)

澳门新萄京官方网站 7

      还可以创建一个 docker (proxy) 类型的仓库链接到 DockerHub 上。再创建一个 docker (group) 类型的仓库把刚才的 hosted 与 proxy 添加在一起。主机在访问的时候默认下载私有仓库中的镜像,如果没有将链接到 DockerHub 中下载并缓存到 Nexus 中。

Docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry项目来实现,通过http服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。

配置文件注释参考]

## Configuration file of Harbor

#设置访问地址,支持IP,域名,主机名,禁止设置127.0.0.1
hostname = reg.mydomain.com

#访问方式,http或者https
ui_url_protocol = http

#邮件通知相关设置
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

#用户登录密码
harbor_admin_password = Harbor12345

#harbor认证模式,默认为db_auth,本地mysql,也可以配置ldap认证
auth_mode = db_澳门新萄京官方网站:Docker入门之搭建私人民居房集团级镜像酒店Harbor,恐怕是最详尽的布署。auth

#ldap认证配置
ldap_url = ldaps://ldap.mydomain.com
ldap_basedn = ou=people,dc=mydomain,dc=com
ldap_uid = uid
ldap_scope = 3

#mysql数据库设置
db_password = root123
self_registration = on
use_compressed_js = on
max_job_workers = 3
token_expiration = 30
verify_remote_cert = on
customize_crt = on

#显示的认证及组织信息
crt_country = CN
crt_state = State
crt_location = CN
crt_organization = organization
crt_organizationalunit = organizational unit
crt_commonname = example.com
crt_email = example@example.com
project_creation_restriction = everyone

#SSL证书地址。只有开启https访问才生效
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
#############

  以上按照自己需求修改。如果想开启https模式访问需要自己申请ssl证书。harbor默认监听80端口。如果需要修改端口。请修改目录下的docker-compose.yml文件,
澳门新萄京官方网站 8
修改完成之后。运行

sudo ./install.sh

  进行安装。安装完成之后他会自己启动。这里他会自己下载一些他所需的images。过程有点慢。可以通过阿里云的镜像加速器来加速。阿里云镜像加速器 .打开链接登录之后点击镜像加速。然后你会得到一个专属加速地址。如图
澳门新萄京官方网站 9可以根据自己的环境查看文档安装使用。然后等待命令执行结束。
澳门新萄京官方网站 10

配置文件注释参考]

## Configuration file of Harbor

#设置访问地址,支持IP,域名,主机名,禁止设置127.0.0.1
hostname = reg.mydomain.com

#访问方式,http或者https
ui_url_protocol = http

#邮件通知相关设置
email_server = smtp.mydomain.com
email_server_port = 25
email_username = [email protected]
email_password = abc
email_from = admin <[email protected]>
email_ssl = false

#用户登录密码
harbor_admin_password = Harbor12345

#harbor认证模式,默认为db_auth,本地mysql,也可以配置ldap认证
auth_mode = db_auth

#ldap认证配置
ldap_url = ldaps://ldap.mydomain.com
ldap_basedn = ou=people,dc=mydomain,dc=com
ldap_uid = uid
ldap_scope = 3

#mysql数据库设置
db_password = root123
self_registration = on
use_compressed_js = on
max_job_workers = 3
token_expiration = 30
verify_remote_cert = on
customize_crt = on

#显示的认证及组织信息
crt_country = CN
crt_state = State
crt_location = CN
crt_organization = organization
crt_organizationalunit = organizational unit
crt_commonname = example.com
crt_email = [email protected]
project_creation_restriction = everyone

#SSL证书地址。只有开启https访问才生效
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
#############

  以上按照自己需求修改。如果想开启https模式访问需要自己申请ssl证书。harbor默认监听80端口。如果需要修改端口。请修改目录下的docker-compose.yml文件,
澳门新萄京官方网站 11
修改完成之后。运行

sudo ./install.sh

  进行安装。安装完成之后他会自己启动。这里他会自己下载一些他所需的images。过程有点慢。可以通过阿里云的镜像加速器来加速。阿里云镜像加速器 .打开链接登录之后点击镜像加速。然后你会得到一个专属加速地址。如图
澳门新萄京官方网站 12可以根据自己的环境查看文档安装使用。然后等待命令执行结束。
澳门新萄京官方网站 13

环境准备

  • 系统:Ubuntu 17.04 x64
  • Docker 17.12.0-ce ,Docker Compose
  • python3
  • IP:198.13.48.154
  • 域名:hub.ymq.io,此域名需要dns 解析到198.13.48.154 作为私有仓库地址

本文出现的所有:hub.ymq.io 域名。使用时候请替换成自己的域名

4、配置支持 HTTP

    Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,(Ubuntu 16.04 , Debian 8 , centos 7)在 /etc/docker/daemon.json 中写入如下内容:

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "xx.xx.xx.xx:8082"
  ]
}

     重启 Docker :

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

docker-registry既然也是软件应用,自然最简单的方法就是使用官方提供的已经部署好的镜像registry。官方文档中也给出了建议,直接运行sudo docker run -p 5000:5000 registry命令。这样确实能启动一个registry服务器,但是所有上传的镜像其实都是由docker容器管理,放在了/var/lib/docker/….某个目录下。而且一旦删除容器,镜像也会被删除。因此,我们需要想办法告诉docker容器镜像应该存放在哪里。registry镜像中启动后镜像默认位置是/tmp/registry,因此直接映射这个位置即可,比如到本机的/opt/data/registry目录下。

开启https

  如果使用http的这里可以跳过,我们把已经申请好的证书文件放到/data/cert 目录下面。然后修改harbor.cfg文件

澳门新萄京官方网站 14
  安装成功之后打开之前自己设定的域名或者IP地址。测试地址 。测试用户名:harbor_test,测试密码:Harbor_test123
澳门新萄京官方网站 15

开启https

  如果使用http的这里可以跳过,我们把已经申请好的证书文件放到/data/cert 目录下面。然后修改harbor.cfg文件

澳门新萄京官方网站 16
  安装成功之后打开之前自己设定的域名或者IP地址。测试地址 。测试用户名:harbor_test,测试密码:Harbor_test123
澳门新萄京官方网站 17

Docker 环境

在部署私有仓库之前,需要在主机上安装Docker。私有仓库是 registry images,并在Docker中运行。

我是用的vultr 的服务器,所以,下面操作,就不用配置国内的,加速镜像库,直接用Docker官方的!

国内加速仓库,我其他文章有提到:Ubuntu 17.04 x64 安装 Docker CE 初窥 Dockerfile 部署 Nginx
http://www.ymq.io/2017/12/30/Docker-Install/

5、验证效果

#1、登陆
docker login xx.xx.xx.xx:8082
#2、私库标签
docker tag myenv:1.0  xx.xx.xx.xx:8082/myenv
#3、推送镜像到私有仓库
docker push xx.xx.xx.xx:8082/myenv
#4、查看私有仓库镜像,验证是否推送成功
curl xx.xx.xx.xx:8082/v2/_catalog
#5、拉取私有仓库镜像
docker pull xx.xx.xx.xx:8082/myenv
  1. 在CentOS上搭建docker私服

使用harbor

使用harbor

安装Docker CE

使用存储库进行安装

1.更新apt软件包索引:

$ sudo apt-get update

2.装软件包以允许apt通过HTTPS使用存储库:

$ sudo apt-get install 
    apt-transport-https 
    ca-certificates 
    curl 
    software-properties-common

3.添加Docker的官方GPG密钥:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4.使用以下命令来设置稳定的存储库

$ sudo add-apt-repository 
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu 
   $(lsb_release -cs) 
   stable"

5.更新apt软件包索引。

$ sudo apt-get update

7.安装最新版本的Docker CE

$ sudo apt-get install docker-ce

8.通过运行hello-world 映像验证是否正确安装了Docker CE

$ sudo docker run hello-world

三、私有仓库高级配置(HTTPS 认证)

    下面,我们将要搭建的私有仓库地址为 docker.domain.com,使用 openssl 自行签发 docker.domain.com 的站点 SSL 证书,并用 Docker Compose 搭建一个拥有权限认证、TLS 的私有仓库。

    由于是在 Centos 7 下玩的 Docker ,首先要解决 Docker Compose 安装的问题。

2.1 安装docker-registry

创建用户

harbor已经创建成功。现在我们来开始创建一个用户。
澳门新萄京官方网站 18

创建用户

harbor已经创建成功。现在我们来开始创建一个用户。
澳门新萄京官方网站 19

Docker Compose

1、安装 Docker Compose

x86_64 架构的 Linux 建议安装如下:

    从 官方 GitHub Release 处选择最新版本安装,类似如下~

#1、直接下载对应的二进制包
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod  x /usr/local/bin/docker-compose
#2、添加环境变量
export PATH=$PATH:/usr/local/bin/docker-compose

#卸载
sudo rm /usr/local/bin/docker-compose

ARM 架构的 Linux 建议安装如下:

#1、检查linux有没有安装python-pip包
 pip -V
#2、执行安装 epel-release 包
 yum -y install epel-release
#3、执行安装 python-pip 包
 yum install python-pip
#4、对安装好的pip进行升级
 pip install --upgrade pip
#5、再次验证pip是否安装成功
 pip -V
#6、安装Docker-Compose(失败的话可重复多次)
 pip --default-timeout=300 install -U docker-compose --ignore-installed requests
#7、检查docker-compose 安装
 docker-compose -version

#卸载
sudo pip uninstall docker-compose
yum -y remove python-pip
yum -y remove epel-release

bash 补全命令 :sudo curl -L -o /etc/bash_completion.d/docker-compose

 

直接用容器来执行Docker Compose:

curl -L https://github.com/docker/compose/releases/download/1.22.0/run.sh > /usr/local/bin/docker-compose
chmod  x /usr/local/bin/docker-compose

方法有多种,直接运行下面的命令:

创建项目

创建项目,并添加用户
澳门新萄京官方网站 20

创建项目

创建项目,并添加用户
澳门新萄京官方网站 21

安装 Compose

Linux上,您可以从GitHub上的Compose存储库版本页面下载Docker Compose二进制文件。按照链接中的说明进行操作,即curl在终端中运行命令以下载二进制文件。这些一步一步的说明也包括在下面。

GitHub上的Compose存储库版本页面下载地址:https://github.com/docker/compose/releases

1.运行此命令下载最新版本的Docker Compose

sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

2.对二进制文件应用可执行权限:

sudo chmod  x /usr/local/bin/docker-compose

2、HTTPS 认证

    因为对 HTTPS 的那些证书认证什么的,着实没有什么大的概念,就不在这里大夸其辞了。国内各大云服务商均提供了免费的站点证书,常见的做法是:申请个域名,绑定服务器IP,然后下载云服务提供的证书,添加认证即可。

    这里的做法是使用 openssl 自行签发 docker.domain.com 的站点 SSL 证书,也是看着步骤,一步步傻瓜式操作下来的,就不献丑了。具体步骤可以参考:https://yeasy.gitbooks.io/docker_practice/content/repository/registry_auth.html

    至于坑,那还是有的,比如上面的 Docker Compose 安装就折腾了好久。另外需要注意的是,最后生成的文件都要放在 /etc/docker 相关目录下,目录结构如下:

澳门新萄京官方网站 22

澳门新萄京官方网站 23

 

参考资料:《Docker — 从入门到实践》

# docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /opt/data/registry:/tmp/registry  -p 5000:5000 registry

上传镜像

首先使用docker login命令登录:

#登录
robin:~ robin$ sudo docker login shepherd618.cn
Username: admin
Password:
Login Succeeded
#查看本地镜像
robin:docker_demo robin$ sudo docker images
Password:
REPOSITORY          TAG                IMAGE ID            CREATED            SIZE
docker_demo        latest              fdd994bee741        19 seconds ago      283MB
node                8.9-alpine          406f227b21f5        2 weeks ago        68.1MB
#给dcoker_demo新增tag
robin:docker_demo robin$ sudo docker tag docker_demo shepherd618.cn/test/demo
#push images
robin:docker_demo robin$ docker push shepherd618.cn/test/demo
The push refers to repository [shepherd618.cn/test/demo]
f8387a884f73: Layer already exists
d74f9d9e7013: Pushed
f846841ed47f: Layer already exists
0198944a9875: Layer already exists
9dfa40a0da3b: Layer already exists
latest: digest: sha256:5b33acc5edf6f48cbd8e7ccd216daa4a7da1ebd4871fbc68bc2517136f1ccf44 size: 1374

然后打开harbor,会看到刚刚上传的images和操作日志
澳门新萄京官方网站 24

当我们需要用到这个images的时候可以通过上面给的pull命令下载到本地。到此整个安装过程结束。

本文永久更新链接地址

澳门新萄京官方网站 25

上传镜像

首先使用docker login命令登录:

#登录
robin:~ robin$ sudo docker login shepherd618.cn
Username: admin
Password:
Login Succeeded
#查看本地镜像
robin:docker_demo robin$ sudo docker images
Password:
REPOSITORY          TAG                IMAGE ID            CREATED            SIZE
docker_demo        latest              fdd994bee741        19 seconds ago      283MB
node                8.9-alpine          406f227b21f5        2 weeks ago        68.1MB
#给dcoker_demo新增tag
robin:docker_demo robin$ sudo docker tag docker_demo shepherd618.cn/test/demo
#push images
robin:docker_demo robin$ docker push shepherd618.cn/test/demo
The push refers to repository [shepherd618.cn/test/demo]
f8387a884f73: Layer already exists
d74f9d9e7013: Pushed
f846841ed47f: Layer already exists
0198944a9875: Layer already exists
9dfa40a0da3b: Layer already exists
latest: digest: sha256:5b33acc5edf6f48cbd8e7ccd216daa4a7da1ebd4871fbc68bc2517136f1ccf44 size: 1374

然后打开harbor,会看到刚刚上传的images和操作日志
澳门新萄京官方网站 26

当我们需要用到这个images的时候可以通过上面给的pull命令下载到本地。到此整个安装过程结束。

本文永久更新链接地址:

为什么要搭建私有镜像仓库 对于一个刚刚接触Docker的人来说,官方的Docker hub是用于管理公共镜像。...

测试安装

$ docker-compose --version
docker-compose version 1.18.0, build 8dd22a9

# docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /opt/data/registry:/tmp/registry  -p 5000:5000 registry

Python 环境

# git clone

安装 Python

apt-get install python3
apt-get install python-minimal
apt-get install python3-setuptools
easy_install3 pip
apt-get install python-argparse

# cd docker-registry && mkdir -p /opt/data/registry

测试安装

$ python --version
Python 2.7.13

$ pip -V
pip 9.0.1 from /usr/local/lib/python3.5/dist-packages/pip-9.0.1-py3.5.egg (python 3.5)

# docker build -t "local-sean" .

域名证书

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书. https://github.com/Neilpang/acme.sh

给acme.sh组织赞助:Acknowledgments

很简单就两个步骤:

  • 安装 acme.sh
  • 生成证书,及验证证书

build完成后,就可以运行这个docker-registry

安装 acme.sh

安装很简单, 一个命令:

$ curl  https://get.acme.sh | sh

这条命令,会做的事情

1.把 acme.sh 安装到你的 home 目录下:
并创建 一个 bashalias, 方便你的使用: acme.sh=~/.acme.sh/acme.sh

2.自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

我们先配置自己的config.yml文件,第一种方法是直接在run的时候指定变量

生成证书

如果你还没有运行任何 web 服务, 且80 端口是空闲的, 那么 acme.sh 能假装自己是一个webserver, 临时听在80 端口, 完成验证:

注意:如果您使用的时候,请把,hub.ymq.io 替换成自己域名,此域名需要dns 解析到安装私有仓库的服务器IP

$ cd ~/.acme.sh/
$ apt-get install socat
$ sh acme.sh  --issue -d hub.ymq.io   --standalone

如果看到如下信息,说明证书验证并生成成功,证书生成位置在:/root/.acme.sh/hub.ymq.io/

Success
Verify finished, start to sign.
Cert success.
-----BEGIN CERTIFICATE-----

[Wed Jan  3 14:36:25 UTC 2018] Standalone mode.
[Wed Jan  3 14:36:25 UTC 2018] Registering account
[Wed Jan  3 14:36:27 UTC 2018] Registered
[Wed Jan  3 14:36:27 UTC 2018] ACCOUNT_THUMBPRINT='7TpUIE5N--hq2nhk2ruKmHBfgKB-LX-pBCkWzzmHzVM'
[Wed Jan  3 14:36:27 UTC 2018] Creating domain key
[Wed Jan  3 14:36:28 UTC 2018] The domain key is here: /root/.acme.sh/hub.ymq.io/hub.ymq.io.key
[Wed Jan  3 14:36:28 UTC 2018] Single domain='hub.ymq.io'
[Wed Jan  3 14:36:28 UTC 2018] Getting domain auth token for each domain
[Wed Jan  3 14:36:28 UTC 2018] Getting webroot for domain='hub.ymq.io'
[Wed Jan  3 14:36:28 UTC 2018] Getting new-authz for domain='hub.ymq.io'
[Wed Jan  3 14:36:29 UTC 2018] The new-authz request is ok.
[Wed Jan  3 14:36:29 UTC 2018] Verifying:hub.ymq.io
[Wed Jan  3 14:36:29 UTC 2018] Standalone mode server
[Wed Jan  3 14:36:34 UTC 2018] Success
[Wed Jan  3 14:36:34 UTC 2018] Verify finished, start to sign.
[Wed Jan  3 14:36:35 UTC 2018] Cert success.
-----BEGIN CERTIFICATE-----
MIIE9zCCA9 gAwIBAgISA6WV4ZFi6lr/kngVGx7/FoPMMA0GCSqGSIb3DQEBCwUA
******************************************
...

-----END CERTIFICATE-----
[Wed Jan  3 14:36:35 UTC 2018] Your cert is in  /root/.acme.sh/hub.ymq.io/hub.ymq.io.cer 
[Wed Jan  3 14:36:35 UTC 2018] Your cert key is in  /root/.acme.sh/hub.ymq.io/hub.ymq.io.key 
[Wed Jan  3 14:36:35 UTC 2018] The intermediate CA cert is in  /root/.acme.sh/hub.ymq.io/ca.cer 
[Wed Jan  3 14:36:35 UTC 2018] And the full chain certs is there:  /root/.acme.sh/hub.ymq.io/fullchain.cer 

# cp config/config_sample.yml /opt/data/registry/config.yml

Harbor 仓库

前提条件:域名的dns 解析到安装私有仓库的服务器IP

# vi /opt/data/registry/config.yml

复制证书

1.创建一个certs目录。

$ cd /opt/
$ mkdir -p certs

2.移动证书到certs目录。

$ cd ~/.acme.sh/
$ sh acme.sh  --installcert  -d  hub.ymq.io   
        --key-file   /opt/certs/hub.ymq.io.key 
        --fullchain-file /opt/certs/fullchain.cer

##这里可以设置本地存储SETTINGS_FLAVOR=dev,local STORAGE_PATH:/tmp/registry等待

Harbor 下载

下载Harbour版本的二进制文件 https://github.com/vmware/harbor/releases

目前最新版本 V1.3.0

$ wget https://storage.googleapis.com/harbor-releases/harbor-online-installer-v1.3.0.tgz
$ tar -zxvf harbor-offline-installer-v1.3.0-rc4.tgz 

# docker run -d -v /opt/data/registry:/tmp/registry -p 5000:5000 -e  DOCKER_REGISTRY_CONFIG=/tmp/registry/config.yml registry

Harbor 配置

$ cd harbor
$ vim harbor.cfg

只需修改如下内容

hostname = hub.ymq.io
ui_url_protocol = https
customize_crt = off
ssl_cert = /opt/certs/fullchain.cer
ssl_cert_key = /opt/certs/hub.ymq.io.key

参数解释

hostname = 主机名:目标主机的主机名,用于访问UI和注册表服务。它应该是目标机器的IP地址或完全限定的域名(FQDN),例如198.13.48.154或 `hub.ymq.io`。不要使用localhost或127.0.0.1为主机名 - 注册表服务需要由外部客户端访问!
ui_url_protocol = (http或https,默认为http)用于访问UI和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为https。默认情况下,这是http。
customize_crt = (打开或关闭,默认打开)打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。当由外部来源提供密钥和根证书时,将此属性设置为off
ssl_cert =SSL证书的路径,仅当协议设置为https时才应用
ssl_cert_key = SSL密钥的路径,仅当协议设置为https时才应用

默认安装

$ sudo ./install.sh

docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /db/docker-images:/tmp/registry -p 5000:5000 registry

Harbor 登录

如果一切正常,你应该可以打开浏览器访问http://hub.ymq.io的管理门户(将hub.ymq.io更改为在你的配置中的主机名harbor.cfg)。请注意,默认的管理员用户名/密码是admin / Harbor12345

登录管理员门户并创建一个新项目,例如myproject。然后,您可以使用docker命令来登录和推送图像(默认情况下,注册表服务器在端口80上侦听):

澳门新萄京官方网站 27

澳门新萄京官方网站 28

新项目 myproject

澳门新萄京官方网站 29

查看项目列表 myproject

2.2 客户端使用

测试服务

要从私服上获取镜像或向私服提交镜像,现在变得非常简单,只需要在仓库前面加上私服的地址和端口,形如172.29.88.222:5000/centos6。注意,这里可以选择不使用IP,而是用hostname,如registry.domain.com:5000,但不能仅用不带.的主机名registry,docker会认为registry是用户名,建议使用带域名的hostname加port来表示。

登录仓库

Username:admin
Password:Harbor12345

$ docker login hub.ymq.io
Username (testuser): admin
Password: 输入仓库密码
Login Succeeded

于是在另外一台要使用docker的主机上就可以通过这台私服拉取和推送镜像了:

拉取镜像

Docker Hub拉取 ubuntu:16.04 镜像

$ docker pull ubuntu:16.04

从私服上搜索存在哪些可用镜像

标记镜像

将镜像标记为 hub.ymq.io/myproject,在推送时,Docker会将其解释为仓库的位置。

$ docker tag  ubuntu:16.04 hub.ymq.io/myproject/my-ubuntu

# curl -X GET

推送镜像

将镜像推送到本地镜像标记的仓库hub.ymq.io/myproject/

$ docker push hub.ymq.io/myproject/my-ubuntu

澳门新萄京官方网站 30

推送镜像列表 myproject

在镜像列表:可以删除,复制,查看日志,及其他操作

{"num_results": 2, "query": "", "results": [{"description": "", "name": "library/centos6"}, {"description": "", "name": "library/nginx"}]}

删除镜像

删除本地缓存ubuntu:16.04hub.ymq.io/myproject/my-ubuntu 镜像,以便您可以测试从私有仓库中拉取镜像。这不会hub.ymq.io/myproject/my-ubuntu 从您的私有仓库中删除镜像。

$ docker image remove ubuntu:16.04
$ docker image remove hub.ymq.io/myproject/my-ubuntu

按条件搜索nginx

拉取镜像

拉取 hub.ymq.io 仓库的 /myproject/my-ubuntu 镜像。

root@souyunku:~# docker pull hub.ymq.io/myproject/my-ubuntu
Using default tag: latest
latest: Pulling from myproject/my-ubuntu
50aff78429b1: Pull complete 
f6d82e297bce: Pull complete 
275abb2c8a6f: Pull complete 
9f15a39356d6: Pull complete 
fc0342a94c89: Pull complete 
Digest: sha256:f871d0805ee3ce1c52b0608108dbdf1b447a34d22d5c7278a3a9dd78fc12c663
Status: Downloaded newer image for hub.ymq.io/myproject/my-ubuntu:latest

# curl -X GET

查看镜像

root@souyunku:~# docker images hub.ymq.io/myproject/my-ubuntu
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
hub.ymq.io/myproject/my-ubuntu   latest              00fd29ccc6f1        3 weeks ago         111MB

拉取image到本地

操作日志

澳门新萄京官方网站 31

镜像操作日志 myproject

官方文档:
https://github.com/vmware/harbor/blob/master/docs/installation_guide.md

docker pull library/centos6

Docker Compose

Docker ComposeDocker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用。

一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器

Docker Compose 的搭建,及使用,发布 spring boot整合redis做访问计数demo,实战 WordPress,正在整理中,会在下篇文章体现,关注公众号:“搜云库” 我会在微信公众号首发

## 本地对份镜像启动起来,形成container

Contact

  • 作者:鹏磊
  • 出处:http://www.ymq.io
  • Email:admin@souyunku.com
  • 版权归作者所有,转载请注明出处
  • Wechat:关注公众号,搜云库,专注于开发技术的研究与知识分享

澳门新萄京官方网站 32

![3.png]()

## 给container去另外一个名字

# docker tag 68edf809afe7 registry.domain.com:5000/centos6-test

## 最后将新的docker images推送到私服上

docker push registry.domain.com:5000/centos6-test

第一次push到私服上时会提示用户名、密码和邮箱,创建即可。也可以在docker私服端加入认证机制。

  1. 加入nginx认证

(请在实际操作以前,先阅读完本节,再确定是否在前端加入nginx)

3.1 安装及配置nginx

从上面的过程可以看到,除非防火墙限制,否则任何主机可以创建账号并想私服推送镜像,更安全的做法是在外层加入登录认证机制。

最好安装1.4.x版本,不然下面的有些配置可能会不兼容

# yum install nginx

创建两个登录用户

# htpasswd -c /etc/nginx/docker-registry.htpasswd sean

New password:

Re-type new password:

Adding password for user sean

# htpasswd /etc/nginx/docker-registry.htpasswd itsection

为了让nginx使用这个密码文件,并且转发8080端口的请求到Docker Registry,新增nginx配置文件

vi /etc/nginx/sites-enabled/docker-registry:

# For versions of Nginx > 1.3.9 that include chunked transfer encoding support

# Replace with appropriate values where necessary

upstream docker-registry {

server localhost:5000;

}

server {

listen 8080;

server_name sean.domain.com;  -- your registry server_name

# ssl on;

# ssl_certificate /etc/ssl/certs/docker-registry;

# ssl_certificate_key /etc/ssl/private/docker-registry;

proxy_set_header Host      $http_host;  # required for Docker client sake

proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

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

# required to avoid HTTP 411: see Issue #1486 ()

chunked_transfer_encoding on;

location / {

# let Nginx know about our auth file

auth_basic              "Restricted";

auth_basic_user_file    docker-registry.htpasswd;

proxy_pass ;

}

location /_ping {

auth_basic off;

proxy_pass ;

}

location /v1/_ping {

auth_basic off;

proxy_pass ;

}

}

让nginx来使用这个virtual-host

# ln -s /etc/nginx/sites-enabled/docker-registry /etc/nginx/conf.d/docker-registry.conf

重启nginx来激活虚拟主机的配置

# service nginx restart

3.2 加入认证后使用docker-registry

此时主机的5000端口应该通过防火墙禁止访问(或者在docker run端口映射时只监听回环接口的IP -p 127.0.0.1:5000:5000)。

# curl localhost:5000

"docker-registry server (dev) (v0.8.1)"

如果直接访问访问将得到未授权的信息:

# curl localhost:8080401 Authorization Required

nginx/1.4.7

带用户认证的docker-registry:

# curl

{"num_results": 2, "query": "", "results": [{"description": "", "name": "library/centos6"}, {"description": "", "name": "library/nginx"}]}

# docker login registry.domain.com:8080

Username: sean

Password:

Email: zhouxiao@domain.com

Login Succeeded

# docker pull registry.domain.com:8080/library/centos6

不出意外的话,上面的docker pull会失败:

# docker pull registry.domain.com:8080/library/centos6

Pulling repository registry.domain.com:8080/library/centos6

2014/11/11 21:00:25 Could not reach any registry endpoint

# docker push registry.domain.com:8080/ubuntu:sean

The push refers to a repository [registry.domain.com:8080/ubuntu] (len: 1)

Sending image list

Pushing repository registry.domain.com:8080/ubuntu (1 tags)

2014/11/12 08:11:32 HTTP code 401, Docker will not send auth headers over HTTP.

nginx日志

2014/11/12 07:03:49 [error] 14898#0: *193 no user/password was provided for basic

authenticatGET /v1/repositories/library/centos6/tags HTTP/1.1", host: "registry.domain.com:8080"

本文后的第1篇参考文档没有出现这个问题,但评论中有提及。

有人说是backend storage的问题,这里是本地存储镜像,不应该。经过查阅大量资料,并反复操作验证,是docker-registry版本的问题。从v0.10.0开始,docker login虽然Succeeded,但pull或push的时候,~/.dockercfg下的用户登录信息将不允许通过HTTP明文传输。(如果你愿意可以查看v0.10.0的源码 registry.go,在分支v0.9.1及以前是没有HTTP code 401, Docker will not send auth headers over HTTP的)

目前的办法三个:

撤退,这就是为什么先说明在操作前线查看到这的原因了

换成v0.9.1及以下版本。现在都v1.3.1了,我猜你不会这么做

修改源码session.go,去掉相应的判断行,然后git下来重新安装。我猜你更不会这么做

安装SSL证书,使用HTTPS传输。这是明智的选择,新版本docker也推荐我们这么做,往下看。

3.3 为nginx安装ssl证书

首先打开nginx配置文件中ssl的三行注释

# vi /etc/nginx/conf.d/docker-registry.conf

...

server {

listen 8000;

server_name registry.domain.com;

ssl on;

ssl_certificate /etc/nginx/ssl/nginx.crt;

ssl_certificate_key /etc/nginx/ssl/nginx.key;

保存之后,nginx会分别从/etc/nginx/ssl/nginx.crt和/etc/nginx/ssl/nginx.key读取ssl证书和私钥。如果你自己愿意花钱买一个ssl证书,那就会变得非常简单,把证书和私钥拷贝成上面一样即可。关于SSL以及签署ssl证书,请参考其他文章。

这里我们自签署一个ssl证书,把当前系统作为(私有)证书颁发中心(CA)。

创建存放证书的目录

1 # mkdir /etc/nginx/ssl

确认CA的一些配置文件

# vi /etc/pki/tls/openssl.cnf

...

[ CA_default ]

dir            = /etc/pki/CA          # Where everything is kept

certs          = $dir/certs            # Where the issued certs are kept

crl_dir        = $dir/crl              # Where the issued crl are kept

database        = $dir/index.txt        # database index file.

#unique_subject = no                    # Set to 'no' to allow creation of

# several ctificates with same subject.

new_certs_dir  = $dir/newcerts        # default place for new certs.

certificate    = $dir/cacert.pem      # The CA certificate

serial          = $dir/serial          # The current serial number

crlnumber      = $dir/crlnumber        # the current crl number

# must be commented out to leave a V1 CRL

crl            = $dir/crl.pem          # The current CRL

private_key    = $dir/private/cakey.pem # The private key

RANDFILE        = $dir/private/.rand    # private random number file

...

default_days    = 3650                  # how long to certify for

...

[ req_distinguished_name ]

countryName                    = Country Name (2 letter code)

countryName_default            = CN

countryName_min                = 2

countryName_max                = 2

stateOrProvinceName            = State or Province Name (full name)

stateOrProvinceName_default    = GD

...[ req_distinguished_name ]部分主要是颁证时一些默认的值,可以不动

(1) 生成根密钥

# cd /etc/pki/CA/

# openssl genrsa -out private/cakey.pem 2048

为了安全起见,修改cakey.pem私钥文件权限为600或400,也可以使用子shell生成( umask 077; openssl genrsa -out private/cakey.pem 2048 ),下面不再重复。

(2) 生成根证书

# openssl req -new -x509 -key private/cakey.pem -out cacert.pem

会提示输入一些内容,因为是私有的,所以可以随便输入,最好记住能与后面保持一致。上面的自签证书cacert.pem应该生成在/etc/pki/CA下。

(3) 为我们的nginx web服务器生成ssl密钥

# cd /etc/nginx/ssl

# openssl genrsa -out nginx.key 2048

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

(4) 为nginx生成证书签署请求

# openssl req -new -key nginx.key -out nginx.csr

...

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:GD

Locality Name (eg, city) []:SZ

Organization Name (eg, company) [Internet Widgits Pty Ltd]:COMPANY

Organizational Unit Name (eg, section) []:IT_SECTION

Common Name (e.g. server FQDN or YOUR name) []:your.domain.com

Email Address []:

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

...

同样会提示输入一些内容,其它随便,除了Commone Name一定要是你要授予证书的服务器域名或主机名,challenge password不填。

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

# openssl ca -in nginx.csr -out nginx.crt

上面签发过程其实默认使用了-cert cacert.pem -keyfile cakey.pem,这两个文件就是前两步生成的位于/etc/pki/CA下的根密钥和根证书。

到此我们已经拥有了建立ssl安全连接所需要的所有文件,并且服务器的crt和key都位于配置的目录下,唯有根证书cacert.pem位置不确定放在CentOS6下的哪个地方。

经验证以下几个位置不行:(Adding trusted root certificates to the server)

/etc/pki/ca-trust/source/anchors、/etc/pki/ca-trust/source、/etc/pki/ca-trust/extracted、

/etc/pki/ca-trust/extracted/pem/、/etc/pki/tls/certs/cacert.crt

都会报错:

# docker login

Username (sean): sean

2014/11/14 02:32:48 Error response from daemon: Invalid Registry endpoint: Get : x509: certificate signed by unknown authority

# curl

curl: (60) Peer certificate cannot be authenticated with known CA certificates

More details here:

curl performs SSL certificate verification by default, using a "bundle"

of Certificate Authority (CA) public keys (CA certs). If the default

bundle file isn't adequate, you can specify an alternate file

using the --cacert option.

If this HTTPS server uses a certificate signed by a CA represented in

the bundle, the certificate verification probably failed due to a

problem with the certificate (it might be expired, or the name might

not match the domain name in the URL).

If you'd like to turn off curl's verification of the certificate, use

the -k (or --insecure) option.

(6) 目前让根证书起作用的只发现一个办法:

# cp /etc/pki/tls/certs/ca-bundle.crt{,.bak}    备份以防出错

# cat /etc/pki/CA/cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt

# curl

"docker-registry server (dev) (v0.8.1)"

将cacert.pem根证书追加到ca-bundle.crt后一定要重启docker后台进程才行。

如果docker login依然报错certificate signed by unknown authority,参考Running Docker with https,启动docker后台进程时指定信任的CA根证书:

# docker -d --tlsverify --tlscacert /etc/pki/CA/cacert.pem或者将cacert.pem拷贝到~/.docker/ca.pem# mkdir ~/.docker && cp /etc/pki/CA/cacert.pem ~/.docker/ca.pem

# docker -d

最好重启一下registry# docker restart

上面用“如果”是因为一开始总提示certificate signed by unknown authority,有人说将根证书放在/etc/docker/certs.d下,还有人说启动docker daemon收加入--insecure-registry .. 但终究是因为版本差异不成功。但后来又奇迹般的不需要--tlscacert就好了。

这个地方挣扎了很久,重点关注一下这个下面几个issue:

(7) 最终搞定:

# docker login

Username: sean

Password:

Email: zhouxiao@domain.com

Login Succeeded

# curl

"docker-registry server (dev) (v0.8.1)"

# docker push registry.domain.com:8000/centos6:test_priv

The push refers to a repository [registry.domain.com:8000/centos6] (len: 1)

Sending image list

Pushing repository registry.domain.com:8000/centos6 (1 tags)

511136ea3c5a: Image successfully pushed

5b12ef8fd570: Image successfully pushed

68edf809afe7: Image successfully pushed

40627956f44c: Image successfully pushed

Pushing tag for rev [40627956f44c] on {

但还有一个小问题没解决,虽然已经可以正常使用,但每次请求在nginx的error.log中还是会有[error] 8299#0: *27 no user/password was provided for basic authentication,应该是这个版本docker暂未解决的bug。

3.3 其它问题(1) docker后台进程意外中断后,重新docker start报错

# docker start b36bd796bd3d

Error: Cannot start container b36bd796bd3d: Error getting container b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652

from driver devicemapper: Error mounting '/dev/mapper/docker-253:0-787676-b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652'

on '/var/lib/docker/devicemapper/mnt/b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652': device or resource busy

2014/11/08 15:14:57 Error: failed to start one or more containers

经分析产生这个问题的原因是做了一个操作:在docker后台进程启动的终端,继续回车后会临时退出后台进程的日志输出,我就在这个shell下使用yum安装软件包,但由于网络原因yum卡住不动,于是我就另起了一个终端kill了这个yum进程,不知为何会影响到表面已经退出前台输出的docker。解决办法是umount容器的挂载点:(见这里)

# umount /var/lib/docker/devicemapper/mnt/b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652

# service docker start  正常

能想到的另外一个办法是,启动docker后台进程时,重定向输出docker -d > /dev/null 2>&1(/var/log/docker已自动记录了一份日志)。

(2) 配置完nginx的docker-registry.conf后启动报错

# service nginx start

[emerg] 14714#0: unknown directive "upstream" in /etc/nginx/conf.d/docker-registry.conf:4

原因是nginx版本太低,一些配置指令不兼容,使用yum install nginx默认安装了1.0.x,卸载重新下载nginx-1.4.7-1.el6.ngx.x86_64.rpm安装解决。

(3) 网络设置代理问题

pull, push官网的镜像时由于GFW的原因需要设置代理,但不是http_proxy而是HTTP_PROXY,对于docker来说同时设置这两个值就会出问题,有时出于安装软件包的需要设置http_proxy,就会导致冲突。在docker-registry中如果忘记了当前哪一个在起作用,找遍所有问题都发现不了原因,而docker返回给我们的错误也难以判断。切记~

TO-DO

如何删除docker-registry的里的镜像

  1. 参考

部署自己的私有 Docker Registry [英文]

Official docker-registry README

How To Set Up a Private Docker Registry on Ubuntu 14.04

The Docker Hub and the Registry spec

via:

本文由澳门新萄京官方网站发布于澳门新萄京官方网站,转载请注明出处:澳门新萄京官方网站:Docker入门之搭建私人民居

关键词: