Docker学习-Docker底层原理和常用命令

目录

  • 前言 :)
  • 一、Docker底层原理
    • 1、Docker是怎么工作的?
    • 2、Docker为什么比VM快?
    • 3、Docker 所使用的底层技术
  • 二、Docker常用命令
    • 1、基础命令
      • 1) docker 命令 --help
      • 2)docker version
      • 3)docker info
    • 2、镜像命令
      • 1)docker images
      • 2)docker search
      • 3)docker pull
      • 4)docker rmi
    • 3、容器命令
      • 1)docker run
      • 2)docker ps
      • 3)exit | Ctrl + P + Q
      • 4)docker rm
      • 5)docker start | restart | stop | kill
    • 4、常用的其他命令
      • 1) docker run -d
      • 2)docker logs
      • 3)docker top
      • 4)docker inspect
      • 5)docker exec -it
      • 6)docker attach
  • 三、小结

前言

友情提示
本文学习需要了解一些Linux简单命令
个人博客:https://linzyblog.netlify.app/

一、Docker底层原理

1、Docker是怎么工作的?

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker的守护进程运行在宿主机上,通过Socket从客户端访问!DockerServer 接收到 Docker-Client 的指令,就会执行这个命令。

  • 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等
  • 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。

容器的实质是进程,与宿主机上的其他进程是共用一个内核,但与直接在宿主机执行的进程不同,容器进程运行在属于自己的独立的命名空间。命名空间隔离了进程间的资源,使得 a,b 进程可以看到 S 资源,而 c 进程看不到。

Docker学习-Docker底层原理和常用命令_第1张图片

2、Docker为什么比VM快?

  1. Docker有着比虚拟机更少的抽象层。
    1)虚拟机是硬件层抽象,虚拟硬件和操作系统。
    2)Docker是应用层抽象,只虚拟化操作系统 。

  2. Docker是基于宿主机的内核,VM是基于虚拟机虚拟化后的内核。
    1)当新建一个容器时,docker不需要像虚拟机需要加载一个操作系统内核。然而避免引寻、加载操作系统内核是比较费时费资源的过程。
    2)当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返回一个新建过程至少是分钟级别的。
    3)docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。

  3. Docker相比虚拟机更加轻量级和便携。
    Docker学习-Docker底层原理和常用命令_第2张图片

特性 Docker容器 虚拟机(VM)
操作系统 与宿主机共享OS 宿主机OS上运行虚拟机OS
存储大小 镜像小,便于存储和传输 镜像庞大(vmdk\vdi)等
运行性能 几乎无额外性能损失 操作系统额外的CPU、内存消耗
移植性 轻便、灵活,适应于Linux 笨重,与虚拟化技术耦合度高
硬件亲和性 面向软件开发者 面向硬件运维者
部署速度 快速,秒级 较慢,10s以上

3、Docker 所使用的底层技术

学习一下大佬的文章:https://blog.csdn.net/Tencent_TEG/article/details/109505143?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166122025416782391822038%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166122025416782391822038&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~pc_rank_34-4-109505143-null-null.142v42pc_rank_34,185v2control&utm_term=docker%E5%BA%95%E5%B1%82%E5%8E%9F%E7%90%86&spm=1018.2226.3001.4187

二、Docker常用命令

帮助文档地址:https://docs.docker.com/reference/

1、基础命令

1) docker 命令 --help

  • 作用:查看命令的帮助文档
  • 格式:
docker 命令 --help
  • 例子:

Docker学习-Docker底层原理和常用命令_第3张图片

2)docker version

  • 作用:显示Docker的版本信息。
  • 格式:
docker version [OPTIONS]
  • 可选项:
名称,简写 默认 解释
–format,-f 使用给定的 Go 模板格式化输出
  • 例子:

Docker学习-Docker底层原理和常用命令_第4张图片

3)docker info

  • 作用:显示docker的系统信息,显示的信息包括内核版本、容器数量和映像。
  • 格式:
docker info [OPTIONS]
  • 可选项:
名称,简写 默认 解释
–format,-f 使用给定的 Go 模板格式化输出
  • 例子:

Docker学习-Docker底层原理和常用命令_第5张图片

2、镜像命令

1)docker images

  • 作用:显示所有镜像、它们的存储库和标签以及它们的大小。
  • 格式:
docker images [OPTIONS] [REPOSITORY[:TAG]]
  • 可选项:
名称,简写 默认 解释
–all,-a 显示所有镜像(默认隐藏中间镜像)
–filter,-f 根据提供的条件过滤输出
–format 使用 Go 模板格式化打印镜像
–quiet,-q 仅显示图像 ID
  • [REPOSITORY[:TAG]]参数

