Docker 官方提供一个 registry 镜像来让需要的人自己搭建私有仓库。因此部署仓库的服务器需要有 Docker 环境。

简单部署

简单部署如下:

docker run -d -p 8855:5000 --name registry -v /home/server/registry/:/var/lib/registry registry

这默认是一个 http 的接口,但是 docker 客户端在 push 镜像时,默认会使用 https。为了避免搭建 https 时部署签名证书的麻烦,这里只介绍 http 接口的部署。那么,客户端要向服务器 push 镜像则需要做一些设置,编辑 /etc/default/docker 或者 /etc/sysconfig/docker 文件(不同 Linux 发行版可能会是不同的文件),写入如下配置项(注意修改对应的域名和端口):

DOCKER_OPTS="--insecure-registry myregistrydomain.com:8855"

身份认证

为了相对安全,可以给仓库加上基本的身份认证。使用 htpasswd 创建用户:

htpasswd -Bbn testuser testpassword > auth/htpasswd

如果当前系统没有 htpasswd 命令,可以使用如下方式创建用户:

docker run --entrypoint htpasswd registry:2 -Bbn testuser testpassword > auth/htpasswd

然后再用如下方式运行容器:

docker run -d -p 8855:5000 --restart=always --name registry \
  -v `pwd`/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  registry

使用 Docker Compose

Docker 官方提供了一个用于定义和运行复杂 Docker 应用的工具 docker-compose,该工具通过配置文件来管理容器。下载安装:https://github.com/docker/compose/releases.

在未指定配置文件时,docker-compose 默认使用当前目录下的 docker-compose.yml 配置文件。配置文件示例:

registry:
  restart: always
  image: registry:latest
  ports:
    - 8855:5000
  environment:
    REGISTRY_AUTH: htpasswd
    REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
    REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
  volumes:
    - ./registry:/var/lib/registry
    - ./auth:/auth

执行如下命令即可运行容器:

docker-compose up

docker-compose up -d # 后台运行

Compose 常用命令:

选项参数:

  • -f 一个非 docker-compose.yml 命名的yaml文件
  • -p 设置一个项目名称(默认是directory名)

子命令:

  • build: 构建服务
  • kill: 给服务发送特定的信号,kill -s SIGINT
  • logs: 输出日志
  • port: 输出绑定的端口
  • ps: 输出运行的容器
  • pull: pull 服务的 image
  • rm: 删除停止的容器
  • run 运行某个服务,例如 docker-compose run web python manage.py shell
  • start: 运行某个服务中存在的容器。
  • stop: 停止某个服务中存在的容器。
  • up: create + run + attach 容器到服务。
  • scale: 设置服务运行的容器数量。例如 docker-compose scale web=2 worker=3

镜像 Push 与 Pull

1、登录仓库:

docker login myregistrydomain.com:8855

2、Tag 一个镜像:

docker tag huoty/ubuntu myregistrydomain.com:8855/huayong/ubuntu

3、Push 镜像到仓库:

docker pull myregistrydomain.com:8855/huayong/ubuntu

4、从仓库中 Pull 一个镜像:

docker pull myregistrydomain.com:8855/huayong/ubuntu

Registry API

查看仓库中的镜像:

GET /v2/_catalog

查看镜像的 tag:

GET /v2/huayong/busybox/tags/list