签到成功

知道了

CNDBA社区CNDBA社区

Docker 搭建私有仓库

2020-03-29 11:00 1973 0 原创 Docker
作者: dave

Docker 中有三个重要的概念:仓库、镜像、容器。 仓库分公共仓库和私有仓库。 公共仓库就如Docker Hub。 但如果是公司内部使用的环境,使用公共仓库就不太方便,此时就可以搭建私有仓库。 私有仓库的搭建也很简单,因为官方提供了docker-registry组件,直接安装即可。 http://www.cndba.cn/cndba/dave/article/4103

相关的基础操作操作可以参考如下博客:

Linux 7.7 安装 Docker
https://www.cndba.cn/dave/article/4100
Redhat 7.7 系统上 Docker 安装 MySQL
https://www.cndba.cn/dave/article/4102
Docker 配置国内源
https://www.cndba.cn/dave/article/4101

我们这里有2台机器:

1.192.168.74.203: docker 私有仓库服务器
2.192.168.74.202: 普通docker 服务器

1 docker仓库服务器上安装registry

初始化并启动镜像:

[root@www.cndba.cn ~]# docker run -d -v /opt:/var/lib/registry -p 5000:5000 --restart=always --privileged=true --name registry registry
Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
486039affc0a: Pull complete
ba51a3b098e6: Pull complete
8bb4c43d6c8e: Pull complete
6f5f453e5f2d: Pull complete
42bc10b72f42: Pull complete
Digest: sha256:7d081088e4bfd632a88e3f3bcd9e007ef44a796fddfe3261407a3f9f04abe1e7
Status: Downloaded newer image for registry:latest
6ae59667de8a96374d1db0d0740e91d5a910db00db6d0902a98cf565989b484b
[root@www.cndba.cn ~]#

我们这里没有提前pull 下载镜像,docker run 在没有镜像的情况下会自动下载。

