一、本地镜像发布到阿里云流程
二、镜像的生成方法
基于当前容器创建一个新的镜像:
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
评论