【Kubernetes 入门实战课】Day02——初识容器

系列文章目录

【Kubernetes 入门实战课】Day01——搭建kubernetes实验环境(一)



前言

俗话说:“万事开头难”,对于 Kubernetes 这个庞大而陌生的领域来说更是如此,如何迈出学习的第一步非常关键,所以,今天我们先从最简单、最基本的知识入手,聊聊最流行的容器技术 Docker,先搭建实验环境,再动手操作一下,进而破除它的神秘感。


一、Docker的诞生

2013 年 3 月 15 日,在北美的圣克拉拉市召开了一场 Python 开发者社区的主题会议 PyCon,研究和探讨各种 Python 开发技术和应用,与我们常说的“云”“PaaS”“SaaS”根本毫不相关。在当天的会议日程快结束时,有一个“闪电演讲”(lighting talk)的小环节。其中有一位开发者,用了 5 分钟的时间,做了题为 “The future of Linux Containers” 的演讲,不过临近末尾因为超时而被主持人赶下了台,场面略显尴尬。

PyCon2013 大会之后,许多人都意识到了容器的价值和重要性,发现它能够解决困扰了云厂商多年的打包、部署、管理、运维等问题,Docker 也就迅速流行起来,成为了 GitHub 上的明星项目。然后在几个月的时间里,Docker 更是吸引了 Amazon、Google、Red Hat 等大公司的关注,这些公司利用自身的技术背景,纷纷在容器概念上大做文章,最终成就了我们今天所看到的至尊王者 Kubernetes 的出现。

二、Docker的形态

目前使用 Docker 基本上有两个选择:Docker Desktop 和 Docker Engine。

1、Docker Desktop

①、专门针对 个人使用而设计的,支持Mac和Windows快速安装
②、具有直观的图形界面
③、集成了许多周边工作,方便易用
④、对个人学习免费,受条款限制不能商用

2、Docker Engine

①、完全免费
②、只能在Linux上运行,使用命令行操作,缺乏辅助工具
③、哥哥公司生产环境中实际使用的产品

因此接下来我们学习的就是 Docker Engine ,之后的Docker通常指的就是Docker Engine。

二、Docker的安装

我们已经在 Linux 虚拟机里安装了一些常用软件,用的是Centos中的包管理工具yum,所以,我们仍然可以使用同样的方式来安装Docker。

1、服务器连接外网安装

[root@bogon ~]# yum install -y docker

我们可以直接使用yum安装docker,前提是需要我们的虚拟机通外网。安装成功后,我们支持docker version命令会发现,提示Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?,因此需要启动docker

