前面有提到如何安装docker,今天我们来聊下docker仓库。

docker官方默认有提供公共仓库,大家只需要前往docker官网进行注册帐号即可使用。官方网站:https://www.docker.com/,默认仓库地址:registry.hub.docker.com。
我们在使用docker的时候,如果没有指定仓库地址,默认也是使用docker官方的仓库。

作为企业用户,我们都需要搭建自己的私有仓库,这点非常重要,现在我们来搭建自己的docker仓库。

registry 的搭建

Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了。

  • 拉取官方私有仓库的镜像registry
docker pull registry

镜像拉取下来了以后,我们可以通过下面命令查看下镜像是否可以看的到

docker images

Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了,当然也可以换成其它的目录。

  • 启动仓库
# docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest 

参数说明

-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
-v:把宿主机的/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;
–restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
–name registry:创建容器命名为registry,可以随便命名;
registry:latest:这个是刚才pull下来的镜像;

  • 查看仓库

查看仓库列表有两种方法:通过命令查看和通过浏览器查看。

通过命令的方式:

# curl http://127.0.0.1:5000/v2/_catalog

通过浏览器打开的方式:

浏览器打开:http://127.0.0.1:5000/v2/_catalog

  • 为仓库设置用户名密码
//切换到opt文件夹
# cd /opt/
//创建auth文件夹
# mkdir auth
//切换到auth文件夹
# cd /opt/auth
//生成密钥文件到htpasswd文件中
# echo "user:username passwd:password" >htpasswd
//使用registry镜像生成用户名和密码文件
# docker run --entrypoint htpasswd registry:latest -Bbn username password >auth/htpasswd
//查看密钥
# cat auth/htpasswd 
# ..生成的密钥..
//启动docker容器
# docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest 
  • 登录仓库

为了测试我们的私有仓库的搭建是否正常,我们可以在我们本机电脑上登录仓库测试(先在windows上面安装docker desktop,新建asp.net core项目勾选启动docker,visual studio就可以自动安装)。 docker安装好后,打开 cmd就可以输入docker命令了。登录命令如下所示:

//登录指定仓库地址
docker login ip:port -u username -p password
//登录成功
Login Succeeded

登录命令也可以分布来写,先登录到服务器,再输入用户名和密码。

如果仓库帐号正常,即可正常登录,返回:successed。

  • 上传镜像

用户登录成功后,我们就可以尝试上传一个本地镜像到私有仓库了。 docker镜像上传之前,需要先给镜像打个tag,打完tag只会,就可以直接push到服务器上。

具体命令如下:

docker tag python 192.168.1.110:5000/python:test

参数说明:

python:指的是本地镜像。
192.168.1.110:5000/python:指的是仓库地址和镜像名称。
test:镜像标签。

//上传镜像到私有仓库
docker push 192.168.1.110:5000/python:test
//上传成功,返回的结果
The push refers to repository [192.168.1.110:5000/python]
a7d85ab87af8: Pushed                                                                                      7a82840eb682: Pushed                                                                                                    df897d49f46c: Pushed                                                                                                    a539b76feca4: Pushed                                                                                                    3e207b409db3: Pushed                                                                                                    test: digest: sha256:bbf059ab305cee6a2e5b3f28d5f7d0a51354093798b256f4c23d12c203db68c3 size: 1368

测试成功,我们最后再通过打开浏览器:http://127.0.0.1:5000/v2/_catalog,查看下仓库镜像是否已经上传成功。

docker可能会存在没有启动的情况,这个时候我们可以通过下面的命令进行启动或者停止

//docker启动       

# systemctl start docker
# service docker start

//重启docker服务

# systemctl restart  docker
# sudo service docker restart

//关闭docker    

# systemctl stop docker
# service docker stop

//查看是否启动成功

docker ps -a

在启动私有仓库中的镜像时,docker run 指令默认会以 https 启动,这个时候就需要在daemon.json中配置

//创建daemon.json配置文件,存放路径:/etc/docker/daemon.json
# vi daemon.json

输入以下内容:
{
  //配置仓库镜像,可配置国内加速镜像请求地址
  "registry-mirrors": [],
  //重定向到http,配置需要通过http请求的地址
  "insecure-registries": [
    "192.168.1.110:5100"
  ],
  "debug": false,
  "experimental": false
}

好了,私有仓库到这里就基本搭建好了,后面我们就可以考虑新建dockerfile,将我们的asp.net core程序打包成docker镜像了。


本文会经常更新,请阅读原文: https://huchengv5.gitee.io//post/%E6%90%AD%E5%BB%BAdocker%E7%A7%81%E6%9C%89%E4%BB%93%E5%BA%93.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名胡承(包含链接: https://huchengv5.gitee.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系