该docker images命令采用一个可选[REPOSITORY[:TAG]]参数,将列表限制为与参数匹配的镜像。如果您指定 REPOSITORY但 no TAG,该docker images命令会列出给定存储库中的所有镜像。

在这里插入图片描述

  • 例子:

Docker学习-Docker底层原理和常用命令_第6张图片

名词 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小

2)docker search

  • 作用:在Docker Hub上搜索镜像
  • 格式:
docker search [OPTIONS] 镜像名
  • 可选项:
名称,简写 默认 解释
–filter,-f 根据提供的条件过滤输出
–format 使用 Go 模板格式化打印搜索
–limit 25 最大搜索结果数
  • 例子:

Docker学习-Docker底层原理和常用命令_第7张图片

–filter filter 通过搜索来过滤,例如–filter=STARS=300表示搜索出来的镜像STARS大于300的

Docker学习-Docker底层原理和常用命令_第8张图片

3)docker pull

  • 作用:从Docker Hub上拉取镜像, 如果没有提供标签,Docker 引擎将使用该:latest标签作为默认值。此命令提取debian:latest镜像。
  • 格式:
docker pull [OPTIONS] 镜像名[:tag|@DIGEST]
  • 可选项:
名称,简写 默认 解释
–all-tags,-a 下载存储库中的所有标记镜像
–disable-content-trust true 跳过镜像验证
–platform 如果服务器支持多平台,则设置平台
–quiet,-q 抑制详细输出
  • 例子:

Docker学习-Docker底层原理和常用命令_第9张图片
Docker学习-Docker底层原理和常用命令_第10张图片

注意:Docker 镜像可以由多个层组成。图层可以被镜像重用,例如,debian:jessie图像与debian:latest.拉取debian:jessie镜像只会拉取其元数据,而不是其层,因为所有层都已在本地存在。

Docker学习-Docker底层原理和常用命令_第11张图片

Docker 使用内容可寻址的镜像存储,镜像 ID 是涵盖镜像配置和层的 SHA256 摘要。在上面的示例中, debian:jessie并且debian:latest具有相同的图像 ID,因为它们实际上是用不同名称标记的相同图像。因为它们是同一个镜像,所以它们的层只存储一次,不会消耗额外的磁盘空间。

4)docker rmi

  • 作用:删除一个或多个镜像
  • 格式:
docker rmi [OPTIONS] 镜像id [镜像id...]
  • 可选项:
名称,简写 默认 解释
–force,-f 强制删除镜像
  • 例子:

Docker学习-Docker底层原理和常用命令_第12张图片
Docker学习-Docker底层原理和常用命令_第13张图片
删除所有镜像:

docker rmi -f $(docker images -aq)

3、容器命令

注意:必须存在镜像才能运行容器

我们这里使用centos作为例子来理解容器命令,需要先拉取centos的镜像

docker pull centos

1)docker run

  • 作用:创建一个新的容器并运行一个镜像

  • Docker的流程图:
    Docker学习-Docker底层原理和常用命令_第14张图片

  • 格式:

docker run [OPTIONS] 镜像id [COMMAND] [ARG...]
  • 可选项
名称,简写 默认 参数说明
–name 为容器分配名称,用来区分容器
–detach,-d 在后台运行容器并打印容器 ID
-it 使用交互式运行,进入容器查看内容
-p -p xxxx:yyyy:宿主机上xxxx端口对应容器中yyyy端口,在外部访问时用的是宿主机上的端口
-P(大写) 随机指定端口
  • 例子:

启动并进入容器

docker run -it centos bin/bash

在这里插入图片描述

注意:
如果出现这个错误,请用管理员权限执行即可。
在这里插入图片描述

2)docker ps

  • 作用:查看所有的容器
  • 格式:
docker ps [OPTIONS]
  • 可选项:
名称,简写 默认 参数说明
–all,-a 显示所有容器(默认显示刚刚运行)
–last,-n -1 显示 n 个最后创建的容器(包括所有状态)
–quiet,-q 仅显示容器 ID
  • 例子:

在这里插入图片描述

3)exit | Ctrl + P + Q

  • 作用:退出容器
  • 格式:
  1. exit 直接停止容器并退出
    Docker学习-Docker底层原理和常用命令_第15张图片
  2. Ctrl + P + Q 容器不停止退出
    Docker学习-Docker底层原理和常用命令_第16张图片

4)docker rm

  • 作用:删除一个或多个容器,不能删除正在运行的容器,除非用-f强制删除
  • 格式:
docker rm [OPTIONS] 容器id [容器id...] 
  • 可选项:
名称,简写 默认 参数说明
–force,-f 强制删除正在运行的容器(使用 SIGKILL)
–link,-l 删除指定链接
–volumes,-v 删除与容器关联的匿名卷
  • 例子:

