docker镜像简介和docker常用基础命令

文章目录

  • docker镜像简介和docker常用基础命令
    • 1:docker镜像概述
    • 1。1:什么是docker镜像
    • 1.2:docker镜像的获取方式
    • 2:docker的镜像分层
    • 3:docker存储驱动
      • AUFS
      • OverlayFS
      • DeviceMapper
      • docker registry
    • 4:docker常用基础命令

1:docker镜像概述

1。1:什么是docker镜像

Docker镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的程序,它包含运行某个程序所需要所有内容,包括代码、库文件、环境变量和配置文件。

简单来说Docker镜像就好比是一个模板,可以通过这个模板来创建容器服务;一个镜像可以创建多个容器(程序运行在容器中)。

1.2:docker镜像的获取方式

从远程仓库下载
朋友拷贝给你
自己制作docker镜像(DockerFile)

2:docker的镜像分层

docker的镜像分层基于联合文件系统
Docker的镜像实际上由一层一层的文件系统组成,使用层级的文件系统UnionFS。
典型的Linux文件系统由bootfs和rootfs两部分组成。

bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
rootfs (root file system) ,在bootfs之上。包含的就是典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如:Centos、Ubuntu等等。
这里也解释了为什么虚拟机占用空间非常大通常以G为单位,为什么docker这里才几十上百M?

对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就行了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。

3:docker存储驱动

docker提供了多种存储驱动来实现不同的方式存储镜像,下面是常用的几种存储驱动:

AUFS
OverlayFS
Devicemapper
Btrfs
VFS

AUFS

AUFS(AnotherUnionFS)是一种Union FS,是文件级的存储驱动。AUFS是一个能透明覆盖一个或多个现有文件系统的层状文件系统,把多层合并成文件系统的单层表示。简单来说就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统。这种文件系统可以一层一层地叠加修改文件。无论底下有多少层都是只读的,只有最上层的文件系统是可写的。当需要修改一个文件时,AUFS创建该文件的一个副本,使用CoW将文件从只读层复制到可写层进行修改,结果也保存在可写层。在Docker中,底下的只读层就是image,可写层就是Container。

AUFS文件系统据说有3W行代码,而ext4文件系统却只有4000-5000行左右代码,这些代码是要被整合进内核的,后来AUFS申请要被合并进内核代码的时候,linuz觉得它这代码太过臃肿,于是拒绝了。因此AUFS这个文件系统一直以来就不是linux内核中自有的文件系统,想用AUFS这个文件系统的话,必须自己向内核打补丁并去编译使用它,但redhat系列的操作系统一向以稳定著称,不会干这种出格的事,所以在redhat系列操作系统中使用AUFS并无可能。而ubuntu上的docker默认使用的就是AUFS。

OverlayFS

Overlay是Linux内核3.18(也就是centos7)后支持的,也是一种Union FS,和AUFS的多层不同的是Overlay只有两层:一个upper文件系统和一个lower文件系统,分别代表Docker的镜像层和容器层。当需要修改一个文件时,使用CoW将文件从只读的lower复制到可写的upper进行修改,结果也保存在upper层。在Docker中,底下的只读层就是image,可写层就是Container。目前最新的OverlayFS为Overlay2。

AUFS和Overlay都是联合文件系统,但AUFS有多层,而Overlay只有两层,所以在做写时复制操作时,如果文件比较大且存在比较低的层,则AUSF会慢一些。而且Overlay并入了linux kernel mainline,AUFS没有。目前AUFS已基本被淘汰。

DeviceMapper

Device mapper是Linux内核2.6.9后支持的,提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略。AUFS和OverlayFS都是文件级存储,而Device mapper是块级存储,所有的操作都是直接对块进行操作,而不是文件。Device mapper驱动会先在块设备上创建一个资源池,然后在资源池上创建一个带有文件系统的基本设备,所有镜像都是这个基本设备的快照,而容器则是镜像的快照。所以在容器里看到文件系统是资源池上基本设备的文件系统的快照,并没有为容器分配空间。当要写入一个新文件时,在容器的镜像内为其分配新的块并写入数据,这个叫用时分配。当要修改已有文件时,再使用CoW为容器快照分配块空间,将要修改的数据复制到在容器快照中新的块里再进行修改。

