Docker 仓库
本节介绍镜像仓库的使用。
目前 Docker 官方维护了一个公共仓库 Docker Hub,这是一个用于管理公共镜像的地方,我们可以找到各种镜像,也可以把我们自己的镜像推送上去。
当然,根据需要我们也可以搭建私有的镜像仓库,用于管理自己的镜像。
1. 登入登出
如果没有账号,我们需要在 Docker Hub 上免费注册一个 Docker 账号。保存好账号密码,进入 Linux 环境,输入:
docker login
使用 docker logout
可以登出账号。
2. 搜索镜像
docker search redis
根据是否是官方提供,可将镜像资源分为两类:
通常我们更青睐官方构建的镜像。
3. 下载镜像
我们演示一下如何下载 redis 镜像:
docker pull redis
默认会拉取 latest 版本,如果要指定版本,需要在镜像后标记版本,如 dockre pull redis:3.2
运行这个命令docker pull redis
后,Docker 就会开始从镜像仓库中拉取我们所指定的镜像了。
如上图所示,redis 的镜像已经被下载成功了。
在控制台中,我们可以看到镜像拉取的进度。 下载进度会分为几行,每一行代表的就是一个镜像层。 Docker 首先会拉取镜像所基于的所有镜像层,之后再单独拉取每一个镜像层并组合成这个镜像。如果在本地已经存在相同的镜像层,那么 Docker 就直接略过这个镜像层的拉取而直接采用本地的内容。
镜像在被拉取之后就存放到了本地,接受 Docker 管理,我们可以通过 docker images
命令看到它们。
4. 上传镜像
docker push <本地镜像名>
5. 删除镜像
删除镜像的命令是 docker image rm
,参数是镜像的名称或 ID
使用命令docker image rm redis:latest
可以删除刚才拉取的 redis 镜像,同时Docker 会自动删掉无用、没有依赖的镜像层。
6. 搭建Docker 私有仓库
执行以下命令,使用Docker运行私有仓库服务registry。
docker run -d -v /root/registry:/var/lib/registry -p 6000:5000 --restart=always --name registry registry
配置/etc/docker/daemon.json
,添加一行insecure-registries
配置
{
...
"insecure-registries": ["127.0.0.1:6000"]
...
}
127.0.0.1:6000
是我们上面的自定义镜像仓库服务的地址端口。
测试私有镜像仓库
下面我们将redis:latest镜像改个名字,传到私有仓库。
# 将redis:latest镜像名称改为127.0.0.1:6000/myredis:v1
# 127.0.0.1:6000/xxx是固定写法,与之前的地址对应
docker tag redis:latest 127.0.0.1:6000/myredis:v1
# 上传到私有仓库
docker push 127.0.0.1:6000/myredis:v1
# 查看私有仓库中的镜像
curl http://127.0.0.1:6000/v2/_catalog
得到结果
{"repositories":["myredis"]}
说明上传成功。
# 删除镜像
docker rmi 127.0.0.1:6000/myredis:v1
# 把redis镜像也删除掉,这样可以清理掉相关的缓存层,使后面镜像的下载过程和结果更清楚
docker rmi redis
# 拉取镜像
docker pull 127.0.0.1:6000/myredis:v1
运行docker images
可以看到此镜像已经被缓存到本地了。
7. 小结
容器镜像的操作是增量式的,每次镜像拉取的内容会比原本多个完整的操作系统的小很多,同时镜像只要发布成功,我们就能完全复现这个镜像的完整环境,这样就使得基于容器镜像的团队协作更加便捷。