关于前端:用-Docker-部署前端你有私有镜像仓库吗

10次阅读

共计 3470 个字符,预计需要花费 9 分钟才能阅读完成。

大家好,我是杨胜利。

越来越多的前端团队抉择用 Docker 部署前端我的项目,办法是将我的项目打包成一个镜像,而后在服务端间接拉镜像启动我的项目。这种形式能够疏忽服务器环境差别,更容易做版本治理。

但咱们平时应用 Docker 拉取镜像时,默认会从 Docker Hub 这个公共仓库拉取。尽管 Docker Hub 也能够上传本人的镜像,然而上传后会对所有人凋谢,这对公司我的项目来说显然是不容许的。

为此,Docker 官网提供了工具 registry 来帮忙咱们搭建公有镜像仓库,用于治理本人的镜像。后续所有的我的项目更新、降级、回滚,都要用到这个镜像仓库。

上面具体介绍如何应用registry 搭建公有镜像仓库。

创立镜像仓库

首先确保在你要搭建公有仓库的服务器上,曾经装置好了 Docker(如何装置 Docker 这里不介绍)。

(1)应用命令拉取 registry 镜像:

$ docker pull registry

(2)建设要存储公有镜像的目录,如 /data/docker/registry

$ mkdir -vp /data/docker/registry

(3)应用以下命令,基于 registry 镜像运将容器运行起来:

$ docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /data/docker/registry:/var/lib/registry \
  registry

容器运行后会占用 5000 端口,该端口是拜访镜像仓库的入口。

(4)运行胜利后,应用以下命令测试连贯状况:

$ curl http://localhost:5000/v2/_catalog

如果返回以下后果:

{"repositories":[]}

则示意镜像仓库创立胜利。此时仓库内没有镜像,所以是一个空数组。

(5)配置 Nginx 转发

个别状况下,须要配置一个域名来转发 5000 端口。假如域名为 docker.test.com,增加一个配置文件,代码如下:

server {
  listen 80;
  server_name docker.test.com;
  charset utf-8;

  location / {
    proxy_pass http://127.0.0.1:5000;
    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

配置后,应用 nginx -s reload 命令重载配置文件,即可通过该域名拜访镜像仓库。

增加登录受权验证

上一节咱们创立了公有仓库,容许客户端将自定义镜像上传到这里。不过,公有仓库不容许公开上传、更不容许公开下载,所以还要做受权验证。

和用户登录的逻辑一样,咱们须要为公有仓库创立账号和明码,登录之后的客户端能力推送镜像。咱们应用文件的形式存储账号密码,应用 httpd:2 这个镜像来创立账号密码。

(1)在数据目录(/data/docker/registry)下新建 auth 文件夹:

$ cd /data/docker/registry && mkdir auth

(2)增加用户 testuser、明码 testpass,命令如下:

$ docker run \
  --entrypoint htpasswd \
  httpd:2 -Bbn testuser testpass > auth/htpasswd

此时会创立一个 htpasswd 文件,该文件中存储了已增加的用户账号和明码。

(3)进行之前运行的容器,而后从新运行:

$ docker stop registry
$ docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /data/docker/registry:/var/lib/registry \
  -v /data/docker/registry/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  registry:2

运行胜利后,假如仓库域名是 docker.test.com,那么在浏览器中拜访 http://docker.test.com/v2/_catalog,如果弹出登录框,让你输出账号密码,示意受权验证已失效。

增加 Web UI 治理镜像仓库

上一步通过域名拜访仓库,登录后只能看到列出的镜像名字。然而咱们须要治理镜像,比方查看版本、查看链接、删除无用镜像等,此时就须要一个 Web UI 界面来治理镜像仓库。

应用开源我的项目 docker-registry-ui 能够疾速为镜像仓库搭建 Web UI。咱们抉择最简略的动态部署形式,应用 docker-compose 将 docker-registry-ui 与 registry 关联在一起。官网 demo 能够查看 这里。

参考 demo 中的 simple.yml,咱们写一个 registry.yml,作为 docker-compose 的配置:

version: '2.0'
services:
  registry:
    image: registry:2
    environment:
      - REGISTRY_AUTH=htpasswd
      - REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
      - REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
    volumes:
      - /data/docker/registry:/var/lib/registry
      - /data/docker/registry/auth:/auth
    networks:
      - registry-ui-net

  ui:
    image: joxit/docker-registry-ui:latest
    ports:
      - 5000:80
    environment:
      - REGISTRY_TITLE=My Private Docker Registry
      - NGINX_PROXY_PASS_URL=http://registry:5000
      - SINGLE_REGISTRY=true
    depends_on:
      - registry
    networks:
      - registry-ui-net
networks:
  registry-ui-net:

这个配置将 registry 和 ui 两个服务绑成了一个利用容器,咱们能够同时启动和进行它们。执行启动命令:

$ docker-compose -f registry.yml -d

启动后,拜访 5000 端口即可 web 界面,同时 5000 也代理了 registry。也就是说。能够同时应用 5000 端口拜访 web 界面和推送 / 拉取镜像。

设置容许删除镜像

默认 registry 的镜像是不容许删除的,registry-ui 也没有提供删除的按钮。

Registry 的配置是一个 YAML 文件,它提供了十分多的默认配置(文档参考这里),是否容许删除就是一个配置项,默认如下:

storage:
  delete:
    enabled: false

因为咱们是用 docker-compose 运行的,没有 registry 配置文件,只有 registry.yml 文件,所以容许删除的配置要在 registry.yml 里定义。

registry 提供了一个配置规定,能够将配置字段大写并且用 _ 连接起来,组成一个环境变量,使配置失效。

所以容许删除的配置转换成环境变量是:

REGISTRY_STORAGE_DELETE_ENABLED=true

将该环境变量写入 registry.yml 文件中即实现了配置。如下:

services:
  registry:
    environment:
      - REGISTRY_STORAGE_DELETE_ENABLED=true

批改配置文件后重新启动容器,就能够在页面中看到删除按钮了。

最初,不论在电脑本地还是在 CI 工具中,上传镜像到该仓库时都须要登录。应用下面创立的用户名明码登录仓库,命令如下:

$ docker login -u testuser docker.test.com

其中 testuser 是用户名,docker.test.com 是镜像仓库域名,执行后输出明码即可登录胜利。之后便能够向该仓库中上传镜像了。

📣 📣 我的新书《前端开发实战派》快要出版了,关注公众号“程序员胜利”并在精选文章《我写了一本书》下评论,我会抉择 3 位敌人赠书。

正文完
 0