三.Docker镜像及其私有库
三.Docker镜像及其私有库
- 1.是什么?
- 2.镜像理解
- 3.Docker镜像commit
- 4.镜像的生成方法
- 5.将本地镜像推送到阿里云及下载
- 6.本地镜像发布到私有库
1.是什么?
是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
2.镜像理解
镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。例如从官网下载ubantu镜像(基础镜像),此时这个ubantu基础镜像是没有vim的,那么我们在该基础镜像对应容器中手动下载安装vim后重新构建提交ubantu镜像,新的镜像就相当于在基础镜像上叠加了一层,镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。
Docker镜像层都是只读的,容器层是可写的,当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。

3.Docker镜像commit
docker commit提交容器副本使之成为一个新的镜像:
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
例:
docker拉取centos镜像后启动
docker run -it centos:7.9.2009 /bin/bash
原始的默认centos镜像是不带着vim命令的,外网连通的情况下,在centos容器中安装vim:
yum install vim -y
安装完成后,commit我们自己的新镜像:


docker commit -m=”新增vim” -a=”liumingyong” 1a742028225a mycentos:1.0

所以新镜像则是拥有vim功能的centos
总结:Docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。类似Java继承于一个Base基础类,自己再按需扩展。新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层
4.镜像的生成方法
1)基于当前容器创建一个新的镜像,新功能增强
docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-m :提交时的说明文字;
REPOSITORY:新容器名
TAG:版本号
例:


2)通过DockerFile构建
5.将本地镜像推送到阿里云及下载
1)阿里云开发者平台
https://promotion.aliyun.com/ntms/act/kubernetes.html

2)创建仓库镜像
- 选择控制台,进入容器镜像服务


- 选择个人实例



- 创建命名空间

- 创建镜像仓库


- 管理界面脚本

6.本地镜像发布到私有库
搭建方式一:使用 Docker Registry 搭建私有仓库
搭建方式二:使用 Harbor 搭建私有仓库 (企业级常用)
Docker Registry是官方提供的工具,可以用于构建私有镜像仓库
1)下载镜像Docker Registry
docker pull registry
2)运行私有库Registry,相当于本地有个私有Docker hub
docker run -d -p 5000:5000 -v /mydocker/myregistry/:/var/lib/registry --privileged=true registry
默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调
命令参数解析
• docker run:创建并运行一个新的容器
• -d:后台运行容器(detached模式)
• -p 5000:5000:端口映射
将宿主机的5000端口映射到容器的5000端口
外部可通过宿主机5000端口访问容器服务
• -v /mydocker/myregistry/:/var/lib/registry:数据卷挂载
将宿主机的/mydocker/myregistry/目录挂载到容器的/var/lib/registry目录
实现数据持久化存储,容器重启后数据不丢失
• --privileged=true:特权模式
给容器赋予扩展权限
容器内的root用户拥有宿主机root权限(谨慎使用)
• registry:要运行的镜像名称
Docker官方的私有镜像仓库镜像
3) 通过curl查看私有镜像仓库有哪些镜像
curl -XGET http://私库IP:端口/v2/_catalog

4)上传到私服之前,需要给镜像打上正确的标签
重置Tag原因:
- Docker客户端需要知道将镜像推送到哪个仓库
- 没有完整路径时,默认推送到Docker Hub (docker.io)
- 显式指定确保推送到私有仓库
Tag规范格式:[仓库地址:端口]/[命名空间]/[镜像名]:[标签]
docker tag your-image:tag your-private-registry.com/namespace/your-image:tag
标签通常遵循一定的命名规范,以便于管理和识别
• your-image是你的Docker镜像名称。
• tag是你想要使用的标签(例如latest, 1.0, 2.0等)。
• your-private-registry.com是你的私有仓库地址。
• namespace是你在私服上设置的命名空间(如果有的话)。如果没有,可以省略。

5) 修改配置文件使支持http上传镜像
命令:vim /etc/docker/daemon.json
新增配置:“insecure-registries”: [“宿主机ip:5000”]


docker默认不允许http方式推送镜像,通过配置选项来取消这个限制。====> 修改完后如果不生效,可重启docker
6)push推送到私服库
docker push ip:端口/镜像名:版本号

7)再次查看私服库镜像
curl -XGET http://ip:端口/v2/_catalog


8)pull到本地并运行
docker pull ip:端口/镜像名:版本号

