docker私有镜像仓库搭建(可供本地及私有环境使用)


文章目录

  • 注意:若不想了解持久化内容的童鞋请查看顺序如下: 一、三、五、六、七、八、九
  • docker私有镜像仓库搭建(可供本地及私有环境使用)
  • 一.安装Docker Registry并运行容器
  • 1.1:各个参数解释
  • 二.docker镜像持久化--扩展内容(不需要此步骤的请直接下一步)
  • 三.导入镜像到镜像仓库服务器
  • 四.docker容器持久化--扩展内容(不需要此步骤的请直接下一步)
  • 五.推送tomcat到Registry仓库
  • 六.验证是否推送到镜像仓库
  • 七.好tomcat成功,我们在测试一个mysql的镜像推送
  • 7.1获取mysql镜像id
  • 7.2推送mysql到Registry仓库
  • 7.3验证是否推送到镜像仓库(注意,这里我的服务器没有详细配置host内容,所以localhost和127.0.0.1是一样的!!!!)
  • 八.镜像仓库拉取验证
  • 8.1语法扩展:
  • 8.2遇到问题:
  • 8.3删除镜像
  • 九.私有镜像仓库拉取并测试


一.安装Docker Registry并运行容器

sudo docker run -d -v /skyfans/registry:/var/lib/registry -p 5000:5000 --restart=always --privileged=true --name registry registry:latest
1.1:各个参数解释

-d

容器后台运行

-v /skyfans/registry:/var/lib/registry

默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,这里指定本地目录挂载到容器。

-p 5000:5000

端口映射

–restart=always1

在容器退出时总是重启容器,主要应用在生产环境(请注意实际环境是否添加此参数)

–privileged=true

在CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误

–name registry

指定容器的名称

二.docker镜像持久化–扩展内容(不需要此步骤的请直接下一步)

我测试的镜像是我由其他机器上导出的镜像,所以这里介绍了持久化的内容,算是扩充内容。不需要此步骤的请直接下一步!!!

语法:docker save 镜像id > 某一路径

注意修改你的路径及镜像id

docker save 929f330b6f97 >/skyfans/tomcat.tar

三.导入镜像到镜像仓库服务器

docker load < /skyfans/tomcat.tar

docker compose 本地镜像 安装 docker 本地镜像仓库_docker

四.docker容器持久化–扩展内容(不需要此步骤的请直接下一步)

语法:docker export 容器id > 某一路径

导入持久化的镜像到本机

哟么有发现,导入后的镜像没有仓库:标签,都显示为none

我们来给他们个仓库:标签。

重命名镜像语法:docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)

docker tag 929f330b6f97 tomcat:skyfans

docker compose 本地镜像 安装 docker 本地镜像仓库_推送_02

五.推送tomcat到Registry仓库

语法:docker tag 镜像Id 仓库IP:端口/命名

sudo docker tag 929f330b6f97 127.0.0.1:5000/tomcat

推送到仓库

sudo docker push 127.0.0.1:5000/tomcat

使用中遇到的问题
Get https://127.0.0.1:5000/v1/_ping: Tunnel Connection Failed
解决方案:
修改daemon.json文件vim /etc/docker/daemon.json
添加:{ “insecure-registries”:[“127.0.0.1:5000”]}

vim /etc/docker/daemon.json 
添加如下内容:
"insecure-registries":["127.0.0.1:5000"]

六.验证是否推送到镜像仓库

curl http://localhost:5000/v2/_catalog|python -m json.tool

看到了,成功情况如下:

docker compose 本地镜像 安装 docker 本地镜像仓库_推送_03

七.好tomcat成功,我们在测试一个mysql的镜像推送

7.1获取mysql镜像id
docker images

docker compose 本地镜像 安装 docker 本地镜像仓库_推送_04

7.2推送mysql到Registry仓库
sudo docker tag  f991c20cb508 127.0.0.1:5000/mysql
sudo docker push 127.0.0.1:5000/mysql
7.3验证是否推送到镜像仓库(注意,这里我的服务器没有详细配置host内容,所以localhost和127.0.0.1是一样的!!!!)
curl http://localhost:5000/v2/_catalog|python -m json.tool

mysql也进来了!~~

docker compose 本地镜像 安装 docker 本地镜像仓库_docker_05

八.镜像仓库拉取验证

好,既然我们弄好了我们的私有镜像仓库,那接下来我们来测试下是否可以,并是否可以拉取下来吧。干这事之前,我们需要先把原有的镜像干掉。我们已干掉mysql的镜像为例!!!!

8.1语法扩展:

docker rm 容器id(或tag或REPOSITORY),删除容器
docker rmi 镜像ID(或tag),删除镜像

8.2遇到问题:
docker rmi f991c20cb508

报错,删除不掉镜像文件

docker compose 本地镜像 安装 docker 本地镜像仓库_mysql_06

问题分析,查看镜像id

docker compose 本地镜像 安装 docker 本地镜像仓库_推送_07


由于存在同名id镜像,删除命令不知道该删除哪个。。。换种方式,本来想用tag进行删除,但是一看,我擦,tag名字也一样,这坑。

8.3删除镜像

好吧,那我就使用REPOSITORY进行删除看下

docker rmi docker.io/mysql

docker compose 本地镜像 安装 docker 本地镜像仓库_mysql_08


可算是删除掉了。。所以大家在创建镜像时,一定要注意给好不同的tag!!!

继续,把另外一个也干掉,否则,我们怎么知道是否会拉取下来并成功呢。

docker rmi 127.0.0.1:5000/mysql

docker compose 本地镜像 安装 docker 本地镜像仓库_推送_09

这下全没了,验证下

docker images

docker compose 本地镜像 安装 docker 本地镜像仓库_推送_10


好,已经删除了,那我们开始从我们的私有镜像仓库拉取下来mysql的镜像

九.私有镜像仓库拉取并测试

docker pull 127.0.0.1:5000/mysql

查看拉取情况:

docker images

docker compose 本地镜像 安装 docker 本地镜像仓库_mysql_11

OK,到这里我们的镜像仓库已经完活了,并且测试了是否可以拉取到本地!!