Docker学习笔记:docker基础知识

Docker开源项目背景

Docker是基于Go语言实现的开源容器项目,Docker自发布以来,因为其强大而灵活的功能,备受所有计算机界人士的关注,直到现在,多个相关开源组件项目的出现,逐渐使docker的生态体系变的完整起来。Docker的构想是要实现“Build,ship and Run Any App, Anywhere”,即通过对应用的封装、分发、部署、运行生命周期进行管理,达到应用组件级别的“一次封装,到处运行”。这里的应用组件,即可以是一个web应用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。

Docker在运维与开发中的优势

对开发和运维人员(DevOps)来说,最梦寐以求的效果可能就是一次创建或配置,之后可以在任何地方、任意时间让应用正常运行,而Docker正是实现这一终极目标的“瑞士军刀”。主要有以下几方面优势:
更快速的部署与交付: 使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成后,测试和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保在生产环境无缝运行。Docker可以快速创建和删除容器,实现快速迭代,节约开发、测试、部署的大量时间。
更高效的资源利用: 运行Docker容器不需要额外的虚拟化管理程序的支持,Docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。与传统虚拟机方式想比,Docker的性能要提高1—2个数量级。
更轻松的迁移和扩展: Docker容器几乎可以在任意平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等,同时支持主流平台的操作系统发行版本。
更简单的更新管理: 使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。

Docker与虚拟机的比较

作为一种轻量级的虚拟化方式,Docker在运行上跟传统的虚拟机方式想比具有如下显著优势:

特性容器虚拟机
启动速度秒级分钟级
性能接近原生较弱
内存代价很小较多
硬盘使用一般为MB一般为GB
运行密度单机支持上千个容器一般几十个
隔离性完全隔离完全隔离
迁移性优秀一般

Docker的三大核心概念

Docker大部分的操作都围绕着它的三大核心概念:镜像、容器、和仓库。

Docker镜像

Docker镜像类似于虚拟机镜像,可以将它理解为一个只读模板。例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了Apache应用程序,我们就可以将它称做一个apache镜像。镜像是创建Docker容器的基础

Docker容器

Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器都是彼此相互隔离、互不可见的。可以把容器看作一个简易版的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。
镜像自身是只读的。容器在从镜像中启动时,会在镜像的最上层创建一个可写层。

Docker仓库

Docker仓库类似于代码仓库,是Docker集中存放镜像文件的场所。
有时候我们会将Docker仓库和仓库注册服务器混为一谈,并不严格区分。实际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。根据所存储的镜像公开分享与否,Docker仓库可以分为公开仓库和私有仓库两种形式。
目前,最大的公开仓库是官方的Docker Hub,其中存放着数量庞大的镜像供用户下载。国内不少云服务提供商(如腾讯云、阿里云等)也提供了仓库的本地源,可以提供稳定的国内访问。
当然,如果不希望公开分享自己的镜像文件,Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。
当创建了自己的镜像之后,就可以使用push命令将其上传到指定的公有或者私有仓库。这样用户下次在另外一台机器上使用该镜像时,只需要将其从仓库上pull下来就可以了。

Docker的安装

一、打开所给的链接,下载到我们需要的两个rpm包
http://yum.dockerproject.org/repo/main/centos/7/Packages/
在这里插入图片描述
二、下载完成后,直接使用yum进行安装(yum install * -y),使用yum安装可以自动将一些依赖性安装
在这里插入图片描述
三、打开服务并查看版本
在这里插入图片描述
四、安装好docker后,ip addr 查看会发现docker多了一个自己的网卡和IP,这就表示我们将docker装好了
在这里插入图片描述

镜像的管理

docker search                                  ###查询镜像
docker pull                                    ###拉取镜像
docker push                                    ###推送镜像
docker images                                  ###查看本地镜像
docker inspect  ubuntu                         ###查看ubuntu镜像详情
docker save ubuntu > ubuntu.tar                ###导出镜像
docker load -i ubuntu.tar                      ###导入镜像
docker commit                                  ###更新镜像
docker rmi | docker image rm                   ###删除镜像

1、获取镜像
我们可以使用docker [image] pull命令直接从Docker Hub镜像源来下载镜像。该命令的格式为docker [image] pull NAME[:TAG].
其中,NAME是镜像仓库名称(用来区分镜像),TAG是镜像的标签(往往用来表示版本信息)。通常情况下,描述一个镜像需要包括“名称+标签”信息。
例如,获取一个Ubuntu 18.04系统的基础镜像可以使用命令:
docker pull ubuntu:18.04
在这里插入图片描述
对于Docker镜像来说,如果不显示指定TAG,则默认会选择latest标签,这会下载仓库中最新版本的镜像。
我们来获取一个最新的ubuntu镜像:
在这里插入图片描述
注意:一般来说,镜像的latest标签意味着该镜像的内容会跟踪最新版本的变更而变化,内容是不稳定的。因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的latest标记的镜像。

2、查看镜像信息
2、1.使用images命令列出镜像
使用docker images或者docker image ls命令可以列出本地主机上已有镜像的基本信息:
在这里插入图片描述
在列出的信息中,可以看到以下几个字段信息:
(1):来自于哪个仓库:比如ubuntu表示ubuntu系列的基础镜像;
(2):景象的标签信息,表示镜像的版本信息,标签只是标记,并不能表示镜像内容;
(3):镜像的ID(唯一标识镜像),如果有两个镜像的ID相同,说明他们实际上指向了同一个镜像,只是具有不同标签名称而已;
(4):创建时间,说明镜像最后的更新时间;
(5):镜像大小,优秀的镜像往往体积都比较小。

