docker私有仓库创建(1)

首先,安装docker,这里可以根据版本来安装,从docker 1.13开始分为了docker-ce和docker-ee两个版本,一个是社区免费版,一个企业版,当然我们用的是docker-ce免费版。

然后,安装registry,用于本地docker仓库存储。

1.  系统要求

  • Artful 17.10 (Docker CE 17.11 Edge and higher only)
  • Xenial 16.04 (LTS)
  • Trusty 14.04 (LTS)

我的ubuntu系统为16.04.

2.  卸载旧版本docker    

sudo apt-get remove docker docker-engine docker.io docker-ce

3. 下载docker之前,需要先添加docker repository,这样才能从repository中下载和更新docker

  • 更新apt的包索引 sudo apt-get update
  • 下载依赖,运行apt通过https来下载
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
  • 添加docker官方的GPG的key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

        如果出错的话,可以拆成两部分来执行:

         curl -O https://packages.cloud.google.com/apt/doc/apt-key.gpg 保存一个apt-key.gpg,

         再通过apt-key add apt-key.gpg来加载。

        这里通过proxychains curl ....可以一步完成。

  • 添加stable repository命令

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

    该命令将在/etc/apt/sources.list中添加docker的repository。

  • 安装docker-ce

    sudo apt-get update && apt-get install docker-ce

    通过上面的命令安装的是docker-ce的最新版本,对于生成环境来说,我们用的更多的是指定版本下载,命令如下:

    apt-cache madison docker-ce   //先列出docker-ce的版本有哪些
    sudo apt-get install docker-ce=<VERSION> //<VERSION>对应上面的版本号
    sudo docker run hello-world  //验证是否成功
    

    例如,版本列表显示如下:

  • root@node230:/etc/apt# apt-cache madison docker-ce
     docker-ce | 17.12.1~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     docker-ce | 17.12.0~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     docker-ce | 17.09.1~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     docker-ce | 17.09.0~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     docker-ce | 17.06.2~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     docker-ce | 17.06.1~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     docker-ce | 17.06.0~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     docker-ce | 17.03.2~ce-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages

    则对应的版本如下:

  • root@node230:/etc/apt# apt-get install docker-ce=17.03.0~ce-0~ubuntu-xenial
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done

4. 安装registry

        安装完docker之后,接下来需要先下载registry镜像

        docker pull registry:2

        并通过如下命令运行registry,这里加上了-v映射到node目录,可以用于移植      

 docker run -d -v /root/my_registry:/var/lib/registry -p 5000:5000 --restart always --name registry registry:2

 问题:通过配置/etc/docker/daemon.json不生效? 

        这里牵扯到Linux系统的启动系统或叫初始化系统,简单区分一下这三大初始化系统:

  • Sysvinit: CentOS6时代, 我们最熟悉的 service docker restart 命令就出自这个系统管理; 在 Ubuntu 中的 /etc/init.d/docker restart 也是这个系统来管理的

  • Upstart: 这个初始化系统比较少见, 在 Ubuntu 上比较多见, 启动软件的方式为 restart docker 在 docker 的官方网站中, 介绍基于 Ubuntu14和15版本 docker 启动方式时, 就是使用的这个初始化系统https://docs.docker.com/engine/admin/

  • Systemd: systemd 是目前大多数 Linux 发行版默认的初始化管理系统, CentOS7+ 和 Ubuntu16+ 都是使用 Systemd 进行管理, 软件启动方式为 systemctl restart docker.service

由于是在ubuntu16.04上运行docker,故这里添加--insecure-registry时采用在/lib/systemd/system/docker.service.d/目录下新建docker.conf,因为systemd系统默认启动docker的入口文件为/lib/systemd/system/docker.service文件:

  •  当然也可以在docker.service中添加
EnvironmentFile=-/etc/default/docker
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
#并在/etc/default/docker中添加
DOCKER_OPTS="$DOCKER_OPTS --insecure-registry=192.168.0.1:5000"
  • 本文采用新建docker.conf文件的方式
    [Service]  
    ExecStart=
    ExecStart=/usr/bin/docker daemon -H fd:// --insecure-registry 192.168.40.230:5000

    注意: 同时由于docker设置了ALL_PROXY全局代理,导致docker push 不成功,需要添加NO_PROXY

    [Service]
    Environment="ALL_PROXY=socks5://192.168.40.101:1080"
    Environment="NO_PROXY=localhost,127.0.0.0/8,192.168.40.230"

