1, 背景
在 Docker 中, 当我们执行 docker pull xxx 的时候, 可能会比较好奇, docker 会去哪儿查找并下载镜像呢?
? 它实际上是从 registry.hub.docker.com 这个地址去查找, 这就是 Docker 公司为我们提供的公共仓库, 上面的镜像, 大家都可以看到, 也可以使用. 所以, 我们也可以带上仓库地址去拉取镜像, 如: docker pull registry.hub.docker.com/library/alpine, 不过要注意, 这种方式下载的镜像的默认名称就会长一些.
? 如果要在公司中使用 Docker, 我们基本不可能把商业项目上传到公共仓库中, 那如果要多个机器共享, 又能怎么办呢?
正因为这种需要, 所以私有仓库也就有用武之地了.
? 所谓私有仓库, 也就是在本地 (局域网) 搭建的一个类似公共仓库的东西, 搭建好之后, 我们可以将镜像提交到私有仓库中. 这样我们既能使用 Docker 来运行我们的项目镜像, 也避免了商业项目暴露出去的风险.
? 下面我们用官方提供的 registry 镜像来搭建私有镜像仓库, 当然还有其它很多方法.
2, 环境
准备两台安装好 docker 的服务器:
服务端机器 (主机名为 registry):docker 私有仓库服务器, 运行 registry 容器;
测试端机器 (主机名为 node): 普通的 docker 服务器, 在这台服务器上下载一个测试镜像 busybox, 然后上传到 registry 服务器进行测试;
3, 部署 (服务端操作)
3.1 下载镜像 registry
- [[email protected] ~]# docker pull registry
- Using default tag: latest
- latest: Pulling from library/registry
- 81033e7c1d6a: Pull complete
- b235084c2315: Pull complete
- c692f3a6894b: Pull complete
- ba2177f3a70e: Pull complete
- a8d793620947: Pull complete
- Digest: sha256:672d519d7fd7bbc7a448d17956ebeefe225d5eb27509d8dc5ce67ecb4a0bce54
- Status: Downloaded newer image for registry:latest
3.2 查看镜下是否 pull 下来了
docker: 用 registry 快速搭建私有镜像仓库
- [[email protected] log]# docker images
- registry latest 2e2f252f3c88 3 months ago 33.3MB
3.3 运行 registry 容器
- [[email protected] ~]# docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
- 06a972de6218b1f1c3bf9b53eb9068dc66d147d14e18a89ab51db13e339d3dc9
参数说明
-itd: 在容器中打开一个伪终端进行交互操作, 并在后台运行;
-v: 把宿主机的 / data/registry 目录绑定 到 容器 / var/lib/registry 目录 (这个目录是 registry 容器中存放镜像文件的目录), 来实现数据的持久化;
-p: 映射端口; 访问宿主机的 5000 端口就访问到 registry 容器的服务了;
--restart=always: 这是重启的策略, 假如这个容器异常退出会自动重启容器;
--name registry: 创建容器命名为 registry, 你可以随便命名;
registry:latest: 这个是刚才 pull 下来的镜像;
3.4 测试镜像仓库中所有的镜像
- [[email protected] ~]# curl http://127.0.0.1:5000/v2/_catalog
- {
- "repositories":[]
- }
现在是空的, 因为才刚运行, 里面没有任何镜像内容.
4, 测试镜像仓库 (测试端操作)
4.1 修改下镜像源并重启 docker 服务
- [[email protected] ~]# VIM /etc/docker/daemon.JSON
- {
- "registry-mirrors": [ "https://registry.docker-cn.com"]
- }
- [[email protected] ~]# systemctl restart docker
4.1 下载 busybox 镜像
- [[email protected] ~]# docker pull busybox
- [[email protected] ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- busybox latest f6e427c148a7 36 hours ago 1.15MB
4.2 为镜像打标签
[[email protected] ~]# docker tag busybox:latest 172.18.18.90:5000/busybox:v1
格式说明: Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
busybox:lastest 这是源镜像, 也是刚才 pull 下来的镜像文件;
172.18.18.90:500/busybox:v1: 这是目标镜像, 也是 registry 私有镜像服务器的 IP 地址和端口;
查看一下打好的 tag:
docker: 用 registry 快速搭建私有镜像仓库
4.3 上传到镜像服务器
- [[email protected] ~]# docker push 172.18.18.90:5000/busybox:v1
- The push refers to repository [172.18.18.90:5000/busybox]
- Get https://172.18.18.90:5000/v2/: http: server gave HTTP response to HTTPS client
注意了, 这是报错了, 需要 https 的方法才能上传, 我们可以修改下 daemon.JSON 来解决:
- [[email protected] ~]# VIM /etc/docker/daemon.JSON
- {
- "registry-mirrors": [ "https://registry.docker-cn.com"],
- "insecure-registries": [ "172.18.18.90:5000"]
- }
添加私有镜像服务器的地址, 注意书写格式为 JSON, 有严格的书写要求, 然后重启 docker 服务:
[[email protected] ~]# systemctl restart docker
在次上传可以看到没问题 了:
- [[email protected] ~]# docker push 172.18.18.90:5000/busybox:v1
- The push refers to repository [172.18.18.90:5000/busybox]
- c5183829c43c: Pushed
- v1: digest: sha256:c7b0a24019b0e6eda714ec0fa137ad42bc44a754d9cea17d14fba3a80ccc1ee4 size: 527
4.4 测试下载镜像
上传测试没问题了, 我们接下来测试一下从 registry 服务器上下载刚才上传的 busybox 镜像, 先删除 node 主机上的镜像:
- [[email protected] ~]# docker rmi -f $(docker images -aq)
- Untagged: 172.18.18.90:5000/busybox:v1
- Untagged: 172.18.18.90:5000/[email protected]:c7b0a24019b0e6eda714ec0fa137ad42bc44a754d9cea17d14fba3a80ccc1ee4
- Untagged: busybox:latest
- Untagged: [email protected]:2107a35b58593c58ec5f4e8f2c4a70d195321078aebfadfbfb223a2ff4a4ed21
- Deleted: sha256:f6e427c148a766d2d6c117d67359a0aa7d133b5bc05830a7ff6e8b64ff6b1d1d
- Deleted: sha256:c5183829c43c4698634093dc38f9bee26d1b931dedeba71dbee984f42fe1270d
查看一下 node 主机上的镜像全部删除了:
- [[email protected] ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
然后, 从 registry 服务器上下载 busybox 镜像:
- [[email protected] ~]# docker pull 172.18.18.90:5000/busybox:v1
- v1: Pulling from busybox
- d070b8ef96fc: Pull complete
- Digest: sha256:c7b0a24019b0e6eda714ec0fa137ad42bc44a754d9cea17d14fba3a80ccc1ee4
- Status: Downloaded newer image for 172.18.18.90:5000/busybox:v1
- [[email protected] ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- 172.18.18.90:5000/busybox v1 f6e427c148a7 36 hours ago 1.15MB
列出所有镜像:
- [[email protected] ~]# curl http://10.118.156.4:5000/v2/_catalog
- {
- "repositories":["busybox"]
- }
列出 busybox 镜像有哪些 tag:
- [[email protected] ~]# curl http://10.118.156.4:5000/v2/busybox/tags/list
- {
- "name":"busybox","tags":["v1"]
- }
docker 使用 web 界面管理 Registry
1: 安装 docker-registry-Web 项目
- ------------registry-Web
- admin,123456
- docker run -it -d -p 5001:8080 --name registry-Web --link registry-srv -e REGISTRY_URL=http://10.115.142.43:5000/v2/ -e REGISTRY_TRUST_ANY_SSL=true -e REGISTRY_BASIC_AUTH="YWRtaW46MTIzNDU2Cg==" -e REGISTRY_NAME=localhost:5000 hyper/docker-registry-Web
-p 8080:8080 host 主机端口 8080 映射到 container8080
--name 起个名字, docker logs start stop 啥的就可以用了
--link 连接 registry, 可以不加, 以为下面有 registry 的 url 访问方式
-e REGISTRY_TRUST_ANY_SSL=true, 环境变量, 相信所有的 ssl, 因为我们大部分的 ssl 都是自建的哦
-e REGISTRY_BASEIC_AUTH 这个里面的值是账号以及密码的 base64 获取的, 可以通过
- echo "ops:123123123" | base64
- b3BzOjEyMzEyMzEyMwo=
获得.
-e REGISTRY_NAME, 目前看起来这个是会在页面上的显示
来源: http://www.bubuko.com/infodetail-3359836.html