K8S必备知识--docker的介绍以及安装

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: K8S必备知识--docker的介绍以及安装

docker:

本身是容器:

容器可以保护内容物

docker最初是dotCloud公司内部的一个业余项目,基于谷歌公司推出的Go语言实现的

以前为了实现同一台机上的各个应用隔离,采用虚拟化技术,但消耗资源过大

各应用的隔离是通过namespace的隔离来实现的

玩容器保证linux内核版本在3.8以上

user-操作进程的用户和用户组实现隔离在内核3.8版本才实现

docker引擎出道即巅峰,便捷,简单,规范

1、Docker是什么?

Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,

并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,

开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,

然后部署到任意你想部署到的环境。

Docker的三个概念

镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。

任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。

例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,

就可以称为Apache镜像。

容器(Container):类似于一个轻量级的沙盒,

可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),

以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。

容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。

注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。

基于autofs

仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。

注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;

而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,

比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

Docker的安装和卸载

Docker可以安装在Windows、Linux、Mac等各个平台上。

具体可以查看文档Install Docker。安装完成之后,可以查看Docker的版本信息:

容器:镜像运行时的实体

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,

容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。

容器的实质是进程,但与直接在宿主执行的进程不同,

容器进程运行于属于自己的独立的命名空间。前面讲过镜像使用的是分层存储,容器也是如此。

容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。

因此,任何保存于容器存储层的信息都会随容器删除而丢失。

按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据 ,

容器存储层要保持无状态化。

所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,

在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。

数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, 使用数据卷后,

容器可以随意删除、重新 run,数据却不会丢失。

注意:

容器在整个应用程序生命周期工作流中提供以下优点:隔离性、可移植性、灵活性、可伸缩性和可控性。

最重要的优点是可在开发和运营之间提供隔离。

仓库:集中存放镜像文件的地方

镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其他服务器上使用这个镜像,

我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);

每个标签对应一个镜像。

所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方,类似于我们之前常用的代码仓库。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。

我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。

如果不给出标签,将以 latest 作为默认标签。

这里补充一下 Docker Registry 公开服务和私有 Docker Registry 的概念:

Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服务。

一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

最常使用的 Registry 公开服务是官方的 Docker Hub ,这也是默认的 Registry,

并拥有大量的高质量的官方镜像,网址为:hub.docker.com/ 。

在国内访问 Docker Hub 可能会比较慢,国内也有一些云服务商提供类似于 Docker Hub 的公开服务。

除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry 。

Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。

开源的 Docker Registry 镜像只提供了 Docker Registry API 的服务端实现,足以支持 Docker 命令,

不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。

Docker的主要应用场景

简化配置

虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),

Docker在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,

同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。

简单的来说,容器镜像打包完成后,它就是个独立的个体了,丢到哪里都能跑,而无需针对各个平台去独立配置。

代码流水线(Code Pipeline)管理

前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,

需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,

Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。

提高开发效率

不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,

二是我们想快速搭建开发环境。

使用Docker非常简单的就能够实现这两点,而且哪怕是开发环境的机器配置一般的情况下搭建多个生成服务应用。

一台一般配置服务器或开发机也能轻松的跑起多个Docker应用,而无需额外增加机器配置。

因为Docker有个非常NB的特性,拥有虚拟化的特性,而几乎没有额外的开销。

Docker改变了什么?

综上所述,Docker到底改变了什么?笔者是这么理解的:

Docker改变了云服务,使云服务的共融共通的理想逐步成为了可能。

并且Docker 已经是云策略的一部分,许多开发者正在计划使用 Docker 将业务迁移到云端。

另外,为了避免被云服务供应商绑定,Docker成为很多开发者的首选。

Docker改变了产品交付,为产品的整个生命周期提供了一整套的解决方案和流程。

Docker改变了开发方式,提供了简化的环境配置、封装的运行环境以及统一的环境。并且提供了快速部署的方式。

Docker改变了测试,多版本测试变得极为方便,快速构建测试环境也变得更加简单并且无需开发人员干预或者搭建。

Docker改变了运维,环境的一致性让运维变得更加简单,同时热更新的支持让运维不再需要半夜加班部署更新,

更新可以随时进行。当出现重大问题时,还能快速回滚到指定版本。

Docker改变了架构,自动化扩容支持让架构变得更加简单,分布式系统也更加易于搭建和支持。

同时遗留的单体应用也很易于转变为现代应用。

总之,在某种程度上,Docker改变了产品开发中的一些游戏规则。虽然Docker是一项技术,

但是它也带来了新的思维,新的流程和工作方法,Docker在推动行业的发展,Docker已经在改变世界,

并且在逐步的变为事实……

缺点:

太依赖操作系统

依赖网络

银行U盾等场景不能用

2、linux上docker安装

卸载旧版本

yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine

Device Mapper

Docker默认使用AUFS作为存储驱动,但是AUFS并没有被包括在Linux的主线内核中。

CentOS中可以使用Device Mapper作为存储驱动,这是在2.6.9内核版本引入的新功能。