Docker学习-Docker底层原理和常用命令_第17张图片

删除所有容器:

docker rm -f $(docker ps -aq)
docker ps -a -q|xargs docker rm

强制删除容器:

docker rm -f 容器id

Docker学习-Docker底层原理和常用命令_第18张图片

5)docker start | restart | stop | kill

  • 作用:启动 | 重启 | 停止 | 杀死 容器的操作
  • 格式:
  1. docker start 启动容器
docker start 容器id
  1. docker restart 重启容器
docker restart 容器id
  1. docker stop 停止容器
docker stop 容器id
  1. docker kill 杀死容器
docker kill 容器id

4、常用的其他命令

1) docker run -d

  • 作用:后台启动容器
  • 格式:
docker run -d 镜像名
  • 例子:

在这里插入图片描述

注意:docker 容器后台运行的时候,必须要有一个前台进程运行,如果docker发现没有应用,就会自动停止容器。

2)docker logs

  • 作用:获取容器的日志
  • 格式:
docker logs [OPTIONS] CONTAINER
  • 可选项:
名称,简写 默认 解释
–details 显示提供给日志的额外详细信息
–follow,-f 关注日志输出
–since 显示自时间戳(例如 2013-01-02T13:23:37Z)或相对时间(例如 42m 42 分钟)以来的日志
–tail,-n all 从日志末尾显示的行数
–timestamps,-t 显示时间戳
–until 在时间戳(例如 2022-08-24T17:57:37Z)或相对时间(e.g. 42m for 42 minutes)之前显示日志
  • 例子:

自己先编写一段shell脚本,以便容器可以有进程运行,不会自动停止:

docker run -d centos /bin/bash -c "while true;do echo linzy;sleep 1;done"

shell脚本:一直循环,每秒输出一条日志信息linzy

Docker学习-Docker底层原理和常用命令_第19张图片

3)docker top

  • 作用:显示容器的运行进程,查看容器中的进程信息。
  • 格式:
docker top 容器id
  • 例子:

在这里插入图片描述

4)docker inspect

  • 作用:查看镜像或容器的元数据
  • 格式:
docker inspect [OPTIONS] 镜像id|镜像名 [镜像id|镜像名...]
  • 可选项:
名称,简写 默认 解释
–format,-f 使用给定的 Go 模板格式化输出
–size,-s 如果类型是容器,则显示总文件大小
–type 返回指定类型的 JSON
  • 例子:

Docker学习-Docker底层原理和常用命令_第20张图片
Docker学习-Docker底层原理和常用命令_第21张图片

5)docker exec -it

  • 作用:进入正在运行的容器中,打开新的终端并运行新的命令
  • 格式:
docker exec -it 容器id baseShell
  • 例子:

Docker学习-Docker底层原理和常用命令_第22张图片

6)docker attach

  • 作用: 进入正在运行的容器中
  • 格式:
docker attach 容器id
  • 例子:

Docker学习-Docker底层原理和常用命令_第23张图片

三、小结

Docker学习-Docker底层原理和常用命令_第24张图片

命令 作用
attach 当前 shell 下 attach 连接指定运行镜像
build 通过 Dockerfile 定制镜像
commit 提交当前容器为新的镜像
cp 从容器中拷贝指定文件或者目录到宿主机中
create 创建一个新的容器,同 run 但不启动容器
diff 查看 docker 容器变化
events 从 docker 服务获取容器实时事件
exec 在已存在的容器上运行命令
export 导出容器的内容流作为一个 tar 归档文件[对应 import]
history 展示一个镜像形成历史
images 列出系统当前的镜像
import 从 tar 包中的内容创建一个新的文件系统映像[对应 export]
info 显示系统相关信息
inspect 查看容器或镜像的详细信息
kill 杀死指定 docker 容器
load 从一个 tar 包中加载一个镜像[对应 save]
login 注册或登录一个docker hub
logout 从当前 docker history 退出
logs 输出当前容器日志信息
port 查看映射端口对应的容器内部源端口
pause 暂停容器
ps 列出容器列表
pull 从docker hub拉取镜像
push 推送指定镜像或库镜像到docker hub
restart 重启运行容器
rm 移除一个或多个容器
rmi 移除一个或多个镜像[无容器使用该镜像才能删除,否则要删除相关容器或者 -f 强制删除]
run 创建一个新的容器并运行一个命令
save 保存一个镜像为 tar 包[对应 load]
search 在docker hub 中搜索镜像
start 启动容器
stop 停止容器
tag 给源中镜像打标签
top 查看容器中运行的进程信息
unpause 取消暂停容器
version 查看容器版本号
wait 截取容器停止时的退出状态值

你可能感兴趣的:(Docker,docker,学习,容器,linux,职场和发展)