# Docker 镜像私有仓库
在 Docker 中,当我们执行 docker pull xxx
的时候 ,它实际上是从 hub.docker.com
这个地址去查找,这就是 Docker 公司为我们提供的公共仓库。在工作中,我们不可能把企业项目 push 到公有仓库进行管理。所以为了更好的管理镜像,Docker 不仅提供了一个中央仓库,同时也允许我们搭建本地私有仓库。
Docker 容器镜像仓库分类:
- 公网仓库:docker hub
- 私网仓库:registry、harbor
# 一、registry
# 1. 仓库搭建
- 拉取 registry 容器镜像
- 创建 registry 仓库容器
- 测试
1.1 拉取 registry 容器镜像
docker pull registry
1.2 创建 registry 仓库容器
1. 创建持久化存储,将容器镜像存储目录 /var/lib/registry 挂载到本地 /opt/myregistry 下:
mkdir /opt/myregistry
2. 创建 registry 容器
docker run -d -p 5000:5000 -v /var/lib/registry:/opt/myregistry --restart=always registry:latest
3. 查看容器是否运行
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b20b55fe6f8 registry:latest "/entrypoint.sh /etc…" 2 minutes ago Up 2 minutes 0.0.0.0:5000->5000/tcp busy_mclean
1.3 测试容器应用
[root@VM-12-10-centos ~]# curl http://0.0.0.0:5000/v2/_catalog{"repositories":[]}
显示仓库中没有任何镜像。
# 2. 上传镜像
- 设置 docker 仓库为 registry 本地仓库
- 给需要存储的镜像打 tag
- 上传镜像到 registry 仓库
查看本地镜像:
[root@VM-12-10-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
goweb_app latest 62879d6fbd56 26 minutes ago 894 MB
centos-httpd v1 2c4280de642e About an hour ago 209 MB
docker.io/golang latest b09f7387a719 2 weeks ago 862 MB
docker.elastic.co/elasticsearch/elasticsearch 7.12.1 41dc8ea0f139 2 months ago 851 MB
docker.io/registry latest 1fd8e1b0bb7e 2 months ago 26.2 MB
docker.io/centos latest 300e315adb2f 6 months ago 209 MB
2.1 设置 docker 仓库为 registry 本地仓库
# 1. 修改 docker 进程启动文件,修改其启动方式,目的是为了让其通过 docker 配置文件启动
[root@VM-12-10-centos ~]# sed -i.bak '/^ExecStart=/c\ExecStart=\/usr\/bin\/dockerd' /usr/lib/systemd/system/docker.service
# 2. 设置 Docker 守护进程的配置文件 /etc/docker/daemon.json,默认没有该文件
[root@VM-12-10-centos ~]# cat /etc/docker/daemon.json
{
"insecure-registries": ["http://0.0.0.0:5000"]
}
insecure-registries 指定非安全的仓库地址,多个用逗号隔开
# 3. 重启docker生效配置文件
[root@VM-12-10-centos ~]# systemctl daemon-reload
[root@VM-12-10-centos ~]# systemctl restart docker
2.2 给需要存储的镜像打 tag
[root@VM-12-10-centos ~]# docker tag goweb_app:latest 0.0.0.0:5000/goweb_app:v1
2.3 上传镜像到 registry 仓库
# 1. 上传镜像docker push 0.0.0.0:5000/goweb_app:v1# 2. 查看上传[root@VM-12-10-centos ~]# curl http://0.0.0.0:5000/v2/_catalog{"repositories":["centos_nginx"]}
# 3. 下载镜像
- 设置 docker 仓库为 registry 本地仓库
- 拉取镜像到本地
3.1 设置 docker 仓库为 registry 本地仓库
同 2.2
3.2 拉取镜像
docker pull 0.0.0.0:5000/goweb_app:v1
# 4. 设置认证
- 安装需要认证的包
- 创建存放认证信息的文件
- 创建认证信息
- 创建带认证的registry容器
- 指定仓库地址
- 登录认证
4.1 安装需要认证的包
yum -y install httpd-tools
4.2 创建存放认证信息的文件
mkdir -p /opt/registry-var/auth
4.3 创建认证信息
htpasswd -Bbn hedon 123456 >> /opt/registry-var/auth/htpasswd
4.4 创建带认证的 registry 容器
docker run -d -p 10000:5000 --restart=always --name registry \
-v /opt/registry-var/auth:/auth \
-v /opt/myregistry:/var/lib/registry \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:latest
4.5 指定仓库地址
cat /etc/docker/daemon.json
{
"insecure-registries": ["http://0.0.0.0:5000","http://0.0.0.0:10000"]
}
4.6 登录认证
docker login 0.0.0.0:10000
Username:hedon
Password:123456
# 二、harbor
略。
← Dockerfile 面试题丨Docker →