[root@www.cndba.cn ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
registry            latest              708bc6af7e5e        2 months ago        25.8MB
[root@www.cndba.cn ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
6ae59667de8a        registry            "/entrypoint.sh /etc…"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp   registry
[root@www.cndba.cn ~]#

容器启动正常,对外提供服务通过5000端口映射到docker-registry的5000端口。 这里我们配置了数据卷,将私有仓库的镜像保存到了本地的/opt/docker/registry目录。 注意这里只需要指定最上级目录,docker/registry 会自动生成。

[root@www.cndba.cn ~]# curl -X GET http://127.0.0.1:5000/v2/_catalog
{"repositories":[]}
[root@www.cndba.cn ~]#

这里curl的命令收到的响应是个对象,其中repositories对应的值是空的json数组,表示目前仓库里还没有镜像。

http://www.cndba.cn/cndba/dave/article/4103

2 配置支持http 协议推送

正常情况下,应用服务器推送镜像到仓库用的是https,如果不修改,push推送镜像时会报错。

The push refers to repository [192.168.74.203:5000/tomcat]
Get https://192.168.74.203:5000/v2/: http: server gave HTTP response to HTTPS client

这里可以直接需要修改docker的启动参数,支持http协议工作。在2台服务器上都配置。

直接在/etc/docker/daemon.json文件中添加:”insecure-registries”:[“192.168.74.203:5000”]。http://www.cndba.cn/cndba/dave/article/4103


[root@www.cndba.cn ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"],
"insecure-registries":["192.168.74.203:5000"]
}
[root@www.cndba.cn ~]#

然后重启docker:

[root@www.cndba.cn ~]# systemctl daemon-reload
[root@www.cndba.cn ~]# systemctl restart docker
[root@www.cndba.cn ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
6ae59667de8a        registry            "/entrypoint.sh /etc…"   9 minutes ago       Up 4 seconds        0.0.0.0:5000->5000/tcp   registry
[root@www.cndba.cn ~]#

3 推送镜像到私有仓库

我们在普通的docker 机器上先下载一个镜像:

[root@www.cndba.cn ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
50e431f79093: Pull complete
dd8c6d374ea5: Pull complete
c85513200d84: Pull complete
55769680e827: Pull complete
e27ce2095ec2: Pull complete
5943eea6cb7c: Pull complete
3ed8ceae72a6: Pull complete
91d1e510d72b: Pull complete
415cc4506e71: Pull complete
a79d88064227: Pull complete
Digest: sha256:b707d3b8b4f40951ca2f387c24ab9f78800c69c90740f0cca937a1b95204b3a4
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest

[root@www.cndba.cn ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mariadb             latest              37f5f0a258bf        8 days ago          356MB
tomcat              latest              a7fa4ac97be4        11 days ago         528MB
mysql               5.7                 84164b03fa2e        3 weeks ago         456MB
mysql               8.0                 9b51d9275906        3 weeks ago         547MB
mysql               latest              9b51d9275906        3 weeks ago         547MB
[root@www.cndba.cn ~]#

上传镜像到私有仓库:http://www.cndba.cn/cndba/dave/article/4103

[root@www.cndba.cn ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mariadb             latest              37f5f0a258bf        8 days ago          356MB
tomcat              latest              a7fa4ac97be4        11 days ago         528MB
mysql               5.7                 84164b03fa2e        3 weeks ago         456MB
mysql               8.0                 9b51d9275906        3 weeks ago         547MB
mysql               latest              9b51d9275906        3 weeks ago         547MB

[root@www.cndba.cn ~]# docker push 192.168.74.203:5000/tomcat:latest
The push refers to repository [192.168.74.203:5000/tomcat]
An image does not exist locally with the tag: 192.168.74.203:5000/tomcat

直接上传会报错,修改镜像的标签:

[root@www.cndba.cn ~]# docker tag a7fa4ac97be4 192.168.74.203:5000/tomcat
[root@www.cndba.cn ~]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
mariadb                      latest              37f5f0a258bf        8 days ago          356MB
192.168.74.203:5000/tomcat   latest              a7fa4ac97be4        11 days ago         528MB
tomcat                       latest              a7fa4ac97be4        11 days ago         528MB
mysql                        5.7                 84164b03fa2e        3 weeks ago         456MB
mysql                        8.0                 9b51d9275906        3 weeks ago         547MB
mysql                        latest              9b51d9275906        3 weeks ago         547MB

重新push:http://www.cndba.cn/cndba/dave/article/4103

[root@www.cndba.cn ~]# docker push 192.168.74.203:5000/tomcat:latest
The push refers to repository [192.168.74.203:5000/tomcat]
690fbbe97481: Pushed
d27e164cc159: Pushed
3c1fd77de487: Pushed
ac3e2c206c49: Pushed
3663b7fed4c9: Pushed
832f129ebea4: Pushed
6670e930ed33: Pushed
c7f27a4eb870: Pushed
e70dfb4c3a48: Pushed
1c76bd0dc325: Pushed
latest: digest: sha256:8b7f73feaa30789f48c69440d000af5ba0211055bcd896601644c0149b924692 size: 2421

此时通过curl 就可以获取到私有仓库端的镜像:

[root@www.cndba.cn ~]# curl -X GET http://192.168.74.203:5000/v2/_catalog
{"repositories":["tomcat"]}
[root@www.cndba.cn ~]#

此时可以查到本地目录:http://www.cndba.cn/cndba/dave/article/4103http://www.cndba.cn/cndba/dave/article/4103

[root@www.cndba.cn tomcat]# pwd
/opt/docker/registry/v2/repositories/tomcat
[root@www.cndba.cn tomcat]# ll
total 0
drwxr-xr-x 3 root root 20 Mar 29 10:25 _layers
drwxr-xr-x 4 root root 35 Mar 29 10:26 _manifests
drwxr-xr-x 2 root root  6 Mar 29 10:26 _uploads
[root@www.cndba.cn tomcat]#

4 使用私有仓库镜像

在普通docker 机器上先删除tomcat 镜像:http://www.cndba.cn/cndba/dave/article/4103

[root@www.cndba.cn ~]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
mariadb                      latest              37f5f0a258bf        8 days ago          356MB
192.168.74.203:5000/tomcat   latest              a7fa4ac97be4        11 days ago         528MB
tomcat                       latest              a7fa4ac97be4        11 days ago         528MB
mysql                        5.7                 84164b03fa2e        3 weeks ago         456MB
mysql                        8.0                 9b51d9275906        3 weeks ago         547MB
mysql                        latest              9b51d9275906        3 weeks ago         547MB
[root@www.cndba.cn ~]# docker rmi 192.168.74.203:5000/tomcat
Untagged: 192.168.74.203:5000/tomcat:latest
Untagged: 192.168.74.203:5000/tomcat@sha256:8b7f73feaa30789f48c69440d000af5ba0211055bcd896601644c0149b924692
[root@www.cndba.cn ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mariadb             latest              37f5f0a258bf        8 days ago          356MB
tomcat              latest              a7fa4ac97be4        11 days ago         528MB
mysql               5.7                 84164b03fa2e        3 weeks ago         456MB
mysql               8.0                 9b51d9275906        3 weeks ago         547MB
mysql               latest              9b51d9275906        3 weeks ago         547MB
[root@www.cndba.cn ~]#
[root@www.cndba.cn ~]#

从私有仓库下载镜像:

[root@www.cndba.cn ~]# docker pull 192.168.74.203:5000/tomcat
Using default tag: latest
latest: Pulling from tomcat
Digest: sha256:8b7f73feaa30789f48c69440d000af5ba0211055bcd896601644c0149b924692
Status: Downloaded newer image for 192.168.74.203:5000/tomcat:latest
192.168.74.203:5000/tomcat:latest
[root@www.cndba.cn ~]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
mariadb                      latest              37f5f0a258bf        8 days ago          356MB
192.168.74.203:5000/tomcat   latest              a7fa4ac97be4        11 days ago         528MB
tomcat                       latest              a7fa4ac97be4        11 days ago         528MB
mysql                        5.7                 84164b03fa2e        3 weeks ago         456MB
mysql                        8.0                 9b51d9275906        3 weeks ago         547MB
mysql                        latest              9b51d9275906        3 weeks ago         547MB

初始化并启动容器:

http://www.cndba.cn/cndba/dave/article/4103

[root@www.cndba.cn ~]# docker run --name tomcat -p 8080:8080 -idt 192.168.74.203:5000/tomcat
4e327b82cd18cb661fd2f1d4f684b113d6fcb031c283ac7b3086d35ab3c1f290
[root@www.cndba.cn ~]# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                      PORTS                    NAMES
4e327b82cd18        192.168.74.203:5000/tomcat   "catalina.sh run"        5 seconds ago       Up 3 seconds                0.0.0.0:8080->8080/tcp   tomcat
34ad82852c64        mysql:latest                 "docker-entrypoint.s…"   11 hours ago        Exited (0) 10 minutes ago                            mysqlserver
[root@www.cndba.cn ~]#

5 tomcat 404 的处理

启动容器后通过web访问出现404 错误:

这里我们登陆进tomcat 的docker:发现默认的webapps下面为空,我们将webapps.dist的内容复制到webapps后,访问正常:http://www.cndba.cn/cndba/dave/article/4103

[root@www.cndba.cn ~]# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                      PORTS                    NAMES
4e327b82cd18        192.168.74.203:5000/tomcat   "catalina.sh run"        8 minutes ago       Up 8 minutes                0.0.0.0:8080->8080/tcp   tomcat
34ad82852c64        mysql:latest                 "docker-entrypoint.s…"   11 hours ago        Exited (0) 18 minutes ago                            mysqlserver
[root@www.cndba.cn ~]# docker exec -ti 4e327b82cd18 bash
root@4e327b82cd18:/usr/local/tomcat# ls
BUILDING.txt     LICENSE  README.md      RUNNING.txt  conf     lib   native-jni-lib  webapps       work
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin          include  logs  temp            webapps.dist
root@4e327b82cd18:/usr/local/tomcat# cd webapps
root@4e327b82cd18:/usr/local/tomcat/webapps# ls
root@4e327b82cd18:/usr/local/tomcat/webapps# cd ..
root@4e327b82cd18:/usr/local/tomcat# ls
BUILDING.txt     LICENSE  README.md      RUNNING.txt  conf     lib   native-jni-lib  webapps       work
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin          include  logs  temp            webapps.dist
root@4e327b82cd18:/usr/local/tomcat# cd webapps.dist/
root@4e327b82cd18:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager
root@4e327b82cd18:/usr/local/tomcat/webapps.dist# cd ..
root@4e327b82cd18:/usr/local/tomcat# mv webapps.dist/* webapps/
root@4e327b82cd18:/usr/local/tomcat# ls webapps
ROOT  docs  examples  host-manager  manager
root@4e327b82cd18:/usr/local/tomcat#

刷新页面正常:

6 关于私有仓库的安全问题说明

上面我们通过docker-registry 搭建了一个私有的仓库,但是这种仓库的安全性较低,知道仓库URL的都可以上传和下载镜像。 如果要提升安全箱,可以通过Nginx 配置一个带认证功能的私有仓库,这里不再说明。

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2296
    原创
  • 3
    翻译
  • 582
    转载
  • 198
    评论
  • 访问:8508412次
  • 积分:4477
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