[root@bogon ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
#启动docker
[root@bogon ~]# systemctl start docker

Docker Engine 不像 Docker Desktop 那样可以安装后就直接使用,必须要做一些手工调整才能用起来,所以你还要在安装完毕后执行下面的两条命令:


[root@bogon ~]# systemctl start docker        #启动docker服务
[root@bogon ~]# sudo usermod -aG docker ${USER}   #当前用户加入docker组

需要将普通用户加入docker组中,才可以使用普通用户执行docker相关操作。值得注意的是,我们在实验环境是直接使用root操作的,在正式环境是不允许使用root用户进行系列操作的

现在我们就可以来验证 Docker 是否安装成功了,使用的命令是 docker version 和 docker info。

#docker version 会输出 Docker 客户端和服务器各自的版本信息
[root@bogon ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-209.git7d71120.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      7d71120/1.13.1
 Built:           Wed Mar  2 15:25:43 2022
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-209.git7d71120.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      7d71120/1.13.1
 Built:           Wed Mar  2 15:25:43 2022
 OS/Arch:         linux/amd64
 Experimental:    false
#docker info 会显示当前 Docker 系统相关的信息,例如 CPU、内存、容器数量、镜像数量、容器运行时、存储文件系统
[root@bogon ~]# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.13.1
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: journald
Cgroup Driver: systemd
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: docker-runc runc
Default Runtime: docker-runc
Init Binary: /usr/libexec/docker/docker-init-current
containerd version:  (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)
runc version: 8891bca22c049cd2dcf13ba2438c0bac8d7f3343 (expected: 9df8b306d01f59d3a8029be411de015b7304dd8f)
init version: fec3683b971d9c3ef73f284f176672c44b448662 (expected: 949e6facb77383876aeff8a6944dde66b3089574)
Security Options:
 seccomp
  WARNING: You're not using the default seccomp profile
  Profile: /etc/docker/seccomp.json
 selinux
Kernel Version: 3.10.0-862.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 3
CPUs: 1
Total Memory: 3.685 GiB
Name: bogon
ID: 2ZNA:3YMR:P3LG:6SAO:ZZ5B:VVFC:N52V:RO3F:DT4C:SZEH:KXVS:4GO2
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
Registries: docker.io (secure)
[root@bogon ~]#

2、服务器不通外网

如果服务器不通外网,这会使得我们安装docker花费更多的时间,因此我们可以使用脚本一键安装。
一键安装Docker
执行安装脚本后,后续执行docker version和docker info,可以正常查看到当前docker的版本等信息。

三、Docker的使用

首先,我们使用命令 docker ps,它会列出当前系统里运行的容器,就像我们在 Linux 系统里使用 ps 命令列出运行的进程一样。
在这里插入图片描述
因为我们刚刚安装好 Docker 环境,这个时候还没有运行任何容器,所以列表显然是空的

注意,所有的 Docker 操作都是这种形式:以 docker 开始,然后是一个具体的子命令,之前的 docker version 和 docker info 也遵循了这样的规则。你还可以用 help 或者 --help 来获取帮助信息,查看命令清单和更详细的说明。
在这里插入图片描述
接下来,让我们尝试另一个非常重要的命令 docker pull ,从外部的镜像仓库(Registry)拉取一个 busybox 镜像(image),你可以把它类比成是Centos里的“yum install”下载软件包:

[root@bogon ~]# docker pull busybox
Using default tag: latest
Trying to pull repository docker.io/library/busybox ...
latest: Pulling from docker.io/library/busybox
205dae5015e7: Pull complete
Digest: sha256:7b3ccabffc97de872a30dfd234fd972a66d247c8cfc69b0550f276481852627c
Status: Downloaded newer image for docker.io/busybox:latest

在这里插入图片描述
我们再执行命令 docker images ,它会列出当前 Docker 所存储的所有镜像:
在这里插入图片描述

[root@bogon ~]# docker images
#镜像仓库			tag id信息			镜像id				创建时间				镜像大小
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/busybox   latest              66ba00ad3de8        6 days ago          4.87 MB

这条命令会在我们的终端上,输出计算机世界最著名的语句“hello world”:

[root@bogon ~]# docker run busybox echo hello world
hello world

然后我们再用 docker ps 命令,加上一个参数 -a ,就可以看到这个已经运行完毕的容器:
在这里插入图片描述

三、Docker的架构

Docker Engine 的架构,精准地描述了 Docker Engine 的内部角色和工作流程:
在这里插入图片描述
刚才我们敲的命令行 docker 实际上是一个客户端 client ,它会与 Docker Engine 里的后台服务 Docker daemon 通信,而镜像则存储在远端的仓库 Registry 里,客户端并不能直接访问镜像仓库。

Docker client 可以通过 build、pull、run等命令向 Docker daemon 发送请求,而 Docker daemon 则是容器和镜像的“大管家”,负责从远端拉取镜像、在本地存储镜像,还有从镜像生成容器、管理容器等所有功能。

所以,在 Docker Engine 里,真正干活的其实是默默运行在后台的 Docker daemon,而我们实际操作的命令行工具“docker”只是个“传声筒”的角色。

总结

Docker Engine 是典型的客户端 / 服务器(C/S)架构,命令行工具 Docker 直接面对用户,后面的 Docker daemon 和 Registry 协作完成各种功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值