第五节 docker的镜像相关命令
镜像是docker的三大核心概念之一.
Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,docker会尝试先从默认镜像仓库下载(默认使用docker hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库.
需要学会如下知识点:
1.从仓库获取镜像
2.管理本地主机上的镜像
3.镜像实现的基本原理
5.1.从仓库下载镜像命令
镜像是docker运行容器的前提.可使用docker pull 命令来从仓库获取所需要的镜像
5.1.1docker pull命令
基本语法: docker pull +选项+镜像名字【:标记】
选项:-a(标签)----下载所有标记
标记不能随便写,要按照官网上给的写
5.1.2标记从哪里找
例如:查找centos的标记
首先登陆docker hub网址
输入centos后回车
进入centos官方-----找到对应的tag标记
可以通过指定标签来下载特定版本的某一个镜像,若不指定,则默认标签为latest下
5.1.3 层的概念
1.下载过程中可以看到,镜像文件一般由若干层组成,下载过程中会获取并输出镜像的各层信息.
2.层(Layer)其实是AUFS(Advanced Union File System,高级联合文件系统) 中的重要概念,是实现增量保存和更新的基础.
Docker的文件系统是aufs
层的复用会节省内存和硬盘空间
5.1.4查看docker容器里的centos的发行版
1.先下载centos的最新镜像
2.查看虚拟机上的centos版本和容器里的centos的版本
3.进入容器里对应的centos版本----直接查看对应的版本
4.总结
这样在docker容器里的centos的最新版本镜像就已经下载并安装好了,可以执行运行,这就是docker轻量级虚拟化的技术。而在虚拟机中需要下载对应版本的镜像,然后在配置相应的环境,步骤繁琐,资源利用的多,建议使用docker镜像
5.2查看镜像信息命令
1.使用docker images 命令可以列出本地主机上的镜像
1)repository(仓库)名-----对应下载的镜像名或者仓库名
2)tag(标记)-----不加tag默认是lastest,可以指定tag
3)image id(镜像编号)-----为了互相区分镜像
如果镜像编号一样,那说明是同一个镜像
4)created(创建)----创建时间为官网上创建的时间
5)size(大小)-------镜像对应的大小
镜像之间可能存在层复用
5.3添加标签命令
1.使用docker tag命令为本地镜像添加新的标签
2.如果有多个同名的镜像或者仓库,为了区分就是需要使用tag,如果不写默认就是latest
3.语法格式:docker tag 镜像名 标签名
4.添加的标签就成为新的镜像名,但是文件内容不变
5.4查看镜像详细信息命令
1.使用docker inspect 命令可以获取该镜像的详细信息
2.语法格式:docker inspect +选项+镜像名/镜像id/容器id
选项 -f-----以go语言指定的模板查看指定信息
Docker inspect -f “{{.指定内容1.指定内容2}}” +镜像名
Docker inspect -f “{{.指定内容1}}” +镜像名
练习:
练习
5.5搜寻镜像命令
- 使用docker search 命令来搜索远端仓库中共享的镜像.默认搜索docker hub官方仓库中的镜像.
2.语法格式:docker search+选项+搜索内容
3.练习:
4.建议在官网上搜索对应的内容,信息比较多,且新
5.6删除镜像命令
- 使用docker rmi 命令可以删除镜像
2.语法格式:docker rmi +要删除镜像名-----rmi(remove images)
选项: -f (force)----强制删除镜像
删除镜像时,出现提示信息,原因是其他容器依赖要删除的这个镜像,如果删除了就会导致其他容器不能正常使用。
3.练习:
练习:删除没有依赖的镜像时,会现撤销标签
练习:删除一个镜像对应的多个标签时,第一次删除只会删除标签,不会删除内容,第二次就是执行命令后,就是删除镜像内容
当一个镜像有多个标签的时候,docker rmi 命令只是删除了镜像多个标签中的指定的标签而已,并不影响镜像文件.
注意:
我们删除镜像,要保证并没有运行的容器依赖于该镜像,否则不能直接删除,
删除镜像的前提是需要将所有镜像运行的容器先停止,然后在开始删除容器,删除对应的镜像
5.7创建镜像命令
创建镜像的方法有三种
- 基于已有镜像的容器创建
- 基于本地模板导入 (用的最少)
- 基于dockerfile创建 (常用)
5.7.1基于已有镜像的容器创建
1.使用docker commit 命令
2.语法格式:docker commit +容器+新的镜像名
3.练习:创建yyn镜像
1)查看当前已有的镜像
2)运行centos镜像
—使其成为容器—容器id为cb009开头
3)在容器里创建文件夹
4)退出容器
5)创建yyn镜像
容器的编号可以写部分
6)查看镜像
7)运行yyn镜像
—查看是否有新的目录
注意:不能对应新生成的镜像修改,因为镜像是只读的,如果要修改,就要重新生成镜像
5.7.2. 基于本地模板导入
1.可以直接从一个操作系统模板文件导入一个镜像,在这里推荐使用OpenVZ提供的模板来创建.
2.网址:https://download.openvz.org/template/precreated/
1.导入模板镜像
1)在指定网址下载镜像
可以右键另存为或者使用wget下载
2)命令docker import导入镜像
A)语法格式 :docker import +文件/路径/-
功能描述:从一个tar包导入文件镜像
练习:
注意:这个方法用的少,不建议使用
5.7.3. 基于dockerfile创建
1.Dockerfile的相关知识
2.体系结构
From:基础镜像,当前新的镜像源于哪个镜像
Maintain:镜像作者和邮箱
Run:容器构建时需要运行的命令
Expose:当前容器对外暴露的端口
Workdir:指定在创建容器后,终端默认登陆的进来的工作目录,一个落脚点
Env:用来构建构建镜像过程中设置环境变量
Add:将宿主机目录下的文件复制到镜像且add命令会自动处理url和解压tar包
Copy:构建目录源路径复制到新的一层镜像内的目标路径
Volume:容器数据卷,用于数据保存和持久化工作
Cmd:指定一个容器启动时要运行的命令,dockerfile中可以有多个cmd指令,只有最后一个命令生效,cmd会被docker run之后的参数替换
Entrypoint:指定一个容器启动时要运行的命令,和cmd一样,都在指定容器启动程序及参数,不会覆盖,会追加
Onbulid:触发器,
语法结构网站上有
3.练习1
1)编写dockerfile文件
FROM centos
MAINTAINER yyn106232871@qq.com
ENV mypath /tmp
WORKDIR $mypath
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo “hhp”
CMD echo “success----------fight”
CMD /bin/bash
2)执行此命令docker build
/root/mydocker/dockerfile 是dockerfile的文件路径
[root@docker mydocker]# docker build -f /root/mydocker/dockerfile -t mycentos:1.3 .
开始层层封装镜像
3)查看镜像mycentos
4)执行docker run 查看mycentos的落脚点
5)执行vim命令+查看IP
5.8存出和载入镜像命令
5.8.1.使用 docker save 命令存出镜像
1.查看命令帮助
2.语法格式:docker save +选项-o +镜像名.tar +镜像文件。。。。
3.练习:centos:latest 镜像文件存出为了centos7.tar文件
5.8.2.使用 docker load 命令载入镜像
1.查看命令帮助
2.语法格式:docker load +选项-i +镜像名.tar
3.练习: 将centos7.tar文件载入成镜像
自己的搭建的仓库是私有仓库,公有仓库就是docker hub
5.9 repositry 和registry的关系
1.Repositry----仓库
2.Registry-----注册服务器-----》docker hub 是全球最大的registry,可以注册账号,创建仓库
例如:注册一个mysql用户,创建一个mysql仓库,并把自己的镜像(mysql-server)上传到mysql仓库
3.如果要想下载自己私有仓库里的镜像,必须要在docker hub上注册用户并登录,才能下载成功。如果是下载docker hub上的公有仓库里的镜像不用登录
创建的库
5.10登入/登出docker hub命令
使用docker login命令登录
使用docker logout命令登出
5.11上传镜像命令
使用docker push 上传镜像到仓库,默认上传到dockerhub仓库(需要登录)
上传前需要修改标签
1.查看命令帮助
2.语法格式:docker push 镜像名
3.练习: 未修改标签前上传镜像----失败
docker push这个命令会认为要把yyn镜像上传到[docker.io/library/yyn],而这个库是官方库,只有官方用户才能上传。
4.练习:----给yyn镜像创建新的标签
重新上传添加了标签的镜像yyn---- yyndockerhhp202011/yyn
5.到网站上仓库查看上传的镜像信息—成功
6.退出登录的用户,并将yyndockerhhp202011/yyn镜像删除,在重新下载
5.12 面试问题
docker pull 下来的镜像文件都在哪?
初学 Docker 要反复告诫自己,Docker 不是虚拟机。 Docker不是虚拟机,Docker 镜像也不是虚拟机的 ISO 文件。Docker 的镜像是分层存储,每一个镜像都是由很多层,很多个文件组成。而不同的镜像是共享相同的层的,所以这是一个树形结构,不存在具体哪个文件是 pull 下来的镜像的问题。
具体镜像保存位置取决于系统。
一般Linux系统下,在 /var/lib/docker 里。
对于使用 Union FS 的系统(Ubuntu),如 aufs, overlay2 等,可以直接在 /var/lib/docker/{aufs,overlay2} 下看到找到各个镜像的层、容器的层,以及其中的内容。
对于CentOS这类没有Union FS的系统,会使用如devicemapper这类东西的一些特殊功能(如snapshot)模拟,镜像会存储于块设备里,因此无法看到具体每层信息以及每层里面的内容。
Docker里的镜像多为Ubuntu系统和debian系统,docker开发人员喜欢用这2个系统
软件新且多,内核版本高
cetnos/rhel都是服务器用的操作系统,稳定性好,运维人员用这2个系统