12. 一文快速学懂常用工具——docker 命令

本章讲解知识点

  • Docker 引擎
  • Docker 常用命令
  • Docker 生命周期详解
  • Containerd 与 Docker 命令对比

<br/>

  • 本专栏适合于软件开发刚入职的学生或人士,有一定的编程基础,帮助大家快速掌握工作中必会的工具和指令
  • 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅
  • 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。
  • 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。

<br/>

1. Docker 引擎

1.1 核心组件

Docker 引擎是一种基于客户端-服务器( C/S 架构)模型的应用程序。Docker 核心组件架构就长上图这个样子,由如下主要的组件构成:服务端 Docker 进程(Server Docker Daemon)、API 接口(REST API)、Docker 客户端命令行(Client Docker CLI)。Docker 服务端处理 Docker 客户端的请求,并执行相应的操作,并负责管理容器(Containers)、镜像(Images)、网络(Networks)、数据卷(Data Volumes)

核心组件的作用分别如下:

  1. 服务端 Docker 进程(Server Docker Daemon):负责管理 Docker 容器和镜像;处理客户端的请求,并执行相应的操作。
  2. API 接口(REST API):为 Docker 客户端提供与服务端 Docker daemon 交互的接口。
  3. Docker 客户端命令行(Client Docker CLI):允许用户与服务端 Docker daemon 交互,客户端发送的一系列请求,例如运行容器、构建镜像等操作,将最终由服务端 Docker daemon 来执行。
  4. Docker 镜像(Images):是一个轻量级、可执行的软件包,其中包含了运行应用程序所需的所有代码、库、配置文件等。容器镜像可以通过运行容器来启动,容器会使用镜像创建一个独立的运行环境,包含容器镜像中的所有文件和依赖项。
  5. Docker 容器(Containers):是 Docker 中的运行时实体,包含了应用程序及其依赖关系,可以被启动、停止、重启、删除等操作。
  6. Docker 网络(Networks):允许容器之间进行通信,并提供网络隔离、端口映射等功能。
  7. Docker 存储(Data Volumes):提供容器内部数据的持久化存储功能,包括数据卷、本地文件系统、网络存储等。

1.2 小实验

我们通过环境实操来看看这些组件,让我们有一个具体直观的感受。

1.通过 MobaXterm 登录数据节点 node1

Last login: Wed Mar 29 07:35:27 2023 from 192.168.18.1
[mtuser@node1 ~]$ su
Password:
[root@node1 mtuser]# unset HISTSIZE
[root@node1 mtuser]#

2.通过 docker info 命令查看客户端与服务端

[root@node1 mtuser]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.10.2
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.16.0
    Path:     /usr/libexec/docker/cli-plugins/docker-compose
  scan: Docker Scan (Docker Inc.)
    Version:  v0.23.0
    Path:     /usr/libexec/docker/cli-plugins/docker-scan

Server:
 Containers: 21
  Running: 20
  Paused: 0
  Stopped: 1
 Images: 11
 Server Version: 23.0.1
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 1

可以看到客户端与服务端的各类信息,如版本等,服务端还记录了各种状态检测。

3.查看服务端 Docker daemon

服务端 Docker daemon 是一个守护进程,守护进程就被放置在 centOS 系统的 /etc/systemd/system/multi-user.target.wants/ 目录下:

lrwxrwxrwx. 1 root root 38 Feb 19 00:20 docker.service -> /usr/lib/systemd/system/docker.service
lrwxrwxrwx. 1 root root 39 Feb 19 00:25 kubelet.service -> /usr/lib/systemd/system/kubelet.service
lrwxrwxrwx. 1 root root 46 Feb 19 07:47 NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
lrwxrwxrwx. 1 root root 36 Feb 19 07:47 sshd.service -> /usr/lib/systemd/system/sshd.service

你可以看到很多重要的进程都被放在该目录下,如 Docker、kubelet、sshd 等。这些进程会在开机时被 systemd 进程给拉起来。

4.通过 docker ps 命令来查看容器

CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS        PORTS     NAMES
0b8403d32d32   eb516548c180           "/coredns -conf /etc…"   10 hours ago   Up 10 hours             k8s_coredns_coredns-5c98db65d4-dvjnt_kube-system_9a7128e8-2acb-4932-92ec-0d08987a5ac8_10
5173c3176823   eb516548c180           "/coredns -conf /etc…"   10 hours ago   Up 10 hours             k8s_coredns_coredns-5c98db65d4-djhf4_kube-system_8c60a86c-48df-42c5-8300-073d9ad31ab3_3
9281b678cfc0   f73640fb5061           "/metrics-server --c…"   10 hours ago   Up 10 hours             k8s_metrics-server_metrics-server-765bbd5859-ssfsk_kube-system_5e22dc07-7817-46ae-ae24-2c75a1511432_3
f3348ad3f43a   k8s.gcr.io/pause:3.1   "/pause"                 10 hours ago   Up 10 hours             k8s_POD_coredns-5c98db65d4-djhf4_kube-system_8c60a86c-48df-42c5-8300-073d9ad31ab3_5

可以看到我们查出来的信息记录了容器的名称、运行时间、使用镜像等。

5.通过 docker images 命令查看镜像信息

[root@node1 multi-user.target.wants]# docker images
REPOSITORY                                               TAG           IMAGE ID       CREATED         SIZE
nginx                                                    my-all        adb14340751e   5 weeks ago     171MB
redis                                                    latest        7614ae9453d1   15 months ago   113MB
k8s.gcr.io/metrics-server/metrics-server                 v0.5.2        f73640fb5061   16 months ago   64.3MB
registry.aliyuncs.com/google_containers/kube-proxy       v1.15.12      00206e1127f2   2 years ago     82.5MB
k8s.gcr.io/coredns                                       1.3.1         eb516548c180   4 years ago     40.3MB
registry.aliyuncs.com/google_containers/pause            3.1           da86e6ba6ca1   5 years ago     742kB

6.通过 docker network ls 命令查看网络信息,docker network inspect 可以查看网络的详细信息。

[root@node1 multi-user.target.wants]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
5799c2d7d17a   bridge    bridge    local
17bce51528bb   host      host      local
d635ff5a1e25   none      null      local

查看具体的信息:

[root@node1 multi-user.target.wants]# docker network inspect 17bce51528bb
[
    {
        "Name": "host",
        "Id": "17bce51528bbf722d91619158cae222061b7982335afb3427a916c393e4cf4bd",
        "Created": "2023-02-19T00:20:15.348822313-05:00",
        "Scope": "local",
        "Driver": "host",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": []
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "6255674a18b7429b0428ad1596a4e057cd3809452e43a90ee1bda6224ca50ea5": {
                "Name": "k8s_POD_kube-proxy-nzmw5_kube-system_1700d664-d1cb-46dc-ad0e-3d2e0eb8cac8_6",
                "EndpointID": "d8d11d335c4032cbdbb3e9dc89c34f363b8ece9e6196d52536768dc12293636e",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            },
            "f23b51b3aed38196cdf011467ac9491af868f0ea7e554706819c135d45500afb": {
                "Name": "k8s_POD_kube-flannel-ds-ch66n_kube-system_9efb5869-20d7-425b-b684-f422ac8248ca_6",
                "EndpointID": "ae6dc64f21286467504b4b979091f30e4213b98a4498e966cd4e2fd335318af8",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

7.通过 docker volume ls 命令查看卷信息,docker volume inspect 可以查看数据卷的详细信息。

[root@node1 multi-user.target.wants]# docker volume ls
DRIVER    VOLUME NAME

当前没有给容器挂卷。

8.组件数据的存储位置

我们进入 /var/lib/docker 目录,相关数据都是存储在这里

[root@node1 docker]# ll
drwx--x---. 23 root root  4096 Mar 29 07:36 containers
drwx------.  3 root root    22 Feb 19 00:20 image
drwxr-x---.  3 root root    19 Feb 19 00:20 net

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

如题:一文快速学懂常用工具——包含Git、GDB、Makefile、Linux指令等常用工具的快速入门及实操,还包含相关面试题。

全部评论

相关推荐

M_bao:换个排版吧哥们,看着费劲
点赞 评论 收藏
分享
11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
评论
1
3
分享
牛客网
牛客企业服务