6-镜像分发

6-镜像分发

为镜像命名

如何将自建镜像在多个 docker host上使用?

  1. 用相同的 Dockerfile 在其他 host 构建镜像。

  2. 将镜像上传到公共 Registry(比如 Docker Hub),Host 直接下载使用。

  3. 搭建私有的 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

image-20220506225944599

修改镜像的 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 中的镜像

阿里云镜像提交

登录阿里云 完成实名认证

image-20220608102436924

登录成功搜索容器镜像服务

创建个人版服务

image-20220608102525136

镜像仓库设置密码

image-20220608102626066

image-20220608102640652

创建具体仓库

image-20220608102703813

创建具体的文件库

image-20220608102722683

选择本地仓库

image-20220608102801095

登录阿里云及上传操作

image-20220608102832552

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:[镜像版本号]

image-20220608104536483

实例

$ 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

image-20220608104759996

posted @ 2022-07-06 16:49  机猿巧合  阅读(83)  评论(0编辑  收藏  举报