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

news2024/11/26 14:46:04

系列文章目录

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


文章目录

  • 系列文章目录
  • 前言
  • 一、Docker的诞生
  • 二、Docker的形态
    • 1、Docker Desktop
    • 2、Docker Engine
  • 二、Docker的安装
    • 1、服务器连接外网安装
    • 2、服务器不通外网
  • 三、Docker的使用
  • 三、Docker的架构
  • 总结


前言

俗话说:“万事开头难”,对于 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 协作完成各种功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/364944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb11-死锁

目录 1.死锁定义 1.1.代码演示 1.2.使用jconsole/jvisualvm/jmc查看死锁 ①使用jconsole:最简单。 ②使用jvisualvm:(Java虚拟机)更方便,更直观,更智能,更高级,是合适的选择。 …

Melis4.0[D1s]:2.启动流程(GUI桌面加载部分)跟踪笔记

文章目录0. 控制台输出信息等级设置0.1 设置log level 4 无法正常启动1.宏观启动流程1.1 控制台入口函数finsh_thread_entry()执行《startup.sh》1.2 《startup.sh》启动桌面GUI模块1.2.1 《startup.sh》加载 desktop.mod1.2.2 desktop.mod加载 init.axf1.2.3 init.axf 介绍1.…

C#与三菱PLC MC协议通信,Java与三菱PLC MC协议通信

三菱PLC的MC协议是一种常用的通信协议,用于实现三菱PLC与其他设备之间的通信。以下是一些关于MC协议的基本信息:协议格式MC协议的通信数据格式如下:数据头网络编号PC编号目标模块IO编号目标模块站号本机模块IO编号本机模块站号请求数据长度请…

Linud SSH与SCP的配置

目录 配置SSH协议 配置服务器通过密钥进行认证 配置SCP完成文件传输 ssh协议讲解 SSH协议理论讲解_静下心来敲木鱼的博客-CSDN博客https://blog.csdn.net/m0_49864110/article/details/128500490?ops_request_misc%257B%2522request%255Fid%2522%253A%2522167704203816800…

不加大资金投入,仅凭智能名片如何解决企业营销难题的?

中国90%以上的中小企业想要竞争和发展,就必须推广自己的品牌,提高自己的知名度。在小程序之前,APP是主流,但大多数中小企业负担不起APP的开发和昂贵的营销成本。 进入微信互联网时代后,为了帮助企业以更低的成本获得…

浙大MEM现场小组复试经验分享

作为2019年上岸浙大MEM项目的学姐一枚,很高兴收到杭州达立易考教育老师的邀请,给大家分享下现场面试的经历。先来看下复试流程是怎么样的。1、体检所有考生须参加。体检需在复试前完成(未体检考生不得参加复试)。 2、资格审查&…

历时半年!从外包到现在阿里网易25K,分享一下自己的涨薪经验

前言 首先自我介绍一下,本人普通一本毕业,年初被老东家裁员干掉了,之后一直住在朋友那混吃等死,转折是今年年后,二月初的时候和大佬吃了个饭,觉得自己不能这样下去了,拿着某大佬给我的面试资料…

你知道IT运维的本质是什么吗?

大家好,我是技福的小咖老师。 之前看到个文章,说运维的本质是“可视化”,甚至还有人说是DevOps。不可否认,“可视化”是运维过程中非常重要的一个环节;DevOps则是开发运维一体化非常重要的工具。 究其根本&#xff0…

【09-JVM面试专题-实例化过程详细讲讲?对象的基本结构你知道吗?TLAB堆上内存分配是怎么样的?你了解这个TLAB吗?】

实例化过程详细讲讲?对象的基本结构你知道吗?TLAB堆上内存分配是怎么样的?你了解这个TLAB吗? 实例化过程详细讲讲?对象的基本结构你知道吗?TLAB堆上内存分配是怎么样的?你了解这个TLAB吗&#x…

EMR Studio Workspace 访问 Github ( 公网Git仓库 )

EMR Studio Workspace访问公网Git仓库 会遇到很多问题,由于EMR Studio不能给出任何有用的错误信息,导致排查起来非常麻烦。下面总结了若干项注意事项,可以避免踩坑。如果你遇到了同样的问题,请根据以下部分或全部建议去修正你的环境,问题即可解决。本文地址:https://laur…

pc端集成企业微信的扫码登录及遇到的问题

集成步骤: 1、在企业微信后台中添加应用 2、记录下应用的相关信息,在后文要用到 3、引入企业微信js 旧版:http://rescdn.qqmail.com/node/ww/wwopenmng/js/sso/wwLogin-1.0.0.js 新版(20210803更新):http…

kotlin学习教程

kotlin的方法 可以直接调用 不用 new? 2.kotlin关于字符串 用 $拼接变量 3.kotlin 类 方法 变量 可以同级的,同级的 方法 和 变量(常量) 是 生成了 一个新的 xxxKt.class ,并且都是 static的, 4.kotlin的类,方法,默认…

JVM调优方式

对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。 1.Full GC 会对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个堆进行回收,所以比较慢,因此应该尽可能减少Full GC的次数。 2.导致Full GC的原因 1)年老…

消息中间件

为什么要使用消息中间件同步通信:耗时长,受网络波动影响,不能保证高成功率,耦合性高。1.同步方式(耗时长):同步方式的问题:当一个用户提交订单到成功需要300ms300ms300ms20ms 920ms…

民锋国际期货:2023,既艰难又充满希望,既纷乱又有无数机会。

不管是官方还是民间,各种信号都表明,2023年是一个拼经济的年份。 通货膨胀带来的需求量的增加,与中国经济高速发展带来的供给量增加,二者共同构成了我们的物价。 做一个长期主义者,做一个坚定看好中国未来的人&#…

SpringBoot(powernode)(内含教学视频+源代码)

SpringBoot(powernode)(内含教学视频源代码) 教学视频源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87484637 目录SpringBoot(powernode)(内含教学视频…

AcWing3490.小平方——学习笔记

目录 题目 代码 AC结果 思路 题目 3490. 小平方 - AcWing题库https://www.acwing.com/problem/content/3493/ 代码 import java.util.Scanner;public class Main {public static void main(String[] args){Scanner input new Scanner(System.in);int target input.nextI…

Python 自动化测试必会技能板块—unittest框架

说到 Python 的单元测试框架,想必接触过 Python 的朋友脑袋里第一个想到的就是 unittest。的确,作为 Python 的标准库,它很优秀,并被广泛应用于各个项目。但其实在 Python 众多项目中,主流的单元测试框架远不止这一个。…

谷歌seo关键词怎么做?Google如何优化关键词

本文主要分享谷歌seo关键词怎么去操盘才能更好的提升排名,我们立刻来学习一下。 本文由光算创作,有可能会被剽窃和修改,我们佛系对待这种行为吧。 谷歌seo关键词如何优化?这里我们提供一个谷歌seo优化的公式 答案是&#xff1a…

Vue基础15之消息订阅与发布、TodoList消息订阅与发布、TodoList编辑功能

Vue基础15消息订阅与发布安装pubsub-js库使用main.jsSchool.vueStudent.vue总结:消息订阅与发布(pubsub)TodoList-消息的订阅与发布将Item的deleteTodo使用消息订阅与发布App.vueMyItem.vueMyList.vueTodoList-编辑App.vueMyItem.vue完善编辑…