OverlayFS是文件级存储,Device mapper是块级存储,当文件特别大而修改的内容很小,Overlay不管修改的内容大小都会复制整个文件,对大文件进行修改显然要比小文件要消耗更多的时间,而块级无论是大文件还是小文件都只复制需要修改的块,并不是整个文件,在这种场景下,显然device mapper要快一些。因为块级的是直接访问逻辑盘,适合IO密集的场景。而对于程序内部复杂,大并发但少IO的场景,Overlay的性能相对要强一些。

docker registry

启动容器时,docker daemon会试图从本地获取相关的镜像,本地镜像不存在时,其将从Registry中下载该镜像并保存到本地。

Registry用于保存docker镜像,包括镜像的层次结构和元数据。用户可以自建Registry,亦可使用官方的Docker Hub。

docker registry的分类:

Sponsor Registry:第三方的Registry,供客户和Docker社区使用
Mirror Registry:第三方的Registry,只让客户使用
Vendor Registry:由发布docker镜像的供应商提供的registry
Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry
docker registry的组成:

Repository
由某特定的docker镜像的所有迭代版本组成的镜像仓库
一个Registry中可以存在多个Repository
Repository可分为“顶层仓库”和“用户仓库”
用户仓库名称格式为“用户名/仓库名”
每个仓库可包含多个Tag(标签),每个标签对应一个镜像
Index
维护用户帐户、镜像的检验以及公共命名空间的信息
相当于为Registry提供了一个完成用户认证等功能的检索接口
Docker Registry中的镜像通常由开发人员制作,而后推送至“公共”或“私有”Registry上保存,供其他人员使用,例如“部署”到生产环境。

4:docker常用基础命令

命令 功能
docker search 查找镜像
docker pull 拉取镜像
docker images 列出本地镜像
docker create 创建一个新的容器但不启用他
docker start 启动一个已停止的容器
docker run 创建一个新的容器并运行一个命令
docker attach 连接到正在运行的容器
docker ps 列出容器
docker logs 获取容器的日志
docker restart 重启容器
docker stop 停止一个运行中的容器
docker kill 杀掉一个运行中的容器
docker rm 删除一个或多个容器
docker exec 在运行的容器中执行命令
docker info 显示 Docker 系统信息,包括镜像和容器数
docker inspect 获取容器/镜像的元数据

docker search
查找名字为httpd的镜像


[root@localhost ~]# docker search httpd
NAME                                 DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
httpd                                The Apache HTTP Server Project                  4106      [OK]
centos/httpd-24-centos7              Platform for running Apache httpd 2.4 or bui…   44
centos/httpd                                                                         35                   [OK]
clearlinux/httpd                     httpd HyperText Transfer Protocol (HTTP) ser…   2
hypoport/httpd-cgi                   httpd-cgi                                       2                    [OK]
solsson/httpd-openidc                mod_auth_openidc on official httpd image, ve…   2                    [OK]
dockerpinata/httpd                                                                   1
nnasaki/httpd-ssi                    SSI enabled Apache 2.4 on Alpine Linux          1
lead4good/httpd-fpm                  httpd server which connects via fcgi proxy h…   1                    [OK]
publici/httpd                        httpd:latest                                    1                    [OK]
inanimate/httpd-ssl                  A play container with httpd, ssl enabled, an…   1                    [OK]
dariko/httpd-rproxy-ldap             Apache httpd reverse proxy with LDAP authent…   1                    [OK]
manageiq/httpd                       Container with httpd, built on CentOS for Ma…   1                    [OK]
centos/httpd-24-centos8                                                              1
httpdocker/kubia                                                                     0
patrickha/httpd-err                                                                  0
manageiq/httpd_configmap_generator   Httpd Configmap Generator                       0                    [OK]
amd64/httpd                          The Apache HTTP Server Project                  0
manasip/httpd                                                                        0
httpdss/archerysec                   ArcherySec repository                           0                    [OK]
paketobuildpacks/httpd                                                               0
sandeep1988/httpd-new                httpd-new                                       0
e2eteam/httpd                                                                        0
19022021/httpd-connection_test       This httpd image will test the connectivity …   0
sherazahmedvaival/httpd-php-fpm74                                                    0

docker pull
拉取镜像


[root@localhost ~]# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
1efc276f4ff9: Pull complete
aed046121ed8: Pull complete
4340e7be3d7f: Pull complete
80e368ef21fc: Pull complete
80cb79a80bbe: Pull complete
Digest: sha256:343452ec820a5d59eb3ab9aaa6201d193f91c3354f8c4f29705796d9353d4cc6
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest

docker images
列出本地镜像

