环境说明:Centos 7.1 64Bit + Docker 1.9.1,仓库的存储以使用本地磁盘为例。
官方部署指南:Deploying a registry server
由于v1版本的registry要被官方废弃了,所以我们选择安装v2版本。(注:v2版本需要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
使用 htpasswd 命令生成密码文件前,需要先安装 httpd-tools 。另外 htpasswd 授权必须配合TLS一同使用,并且只支持 bcrypt 格式的密码。
创建 htpasswd 密码文件,并添加一个用户user1
$ mkdir auth $ htpasswd -cB auth/htpasswd user1
再添加一个用户user2
$ htpasswd -B htpasswd user2
$ 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
$ 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 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/ 。
$ 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
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
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