2、2. 使用tag命令添加镜像标签
为了方便在后续工作中使用特定镜像,还可以使用docker tag命令来为本地镜像任意添加新的标签。例如,添加一个新的myubuntu:latest镜像标签:
在这里插入图片描述
可以看到,myubuntu镜像的ID与ubuntu镜像的ID是完全一致的,它们实际上指向了同一个镜像文件,只是别名不同而已。这个其时就类似于linux中的软链接。

2、3.使用inspect命令查看详细信息
使用docker [image] inspect命令可以获取该镜像的详细信息,包括制作者、适应架构、各层的数字摘要等:
docker [image] inspect ubuntu:18.04
在这里插入图片描述
上面的代码返回的是一个JSON格式的消息,如果我们只要其中一项内容时,可以用-f来指定,例如,获取镜像的Architecture:
在这里插入图片描述
2、4.使用history命令查看镜像历史
既然镜像文件由多个层组成,那么怎么知道各个层的内容具体是什么呢?这个时候可以用history子命令,该命令会列出各层的创建信息。
例如:查看ubuntu:18.04镜像的创建过程,可以使用命令:
在这里插入图片描述
注意,过长的命令被自动截断了,可以使用前面提到的–no-trunc选项来输出完整命令。

3、搜寻镜像
使用docker search命令可以搜索Docker Hub官方仓库中的镜像。语法为docker search [option] keyword。支持的命令选项包括:

-f,	--filter filter:		过滤输出内容;
--format string:			格式化输出内容;
--limit int:				限制输出结果个数,默认为25个;
--no-trunc:					不截断输出结果。

例如:搜索官方提供的带nginx关键字的镜像,如下所示:
在这里插入图片描述
搜索所有收藏数超过4的关键词包括tensorflow的镜像:
在这里插入图片描述
4、删除和清理镜像
4、1.使用标签删除镜像
使用docker rmi或者docker image rm命令可以删除镜像,命令格式为docker rmi IMAGE [IMAGE…],其中IMAGE可以为标签或者ID。
支持选项:

-f,-force:强制删除镜像,即使又容器依赖它;
-no-prune:不要清理未带标签的父镜像。

删除myubuntu:latest镜像,可以使用命令:
在这里插入图片描述
删除该镜像不会对本地ubuntu:latest镜像产生影响,当同一个镜像拥有多个标签的时候,docker rmi命令只是删除了该镜像多个标签中的指定标签而已,并不影响镜像文件。当镜像仅剩最后一个或者只有一个的时候,通过docker rmi命令删除镜像,就可以看出会删除这个镜像文件的所有文件层:
在这里插入图片描述
4、2.使用镜像ID来删除镜像
当使用docker rmi命令,并且后面跟上镜像的ID(也可以是能进行区分的部分ID串前缀)时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。
注意:当有该镜像创建的容器存在时,镜像文件默认是无法被删除的,我们需要使用-f参数来强制删除,不过通常不推荐使用-f参数,而是先将创建的容器删除之后再删除镜像。

4、3.清理镜像
使用Docker一段时间后,系统可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prune命令来进行清理。

5、存出和载入镜像
5、1.存出镜像
如果要导出镜像到本地文件,可以使用docker [image] save命令,该命令支持-o、-output string参数,导出镜像到指定文件中。
例如,导出本地的ubuntu:18.04镜像为文件ubuntu_18.04.tar,如下所示:
在这里插入图片描述
5、2.载入镜像
可以使用docker [image] load将导出的tar文件再导入到本地镜像库。支持-i、-input string选项,从指定文件中读入镜像内容。
例如,从文件ubuntu_18.04.tar导入到本地镜像列表,可以使用命令:
docker load -i ubuntu_18.04.tar
或者
docker load < ubuntu_18.04.tar
这将导入镜像及其相关的元数据信息(包括标签等)。导入成功后,可以使用docker image命令进行查看,与原镜像一致。

容器的管理

# docker run -it --name vm1 ubuntu bash        ###创建容器
# docker ps -a                                 ###查看容器进程
# docker attach vm1                            ###连接容器
# docker top vm1                               ###查看容器状态
# docker logs vm1                              ###查看容器指令输出 -f 参数可以实时查看
# docker inspect vm1                           ###查看容器详情
# docker stats vm1                             ###查看容器资源使用率
# docker diff vm1                              ###查看容器修改
# docker run -d --name vm1 ubuntu bash -c "while true; do echo dream; sleep 1; done"            ###后台运行,后面为执行的命令。用docker attach vm1命令会一直输出dream
# docker stop vm1                              ###停止容器
# docker start vm1                             ###启动容器
# docker kill vm1                              ###强制干掉容器
# docker restart vm1                           ###重启容器
# docker pause/unpause vm1                     ###暂停/恢复容器
# docker rm vm1                                ###删除容器
# docker export vm1 > vm1.tar                  ###导出容器
# docker import vm1.tar image                  ###导入容器为镜像 image
# docker container prune                       ###删除所有未运行容器
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值