[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
httpd         latest    f2a976f932ec   2 days ago      145MB
hello-world   latest    feb5d9fea6a5   10 months ago   13.3kB

docker create
创建容器但不运行他


[root@localhost ~]# docker create --name httpd httpd
351dbb3e9981677c67f8c3a409cd66fdd0422a4d1fe2c0eb86a3e24b542e51aa

docker start
启动容器

[root@localhost ~]# docker start httpd
httpd

docker run
创建一个新的容器并运行一个命令

[root@localhost ~]# docker run -it --name httpd1  httpd /bin/bash
root@9849bf2c8aa7:/usr/local/apache2#

docker attach
连接到正在运行的容器


[root@localhost ~]# docker attach httpd1
root@9849bf2c8aa7:/usr/local/apache2#

docker ps
列出容器


[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND              CREATED              STATUS                       PORTS     NAMES
9849bf2c8aa7   httpd     "/bin/bash"          About a minute ago   Exited (130) 2 seconds ago             httpd1
351dbb3e9981   httpd     "httpd-foreground"   3 minutes ago        Up 2 minutes                 80/tcp    httpd

docker logs
获取容器的日志


[root@localhost ~]# docker logs httpd1
root@9849bf2c8aa7:/usr/local/apache2# exxit
bash: exxit: command not found
root@9849bf2c8aa7:/usr/local/apache2# exit
exit
root@9849bf2c8aa7:/usr/local/apache2# docker ps -a
bash: docker: command not found
root@9849bf2c8aa7:/usr/local/apache2# docker ps -aex^C
root@9849bf2c8aa7:/usr/local/apache2# exit
exit

docker restart
重启容器


[root@localhost ~]# docker restart httpd1
httpd1

docker stop
停止一个运行中的容器


[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS          PORTS     NAMES
9849bf2c8aa7   httpd     "/bin/bash"          3 minutes ago   Up 26 seconds   80/tcp    httpd1
351dbb3e9981   httpd     "httpd-foreground"   4 minutes ago   Up 4 minutes    80/tcp    httpd
[root@localhost ~]# docker stop httpd
httpd
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS          PORTS     NAMES
9849bf2c8aa7   httpd     "/bin/bash"   3 minutes ago   Up 37 seconds   80/tcp    httpd1

docker kill
杀掉一个运行中的容器

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS              PORTS     NAMES
9849bf2c8aa7   httpd     "/bin/bash"   3 minutes ago   Up About a minute   80/tcp    httpd1
[root@localhost ~]# docker kill httpd1
httpd1
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

docker rm
删除一个或多个容器


[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS                          PORTS     NAMES
9849bf2c8aa7   httpd     "/bin/bash"          4 minutes ago   Exited (137) 26 seconds ago               httpd1
351dbb3e9981   httpd     "httpd-foreground"   6 minutes ago   Exited (0) About a minute ago             httpd
[root@localhost ~]# docker rm httpd1
httpd1
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS                          PORTS     NAMES
351dbb3e9981   httpd     "httpd-foreground"   6 minutes ago   Exited (0) About a minute ago             httpd

docker exec
在运行的容器中执行命令


[root@localhost ~]# docker exec -it  httpd  /bin/bash
root@351dbb3e9981:/usr/local/apache2#

docker info
显示 Docker 系统信息,包括镜像和容器数


[root@localhost ~]# docker info
Client:Context:    defaultDebug Mode: falsePlugins:app: Docker App (Docker Inc., v0.9.1-beta3)buildx: Docker Buildx (Docker Inc., v0.8.2-docker)scan: Docker Scan (Docker Inc., v0.17.0)
............................
............................

docker inspect
获取容器/镜像的元数据

[root@localhost ~]# docker inspect  httpd
[{"Id": "351dbb3e9981677c67f8c3a409cd66fdd0422a4d1fe2c0eb86a3e24b542e51aa","Created": "2022-08-04T07:51:41.674516097Z","Path": "httpd-foreground",
.........................
.........................

docker镜像简介和docker常用基础命令相关推荐

  1. DockerKubernetes ❀ Docker镜像与容器相关操作基础命令详解

    文章目录 1.Docker信息查询 1.1 版本信息 1.2 详细信息 1.3 帮助命令 2.镜像命令 2.1 本地镜像查看 2.2 镜像搜索 2.3 镜像拉取 2.4 镜像删除 3.容器命令 3.1 ...

  2. docker 一起性重启所有镜像_docker系列四之docker镜像与容器的常用命令

    docker镜像与容器的常用命令 一.概述 docker的镜像于容器是docker中两个至关重要的概念,首先给各位读者解释一下笔者对于这两个概念的理解.镜像,我们从字面意思上看,镜子里成像,我们人站在 ...

  3. CentOS常用基础命令大全

    这篇文章主要介绍了CentOS常用基础命令大全,学习centos的朋友需要掌握的知识,需要的朋友可以参考下 1.关机 (系统的关机.重启以及登出 ) 的命令 shutdown -h now 关闭系统( ...

  4. docker镜像加速,docker更换为国内镜像

    docker镜像加速,docker更换为国内镜像 一.使用官方镜像 二.Docker守护进程配置加速器 相关博文原文地址: CSDN:让我思考一下 :docker更换为国内镜像 一.使用官方镜像 Do ...

  5. 国产达梦数据库学习笔记(一):NeoKylin7.0安装及配置与常用基础命令

    国产达梦数据库学习笔记(一):NeoKylin7.0安装及配置与常用基础命令 以VMware Workstation Pro 15环境下的NeoKylin7.0与DM8为例 中标麒麟系统NeoKyli ...

  6. Linux常用基础命令

    Linux常用基础命令 腾讯在线文档(优化版): https://docs.qq.com/doc/DQmdRTGhIUXV0Vmxm 1.创建目录,文件: mkdir -p /root/a/b/c/d ...

  7. 在linux系统环境中 常用的关机命令,Linux常用基础命令整理:关机命令、查看目录下文件命令等...

    整理了一些Linux常用基础命令,欢迎指正. 首先记住四个热键,学会这四个键,收益一辈子. Tab按键---命令补齐功能 Ctrl+c按键---停掉正在运行的程序 Ctrl+d按键---相当于exit ...

  8. CentOS常用基础命令汇总

    CentOS常用基础命令汇总 1.关机 (系统的关机.重启以及登出 ) 的命令 shutdown -h now 关闭系统(1) init 0 关闭系统(2) telinit 0 关闭系统(3) shu ...

  9. Linux常用基础命令(很全)

    Linux常用基础命令 Linux命令格式 Linux 常见用户管理命令 创建新用户 Linux文件及目录管理命令 绝对路径和相对路径 cd命令 ls命令 pwd命令 mkdir命令 touch命令 ...

最新文章

  1. Can't connect to local MySQL Server throught socket '/var/run/mysqld/mysqld.sock'(2)
  2. 正则 -12至+14 闭区间,小数位只能是(0.25,0.5,0.50,0.75,0.0,0.00) 前面的正负符号可选...
  3. 刘歧:FFmpeg Filter深度应用
  4. 在JPA中处理Java的LocalDateTime
  5. 2019沙雕失误瞬间!哈哈哈哈笑出猪叫...
  6. 40行代码教你利用Python网络爬虫批量抓取小视频
  7. stats | 线性回归(二)——模型假设和模型估计
  8. 人脸检测(三)--Haar特征原理及实现
  9. [kuangbin带你飞] 专题一简单搜索
  10. yandex定位插件
  11. 牛客-Java计算个人所得税
  12. Dubbo概述及架构图
  13. QQ便签不见了怎么办?腾讯QQ便签停止运营下架后导出恢复QQ便签内容的解决办法
  14. ubuntu安装gem和fastlane
  15. 流量焦虑意外带来契机,“福禄控股们”赚钱容易做大难?
  16. 常用数学公式 关于正态分布的20210806
  17. 马斯克:特斯拉汽车卡拉OK功能即将推出
  18. 一条通往合格动力电池热管理仿真和设计工程师之路
  19. java利用切面(aspect)记录日志实现性能跟踪以及用户行为分析
  20. STC15W408AS-35I-DIP28引脚功能图

热门文章

  1. 我们终究遇上更优秀的自己,挥手向2022年告别吧|2022年度总结
  2. 防抖和节流以及应用场景
  3. c/c++下取消结构体字节对齐方法
  4. html输入页码跳转,如何为WordPress添加输入页码跳转功能?
  5. 8.1 Python图像处理之图像典型分割-SUSAN边缘检测
  6. 测站坐标系、地心非惯性系、经纬高互转
  7. 三柏硕深交所上市:市值39亿 预计9个月营收降幅超30%
  8. ArcGIS 通过 Excel 发布要素服务教程
  9. 看看印度的软件外包?
  10. 设计模式-创建型模式(单例、简工、工方)