阿里云镜像服务&本地私有库 Registry

阿里云镜像服务&本地私有库 Registry

一、本地镜像发布到阿里云流程

二、镜像的生成方法

基于当前容器创建一个新的镜像:

docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]]

OPTIONS 说明:
-a :提交的镜像作者;
-m :提交时的说明文字;

三、将本地镜像推送到阿里云

1、阿里云镜像服务

阿里云镜像服务地址

2、创建仓库镜像

1)选择控制台,进入容器镜像服务
2)选择个人实例
3)命名空间
4)仓库名称
5)进入管理界面获得脚本

(1)登录阿里云Docker Registry

docker login --username=zhuangpf registry.cn-hangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
(2)从 Registry 中拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/docrepo/testrepo:[镜像版本号]

(3)将镜像推送到 Registry

docker login --username=zhuangpf registry.cn-hangzhou.aliyuncs.com
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/docrepo/testrepo:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/docrepo/testrepo:[镜像版本号]

3、将镜像推送到阿里云

将镜像推送到阿里云 registry

docker login --username=zhuangpf registry.cn-hangzhou.aliyuncs.com
docker tag fc1d6e70130d registry.cn-hangzhou.aliyuncs.com/docrepo/testrepo:1.0
docker push registry.cn-hangzhou.aliyuncs.com/docrepo/testrepo:1.0

四、将阿里云上的镜像下载到本地

docker pull registry.cn-hangzhou.aliyuncs.com/docrepo/testrepo:1.0

五、Docker Registry

官方 Docker Hub 地址:https://hub.docker.com/,中国大陆访问太慢了且准备被阿里云取代的趋势,不太主流。
Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像给公网,所以需要创建一个本地私人仓库供给团队使用,基于公司内部项目构建镜像。
Docker Registry 是官方提供的工具,可以用于构建私有镜像仓库。

六、将本地镜像推送到私有库

1、下载镜像 Docker Registry

docker pull registry 

[root@docker130 ~]# docker images
REPOSITORY                                           TAG       IMAGE ID       CREATED             SIZE
registry                                             latest    b8604a3fe854   13 months ago       26.2MB

2、运行私有库 Registry,相当于本地有个私有 Docker hub

docker run -d -p 5000:5000  -v /deploy/registry/:/var/lib/registry --privileged=true registry

-v /deploy/registry/:/tmp/registry: 这个选项用于挂载卷,将主机的 /deploy/registry/ 目录挂载到容器内的 /tmp/registry 目录。这使得容器可以访问主机上的文件。
--privileged=true: 这个选项允许容器以特权模式运行,给予容器更高的权限,通常用于需要访问主机资源的场景。

默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调。
进入容器查看:

docker ps
docker exec -it <容器ID或名称> /bin/sh

另一种方式:

docker run -itd -v /opt/docker_registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest

-itd:在容器中打开一个伪终端进行交互操作,并在后台运行
-v:把宿主机的 /opt/docker_registry 目录绑定到容器 /var/lib/registry 目录(这个目录是 registry 容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的 5000 端口就访问到 registry 容器的服务了。
--restart=always:这是重启的策略,在容器退出时总是重启容器。
--name registry:创建容器命名为 registry。
registry:latest:这个是刚才pull下来的镜像。

Docker 容器的重启策略:

  • no 默认策略,在容器退出时不重启容器。
  • on-failure 在容器非正常退出时(退出状态非0),才会重启容器。
  • on-failure:3 在容器非正常退出时重启容器,最多重启3次 always:在容器退出时总是重启容器。
  • unless-stopped 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。

3、演示创建一个新镜像,ubuntu 安装 ifconfig 命令

1)从 Hub 上下载 ubuntu 镜像到本地并成功运行。
2)原始的 Ubuntu 镜像是不带着 ifconfig 命令的。
3)外网连通的情况下,安装 ifconfig 命令并测试通过。
docker 容器内执行上述两条命令:

apt-get update
apt-get install net-tools

4)安装完成后,基于当前容器创建一个新的镜像

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
docker commit -m="ifconfig add" -a="zhuangpf" 521b8ebff713 myubuntu1:1.1

5)启动我们的新镜像并和原来的对比

4、curl 验证私服库上有什么镜像

curl -XGET http://192.168.10.130:5000/v2/_catalog
[root@docker130 ~]# curl -XGET http://192.168.10.130:5000/v2/_catalog
{"repositories":[]}

5、将新镜像修改符合私服规范的Tag

docker tag 镜像:Tag Host:Port/Repository:Tag

docker tag myubuntu1:1.1 192.168.10.130:5000/zzyyubuntu:1.2

6、添加私有镜像仓库地址

daemon.json 文件中添加私有镜像仓库地址

{
  "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://docker.imgdb.de",
        "https://docker-0.unsee.tech",
        "https://docker.hlmirror.com",
        "https://cjie.eu.org"
    ],
  "insecure-registries": ["192.168.10.130:5000"]
}

上述理由:docker 默认不允许 http 方式推送镜像,通过配置选项来取消这个限制。修改完后如果不生效,建议重启docker。

systemctl daemon-reload
systemctl restart docker

7、push 推送到私服库

[root@docker130 ~]# docker push 192.168.10.130:5000/zzyyubuntu:1.2
The push refers to repository [192.168.10.130:5000/zzyyubuntu]
a359528d6d8c: Pushed 
9f54eef41275: Pushed 
1.2: digest: sha256:8ffa7b6dc6584b0a7e9119038b16f117e37398e69f268fe500bf528cb3e6d56c size: 741

8、curl 验证私服库上有什么镜像

[root@docker130 ~]# curl -XGET http://192.168.10.130:5000/v2/_catalog
{"repositories":["zzyyubuntu"]}

9、pull 到本地并运行

docker pull 192.168.10.130:5000/zzyyubuntu:1.2

评论

暂无

添加新评论