当前位置: 首页 > news >正文

Docker 镜像、容器、仓库的概念及基本操作

Docker 包括三个基本概念:

镜像(Image)
容器(Container)
仓库(Repository)

这三部分组成了Docker的整个生命周期,如下图所示,容器是由镜像实例化而来的,这和我们学习的面向对象的概念十分相似,我们可以把镜像想象成类,把容器想象成类经过实例化后的对象,这样就非常好理解镜像和容器的关系了。

Docker镜像

Docker镜像(Image)类似于虚拟机的镜像,可以将他理解为一个面向Docker引擎的只读模板,包含了文件系统。

例如:一个镜像可以完全包含了Ubuntu操作系统环境,可以把它称作一个Ubuntu镜像。镜像也可以安装了Apache应用程序(或其他软件),可以把它称为一个Apache镜像。

镜像是创建Docker容器的基础,通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像。用户可以从网上下载一个已经做好的应用镜像,并通过命令直接使用。总之,应用运行是需要环境的,而镜像就是来提供这种环境。

Docker容器

Docker容器(Container)类似于一个轻量级的沙箱子(因为Docker是基于Linux内核的虚拟技术,所以消耗资源十分少),Docker利用容器来运行和隔离应用。

容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。

可以吧每个容器看作一个简易版的Linux系统环境(包括了root用户权限、进程空间、用户空间和网络空间),以及与运行在其中的应用程序打包而成的应用盒子。

镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。就像用ISO装系统之后,ISO并没有什么变化一样。

Docker仓库

Docker仓库(Repository)类似与代码仓库,是Docker集中存放镜像文件的场所。

有时候会看到有资料将Docker仓库和注册服务器(Registry)混为一谈,并不严格区分。实际上,注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04,12.04等不同版本的镜像。

根据存储的镜像公开分享与否,Docker仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

目前,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供稳定的国内访问。如果用户不希望公开分享自己的镜像文件,Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。

当用户创建了自己的镜像之后就可以使用push将它上传到指定的公有或则私有仓库。这样用户下次在另一台机器上使用该镜像时,只需将其从仓库pull下来就可以了。

命令收集:

容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker [ps|inspect|top|attach|exec|events|logs|wait|export|import|port]
容器rootfs命令 — docker [commit|cp|diff]
镜像仓库 — docker [login|pull|push|search]
本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]

查看docker信息:

$ docker version
# 或者
$ docker info

Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组(官方文档)

$ sudo usermod -aG docker $USER

服务启动,重启,状态

[hongdada@localhost home]$ systemctl stop docker.service
 
[hongdada@localhost home]$ systemctl restart docker.service
 
[hongdada@localhost home]$ systemctl status docker.service

images相关命令:

以镜像centos为例

登录仓库 docker login
查找镜像docker search centos
下载镜像docker pull centos
上传镜像docker push centos
删除镜像docker rmi centos  说明:如果有多个tag,则指定tag只会删除tag,而不会删除镜像本身。
查看镜像docker images
查看具体某一个镜像的详细信息:docker inspect  centos
更改tag: docker tag  docker.io/centos  21yunwei:latest
创建镜像docker commit  容器ID 镜像名称   注:创建镜像有三种方式,基于容器创建,基于本地模板创建,基于dockerfile创建
保存镜像docker save  -o testcentos.tar 21yunwei:latest
载入镜像docker  load < tesetcentos.tar
# 列出本机的所有 image 文件。
$ docker image ls

# 删除 image 文件
$ docker image rm [imageName]

# 搜索镜像
$ docker search mysql (输出信息包括镜像名字、描述、星级、是否为官方创建、是否自动创建)

# image 文件从仓库抓取到本地。
$ docker image pull library/hello-world

# 运行image文件
$ docker container run hello-world

 container相关命令:

列出本机正在运行的容器:docker container ls
列出本机所有容器,包括终止运行的容器:docker container ls --all
创建容器docker create -ti image  容器ID:cid
启动容器docker start  cid
运行容器docker run  -dit cid 等同于docker create+docker start
停止容器服务 docker container kill cid
关闭容器docker stop  cid
重启容器docker restart  cid
删除容器docker rm cid    #注意数据卷
删除所有容器docker rm `docker ps -a -q`  docker kill `docker ps -q`

阻塞对容器的其他调用方法,直到容器停止后退出 docker wait  cid
查看容器docker ps 或者docker ps -a
列出容器ID docker ps  -q (docker ps  -q  -a)
容器文件拷贝 docker  cp cid:路径 宿主机路径或docker  cp 宿主机路径你 cid:路径
查看容器进程docker top cid
查看容器日志docker logs cid
查看容器变化 docker diff  cid
进入容器docker exec -ti cid /bin/bash或者 docker attach cid(不推荐,终端显示相同,显示不安全且容易卡住)
查看容器详细信息 docker inspect cid 包括配置信息,名称,命令、网路配置以及很多有用数据
查看容器端口 docker port  cid

导出容器docker export 3ad>21yunwei.tar
导入容器cat 21yunwei.tar | docker import -test/centos:latest

 

 

https://greenlightt.github.io/2018/02/04/docker-image-container/

https://blog.csdn.net/SmalOSnail/article/details/53117496

http://blog.daocloud.io/principle-of-docker-image/

http://www.21yunwei.com/archives/4437

相关文章:

  • 十分钟讲清楚大众对区块链的误解
  • 移动端适配问题解决方案
  • 每天一个linux命令(20):find命令之exec
  • 多张图片合成一张图片、兼容问题总结
  • git 配置多个账户
  • CentOS下安装php扩展exif
  • Alembic基本使用
  • 机器学习中特征的处理及选择
  • Prometheus Querying Function rate() vs irate()
  • 多线程基础篇(3)——初试锁
  • java获取文件列表,并按照目录的深度及文件名的拼音的升序排列
  • 爬虫大作业
  • 散列表解决冲突的办法
  • 访谈:摩尔定律后时代,看13位行业专家如何看量子计算机的未来?
  • 青云QingCloud黄允松:关于云计算未来的三个预测
  • Angular数据绑定机制
  • Flex布局到底解决了什么问题
  • k8s 面向应用开发者的基础命令
  • mongo索引构建
  • PermissionScope Swift4 兼容问题
  • Theano - 导数
  • VuePress 静态网站生成
  • 关于extract.autodesk.io的一些说明
  • 基于组件的设计工作流与界面抽象
  • 前端之Sass/Scss实战笔记
  • 算法系列——算法入门之递归分而治之思想的实现
  • 为什么要用IPython/Jupyter?
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (function(){})()的分步解析
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)计算机毕业设计大学生兼职系统
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三)终结任务
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (转)EOS中账户、钱包和密钥的关系
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Core 中插件式开发实现
  • .Net IE10 _doPostBack 未定义
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET连接数据库方式
  • .NET微信公众号开发-2.0创建自定义菜单
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @RunWith注解作用
  • @Transactional类内部访问失效原因详解
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ C++ ] STL_list 使用及其模拟实现
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [C#]扩展方法
  • [CSS]中子元素在父元素中居中