前面有提到如何安装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/
),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请
与我联系
。