仓库Repository 是集中存放镜像的地方。
Docker官方目前维护公共仓库叫 docker hub,可以在 https://cloud.docker.com 免费注册账号;
Docker Hub
登录
执行命令 docker login 交互式输入用户名密码登录docker hub
退出登录 docker logout
拉取镜像pull
docker search
docker pull
docker search
例如:# docker search centos --filter=stars=100 显示centos收藏数量大于100的镜像列表
镜像分类:
1、基础镜像或根镜像 类似centos;由docker公司官方提供;一般使用单个名词作为名字;
2、docker用户创建并维护的,username/image
推送镜像push
docker push 推送自己的镜像到Docker hub上
例如 # docker push username/ubuntu:17.10
自动创建 Automated Builds
自动创建(Automated Builds)功能对于需要经常升级镜像内程序来说,十分方便。
有时候,用户创建了镜像,安装了某个软件,如果软件发布新版本则需要手动更新镜像。
私有仓库
docker-registry 官方提供的工具,可以构建私有的镜像仓库。
安装运行docker-registry
容器运行,本地没有registry镜像会自动下载。
# docker run -d -p 5000:5000 --restart=always --name registry registry
使用官方registry镜像启动私有仓库。默认情况下,仓库会被创建再容器 /var/lib/registry 目录下。可以通过-v 参数讲镜像文件存放本地的指定路径。例如 /opt/registry 没有目录的话需要创建;
# docker run -d -p 5000:5000 -v /opt/registry/:/var/lib/registry registry
76d011a935ef352efb6e6722c9b403540112bd5a7c6dea417fdbcfd6e19d3d9c
在私有仓库上传、搜索、下载镜像
docker tag 标记一个镜像,并推送到仓库。例如私有仓库地址127.0.0.1:5000
格式为 docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]
使用 docker tag 将 ubuntu:latest 这个镜像标记为 127.0.0.1:5000/ubuntu:latest。
# docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest
# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
127.0.0.1:5000/ubuntu latest 452a96d81c30 2 weeks ago 79.6MB
ubuntu latest 452a96d81c30 2 weeks ago 79.6MB
registry latest d1fd7d86a825 4 months ago 33.3MB
docker push 上传标记的镜像(只有上传之后才会在本地保存)
# docker push 127.0.0.1:5000/ubuntu:latest
The push refers to repository [127.0.0.1:5000/ubuntu]
059ad60bcacf: Pushed
8db5f072feec: Pushed
67885e448177: Pushed
ec75999a0cb1: Pushed
65bdd50ee76a: Pushed
latest: digest: sha256:90f24abe180424046a5d53f6fc6f9fdb8f79b835cb2fd7d1a782e4c30dfb5dcc size: 1357
用curl 查看仓库中的镜像
# curl 127.0.0.1:5000/v2/_catalog
{"repositories":["ubuntu"]}
表明镜像已经被成功上传。
删除已有镜像,再从私有仓库下载镜像
# docker image rm 127.0.0.1:5000/ubuntu:latest
# docker pull 127.0.0.1:5000/ubuntu:latest
latest: Pulling from ubuntu
Digest: sha256:90f24abe180424046a5d53f6fc6f9fdb8f79b835cb2fd7d1a782e4c30dfb5dcc
Status: Downloaded newer image for 127.0.0.1:5000/ubuntu:latest
# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
127.0.0.1:5000/ubuntu latest 452a96d81c30 2 weeks ago 79.6MB
注意事项
如果你不想使用 127.0.0.1:5000 作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库。你就得把例如 192.168.20.11:5000 这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。
因为 Docker 默认不允许非 HTTPS 方式推送镜像。
通过 Docker 的配置选项来取消这个限制.
修改如下,如果没有daemon.json文件需要新建
# cat /etc/docker/daemon.json
{
"registry-mirror": [ "https://registry.docker-cn.com" ],
"insecure-registries": [ "192.168.20.11:5000" ]
}
重启docker生效 systemctl restart docker.service
本地建立私有仓库,内网其他机器通过私有仓库下载镜像
私有仓库ip 192.168.20.11 内网测试机器192.168.20.10
步骤如下:
2台机器都需要安装docker,并新建daemon.json文件,内容保持一致;
私有仓库机器:
# docker tag nginx:latest 192.168.20.11:5000/nginx:latest
# docker push 192.168.20.11:5000/nginx:latest
内网测试机器下载:
# docker pull 192.168.20.11:5000/nginx:latest
内网机器,测试push镜像到私有仓库机器
# docker tag ubuntu:latest 192.168.20.11:5000/ubuntu:latest
# docker push 192.168.20.11:5000/ubuntu:latest
私有仓库机器pull 内网机器push的镜像
# docker pull 192.168.20.11:5000/ubuntu:latest
# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.20.11:5000/ubuntu latest 452a96d81c30 2 weeks ago 79.6MB
测试OK;