5. Docker——先快速入门

本章讲解知识点

  • Docker 是什么
  • 为什么要使用 Docker
  • Docker 引擎
  • Docker 常用命令
  • Docker 生命周期详解

<br>

虽然我们上一章教大家搭建好了 Kubernetes + Docker 环境,但是我们本章是先从 Docker 讲起,为后面学习 Kubernetes 打好基础。

1. Docker 是什么

Docker 是一种开源的容器化平台,可以将应用程序及其所有依赖项打包到一个可移植的容器中,以便在任何地方运行。Docker 容器是轻量级、可移植的,具有很高的灵活性和可扩展性,可以帮助开发者更快地构建、打包、部署和运行应用程序。事实上,Docker 已成为容器标准

Docker 技术是基于 Linux 容器技术的进一步发展,通过使用容器技术,Docker 可以为应用程序提供一个独立的运行环境,避免了由于不同的环境和依赖项引起的兼容性问题。

Docker 的优势包括快速构建、部署和迁移应用程序,提高了应用程序的可靠性和稳定性,同时减少了资源的浪费。Docker 还可以与其他开发工具和平台集成,如 Kubernetes、Jenkins 和 AWS 等,为开发人员提供更加便捷的开发和部署体验。

<br>

2. 为什么要使用 Docker

解释为什么要使用 Docker,就等于解释为什么要使用容器。

2.1. 节省资源

容器相对于虚拟机,容器只需要具备 app 运行的配置和 SDK 即可,不需要创建完整的操作系统,使用的资源大大减少。

2.2. 资源隔离

比如一个虚拟机,跑一个 app,如 redis,没什么问题。但是我想跑不同版本的 redis,那么配置是不是可能冲突,环境是不是受到了污染?

而如果换用容器技术,一个容器就是一个小操作系统,一个虚拟机上可以跑多个容器,那么轻易实现了跑不同版本的 redis,而且还资源隔离,删除容器即卸载了对应版本,是不是非常方便。

2.3. 安装时间大大缩短和灵活移植

一个容器运行了 redis,对应的系统配置和 SDK 依赖都是一样的,那么如果我能将这个容器导出成文件格式,然后再另一台虚拟机上导入运行起来,这样是不是就节省了安装时间呢?没错,容器虚拟技术结合 Union File System(联合文件系统)技术就是这么做的。

这样带来的效率提升简直无可言喻。开发以容器虚拟技术开发应用后,将其打包导出,直接交给测试,测试在自己的环境上导入并运行,直接就可以完成测试,大大缩短了应用开发周期。而测试人员完成应用测试后,将其导出,直接就可以上线工业环境,缩短了业务上线周期。

甚至将文件开源,建立容器镜像库,全世界的人都可以使用,安装应用只需要下载对应镜像即可快速安装,大大减少了学习成本。

<br>

3. Docker 引擎

3.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):提供容器内部数据的持久化存储功能,包括数据卷、本地文件系统、网络存储等。

3.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 命令查看网络信息

[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": ""
            }
     

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

云计算面试题全解析 文章被收录于专栏

本专刊适合于立志转行云计算的小白,有一定的编程、操作系统、计算机网络、数据结构、算法基础。 本专刊同时也适合于面向云计算(Docker + Kubernetes)求职的从业者。 本专刊囊括了云计算、VMWare、Docker、Kubernetes、Containerd等一系列知识点的讲解,并且最后总

全部评论
多多点赞,会变好看,多多留言,会变有钱
点赞 回复 分享
发布于 2023-05-06 23:00 广东
🐴🉑
点赞 回复 分享
发布于 2023-05-08 22:39 广东
谢谢大佬的内容
点赞 回复 分享
发布于 2023-05-09 13:15 山东
我用 docker info 看到嘞不一样嘞 ?内容是这 Containers: 11 Running: 4 Paused: 0 Stopped: 7 Images: 5 Server Version: 18.09.9 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: systemd Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: ae07eda36dd25f8a1b98dfbf587313b99c0190bb runc version: N/A init version: fec3683 Security Options: seccomp Profile: default Kernel Version: 3.10.0-1160.el7.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 972.3MiB Name: node1 ID: X44V:WXP7:MFBY:BQNT:VOOH:AQTZ:G4KX:QR2K:JA47:ZQ2R:WNNG:NX6G Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Registry Mirrors: https://4u6ad4xd.mirror.aliyuncs.com/ Live Restore Enabled: false Product License: Community Engine
点赞 回复 分享
发布于 2024-02-07 15:58 河南
〈input〉
点赞 回复 分享
发布于 02-10 23:08 江苏

相关推荐

不愿透露姓名的神秘牛友
03-07 12:28
沟头学院:终于体会到明星大佬为什么要偷税漏税了
点赞 评论 收藏
分享
1个小白:可以考虑投一下字节
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
03-10 14:27
已编辑
点赞 评论 收藏
分享
评论
9
23
分享

创作者周榜

更多
牛客网
牛客企业服务