6-镜像分发
6-镜像分发
为镜像命名
如何将自建镜像在多个 docker host上使用?
用相同的 Dockerfile 在其他 host 构建镜像。
将镜像上传到公共 Registry(比如 Docker Hub),Host 直接下载使用。
搭建私有的 Registry 供本地 Host 使用
为镜像命名
docker build –t ubuntu-with-vi ubuntu-with-vi 对应的是 REPOSITORY
有一个叫 latest 的 TAG。
一个特定镜像的名字由两部分组成:repository 和 tag。
[image name] = [repository]:[tag]
如果执行 docker build 时没有指定 tag,会使用默认值 latest
docker build -t ubuntu-with-vi:latest tag 常用于描述镜像的版本信息,
tag 也可以是任意字符串
latest 其实并没有什么特殊的含义 当没指明镜像 tag 时,Docker 会使用默认值 latest仅此而已。
虽然 Docker Hub 上很多 repository 将 latest 作为最新稳定版本的别名,但这只是一种约定,而不是强制规定。使用镜像时最好还是避免使用 latest
tag 使用最佳实践
假设我们现在发布了一个镜像 myimage,版本为 v1.9.1。那么我们可以给镜像打上四个 tag:1.9.1、1.9、1 和 latest。
我们可以通过 docker tag 命令方便地给镜像打 tag。
docker tag myimage-v1.9.1 myimage:1
docker tag myimage-v1.9.1 myimage:1.9
docker tag myimage-v1.9.1 myimage:1.9.1
docker tag myimage-v1.9.1 myimage:latest
我们发布了 v1.9.2。这时可以打上 1.9.2 的 tag,并将 1.9、1 和 latest 从 v1.9.1 移到 v1.9.2。
docker tag myimage-v1.9.2 myimage:1
docker tag myimage-v1.9.2 myimage:1.9
docker tag myimage-v1.9.2 myimage:1.9.2
docker tag myimage-v1.9.2 myimage:latest
v2.0.0 发布了。这时可以打上 2.0.0、2.0 和 2 的 tag,并将 latest 移到 v2.0.0。
这种 tag 方案使镜像的版本很直观,用户在选择非常灵活:
myimage:1 始终指向 1 这个分支中最新的镜像。
myimage:1.9 始终指向 1.9.x 中最新的镜像。
myimage:latest 始终指向所有版本中最新的镜像。
如果想使用特定版本,可以选择 myimage:1.9.1、myimage:1.9.2 或 myimage:2.0.0。
使用公共Registry
保存和分发镜像的最直接方法就是使用 Docker Hub。 Docker Hub 是 Docker 公司维护的公共 Registry
免费发布到 repository 别人也是免费使用 如果不希望别人使用 可以购买私人 repository
quay.io 是另一个公共 Registry
存取镜像
首先得在 Docker Hub 上注册一个账号
在 Docker Host 上登录。
docker login -u $username
修改镜像的 repository 使之与 Docker Hub 账号匹配。
Docker Hub 为了区分不同用户的同名镜像,
镜像的 registry 中要包含用户名,完整格式为:[username]/xxx:tag
#docker tag 命令为镜像重命名
# docker pull 镜像名 吧镜像传到docker hub
Docker 会上传镜像的每一层 只有新增加的镜像层会被上传 因为之间的基础镜像是 hub下载的于
官网一致 真正上传的镜像很少 如果想上传同一 repository 中所有镜像,省略 tag 部分就可以了
搭建本地registry
[root@MyMachine ~]# docker run -d -p 5000:5000 --name=registry --restart=always --privileged=true -v /usr/local/docker_registry:/var/lib/registry registry:latest
Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
df9b9388f04a: Pull complete
52dc419b0ee2: Pull complete
b6846b9db566: Pull complete
b0a23bbf973d: Pull complete
c50f110701a7: Pull complete
Digest: sha256:dc3cdf6d35677b54288fe9f04c34f59e85463ea7510c2a9703195b63187a7487
Status: Downloaded newer image for registry:latest
e0c4962fb73e62e16ce8c7507e96834bdab51d435ead9c6f9493f29906ee28d6
docker run -d -p 5000:5000 --name=registry --restart=always --privileged=true -v /usr/local/docker_registry:/var/lib/registry registry:latest
-d 后台运行容器
-p 5000:5000 把宿主机的5000端口映射到容器的5000端口
--name=registry 运行的容器名称
--restart=always 自动重启
--privileged=true centos7中的安全模块selinux把权限禁止了,加上这行是给容器增加执行权限
-v /usr/local/docker_registry:/var/lib/registry 把主机的/usr/local/docker_registry 目录挂载到 registry容器的/var/lib/registry目录下,
registry:latest 需要运行镜像名称
通过 docker tag 重命名镜像,使之与 registry 匹配
下面是镜像的常用操作子命令:
images 显示镜像列表
history 显示镜像构建历史
commit 从容器创建新镜像
build 从 Dockerfile 构建镜像
tag 给镜像打 tag
pull 从 registry 下载镜像
push 将 镜像 上传到 registry
rmi 删除 Docker host 中的镜像
search 搜索 Docker Hub 中的镜像
阿里云镜像提交
登录阿里云 完成实名认证
登录成功搜索容器镜像服务
创建个人版服务
镜像仓库设置密码
创建具体仓库
创建具体的文件库
选择本地仓库
登录阿里云及上传操作
1. 登录阿里云Docker Registry
$ docker login --username=super_code registry.cn-beijing.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
2. 从Registry中拉取镜像
$ docker pull registry.cn-beijing.aliyuncs.com/my_apps_images/diytomcat:[镜像版本号]
3. 将镜像推送到Registry
docker push registry.cn-beijing.aliyuncs.com/my_apps_images/diytomcat:1.0
$ docker login --username=super_code registry.cn-beijing.aliyuncs.com
$ docker tag [ImageId] registry.cn-beijing.aliyuncs.com/my_apps_images/diytomcat:[镜像版本号]
$ docker push registry.cn-beijing.aliyuncs.com/my_apps_images/diytomcat:[镜像版本号]
实例
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB
$ docker tag 37bb9c63c8b2 registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816
#使用 "docker push" 命令将该镜像推送至远程。
$ docker push registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816