我们需要先确认是否启用该功能:

$ ls -l /sys/class/misc/device-mapper

lrwxrwxrwx 1 root root 0 May 1 20:55 /sys/class/misc/device-mapper -> …/…/devices/virtual/misc/device-mapper

如果没有检测到Device Mapper,需要安装device-mapper软件包:

$ sudo yum install -y device-mapper

然后重新加载dm_mod内核模块:

$ sudo modprobe dm_mod

安装docker-ce

参照阿里镜像源安装

CentOS 7(使用 yum 进行安装)

#step 1: 安装必要的一些系统工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

#Step 2: 添加软件源信息

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#Step 3

sudo sed -i ‘s+download.docker.com+mirrors.aliyun.com/docker-ce+’ /etc/yum.repos.d/docker-ce.repo

#Step 4: 更新并安装Docker-CE

sudo yum makecache fast

sudo yum -y install docker-ce

#Step 4: 开启Docker服务

sudo service docker start

#注意:

#官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。

例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。

#vim /etc/yum.repos.d/docker-ce.repo

#将[docker-ce-test]下方的enabled=0修改为enabled=1

#安装指定版本的Docker-CE:

#Step 1: 查找Docker-CE的版本:

#yum list docker-ce.x86_64 --showduplicates | sort -r

#Loading mirror speeds from cached hostfile

#Loaded plugins: branch, fastestmirror, langpacks

#docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable

#docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable

#docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable

#Available Packages

#Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)

#sudo yum -y install docker-ce-[VERSION]

查看安装的docker版本:

docker -v

[root@220 ~ ]# docker version

Client: Docker Engine - Community

Version: 20.10.14

API version: 1.41

Go version: go1.16.15

Git commit: a224086

Built: Thu Mar 24 01:49:57 2022

OS/Arch: linux/amd64

Context: default

Experimental: true

docker的配置文件:

/etc/docker/daemon.json

资源目录:

/var/lib/docker/

little docker ]#cd /var/lib/docker/

[root@little docker ]#ll

total 0

drwx–x–x 4 root root 120 Feb 20 14:48 buildkit

drwx-----x 2 root root 6 Feb 20 14:48 containers 容器信息

drwx------ 3 root root 22 Feb 20 14:48 image 镜像资源

drwxr-x— 3 root root 19 Feb 20 14:48 network

drwx-----x 3 root root 40 Feb 20 14:48 overlay2

drwx------ 4 root root 32 Feb 20 14:48 plugins

drwx------ 2 root root 6 Feb 20 14:48 runtimes

drwx------ 2 root root 6 Feb 20 14:48 swarm

drwx------ 2 root root 6 Feb 20 14:48 tmp

drwx------ 2 root root 6 Feb 20 14:48 trust

drwx-----x 2 root root 50 Feb 20 14:48 volumes

3、docker加速器:

国内使用docker官方镜像源,会因为网络原因无法下载,或一直处于超时状态。我们使用

daocloud.io的方法进行加速配置

[root@little ~ ]#curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://abcd1234.m.daocloud.io

docker version >= 1.12

{“registry-mirrors”: [“http://abcd1234.m.daocloud.io”]}

Success.

You need to restart docker to take effect: sudo systemctl restart docker

或者修改本地配置文件:

[root@little ~ ]#vim /etc/docker/daemon.json

{“registry-mirrors”: [“http://abcd1234.m.daocloud.io”]}

保存即可

验证拉取镜像速度:

docker image pull nginx

阿里云加速

[root@little ~ ]#vim /etc/docker/daemon.json

{“registry-mirrors”: [“https://q2gr04ke.mirror.aliyuns.com”],“insecure-registries”:[“10.1.1.100:5000”]}

~

docker 1.12 开始支持live restore,就是关闭docker daemon ,而不关闭容器

有两种方式开启:

如果docker daemon正在运行并且你不想停止它,你可以添加配置到docker daemon的配置文件。

例如:在linux系统上默认的配置文件是/etc/docker/daemon.json

{“live-restore”: true}

你必须传递一个SIGHUP信号给daemon进程来重载配置。更多有关使用config.json来配置docker daemon的信息,

可以参考

daemon configuration file

在使用dockerd启动时指定–live-restore选项

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
15天前
|
Kubernetes 调度 虚拟化
Kubernetes和Docker有什么区别
【10月更文挑战第18天】Kubernetes和Docker有什么区别
|
3天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
21天前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
181 2
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
4天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
28 1
|
12天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
56 7
|
11天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
48 6
|
8天前
|
Prometheus 监控 Cloud Native
基于Docker安装Grafana和Prometheus
Grafana 是一款用 Go 语言开发的开源数据可视化工具,支持数据监控和统计,并具备告警功能。通过 Docker 部署 Grafana 和 Prometheus,可实现系统数据的采集、展示和告警。默认登录用户名和密码均为 admin。配置 Prometheus 数据源后,可导入主机监控模板(ID 8919)进行数据展示。
41 2
|
11天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
33 2
|
11天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
21 3