附录1: 当然这里也涉及到docker的代理

         1. ubuntu14.04中配置socks5代理

  •           vim /etc/default/docker  
  •           export ALL_PROXY="socks5://192.168.40.101:1080"
  •           /etc/init.d/docker restart

         2. ubuntu16.04中配置socks5代理

  •        mkdir /lib/systemd/system/docker.service.d   
  • tee /lib/systemd/system/docker.service.d/socks5-proxy.conf <<-EOF
    [Service]
    Environment="ALL_PROXY=socks5://127.0.0.1:1080"
    EOF
  •             systemctl daemon-reload
  •              systemctl restart docker
  •              systemctl show docker --property Environment

    附录2: Systemd简单介绍

Systemd 的简介和特点

Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。systemd 和 ubuntu 的 upstart 是竞争对手,预计会取代 UpStart,实际上在作者写作本文时,已经有消息称 Ubuntu 也将采用 systemd 作为其标准的系统初始化系统。

Systemd 的很多概念来源于苹果 Mac OS 操作系统上的 launchd,不过 launchd 专用于苹果系统,因此长期未能获得应有的广泛关注。Systemd 借鉴了很多 launchd 的思想。创始人Lennart Poettering是redhat员工,但systemd不是redhat项目

同 SysVinit 和 LSB init scripts 兼容

Systemd 是一个"新来的",Linux 上的很多应用程序并没有来得及为它做相应的改变。和 UpStart 一样,systemd 引入了新的配置方式,对应用程序的开发也有一些新的要求。如果 systemd 想替代目前正在运行的初始化系统,就必须和现有程序兼容。任何一个 Linux 发行版都很难为了采用 systemd 而在短时间内将所有的服务代码都修改一遍。

Systemd 提供了和 Sysvinit 以及 LSB initscripts 兼容的特性。系统中已经存在的服务和进程无需修改。这降低了系统向 systemd 迁移的成本,使得 systemd 替换现有初始化系统成为可能。

更快的启动速度

Systemd 提供了比 UpStart 更激进的并行启动能力,采用了 socket / D-Bus activation 等技术启动服务。一个显而易见的结果就是:更快的启动速度。

为了减少系统启动时间,systemd 的目标是:

  • 尽可能启动更少的进程
  • 尽可能将更多进程并行启动

同样地,UpStart 也试图实现这两个目标。UpStart 采用事件驱动机制,服务可以暂不启动,当需要的时候才通过事件触发其启动,这符合第一个设计目标;此外,不相干的服务可以并行启动,这也实现了第二个目标。

Systemd 采用 Linux 的 Cgroup 特性跟踪和管理进程的生命周期

init 系统的一个重要职责就是负责跟踪和管理服务进程的生命周期。它不仅可以启动一个服务,也必须也能够停止服务。这看上去没有什么特别的,然而在真正用代码实现的时候,您或许会发现停止服务比一开始想的要困难。

服务进程一般都会作为精灵进程(daemon)在后台运行,为此服务程序有时候会派生(fork)两次。在 UpStart 中,需要在配置文件中正确地配置 expect 小节。这样 UpStart 通过对 fork 系统调用进行计数,从而获知真正的精灵进程的 PID 号。

为了处理这类问题,UpStart 通过 strace 来跟踪 fork、exit 等系统调用,但是这种方法很笨拙,且缺乏可扩展性。systemd 则利用了 Linux 内核的特性即 CGroup 来完成跟踪的任务。当停止服务时,通过查询 CGroup,systemd 可以确保找到所有的相关进程,从而干净地停止服务。

CGroup 已经出现了很久,它主要用来实现系统资源配额管理。CGroup 提供了类似文件系统的接口,使用方便。当进程创建子进程时,子进程会继承父进程的 CGroup。因此无论服务如何启动新的子进程,所有的这些相关进程都会属于同一个 CGroup,systemd 只需要简单地遍历指定的 CGroup 即可正确地找到所有的相关进程,将它们一一停止即可。

启动挂载点和自动挂载的管理

传统的 Linux 系统中,用户可以用/etc/fstab 文件来维护固定的文件系统挂载点。这些挂载点在系统启动过程中被自动挂载,一旦启动过程结束,这些挂载点就会确保存在。这些挂载点都是对系统运行至关重要的文件系统,比如 HOME 目录。和 sysvinit 一样,Systemd 管理这些挂载点,以便能够在系统启动时自动挂载它们。Systemd 还兼容/etc/fstab 文件,您可以继续使用该文件管理挂载点。

有时候用户还需要动态挂载点,比如打算访问 DVD 内容时,才临时执行挂载以便访问其中的内容,而不访问光盘时该挂载点被取消(umount),以便节约资源。传统地,人们依赖 autofs 服务来实现这种功能。

Systemd 内建了自动挂载服务,无需另外安装 autofs 服务,可以直接使用 systemd 提供的自动挂载管理能力来实现 autofs 的功能。

https://www.ibm.com/developerworks/cn/linux/1407_liuming_init3/index.html

猜你喜欢

转载自my.oschina.net/u/3433152/blog/1648276
今日推荐