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

简介: 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选项

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
3天前
|
网络协议 Linux Docker
在centos7下通过docker 安装onlyoffice
在centos7下通过docker 安装onlyoffice
|
1天前
|
Kubernetes Docker 容器
Docker 安装 Portainer
Portainer Community Edition是一个针对容器化应用程序的轻量级服务交付平台,可用于管理 Docker、Swarm、Kubernetes 和 ACI 环境。它的设计理念是部署和使用都简单,该应用程序允许您通过“智能”GUI 和/或广泛的 API 管理所有编排器资源。
21 3
|
2天前
|
前端开发 jenkins 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
|
2天前
|
jenkins 网络安全 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)
|
2天前
|
Java 开发工具 git
新的centos7.9安装docker版本的jenkins2.436.1最新版本-项目发布(三)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-项目发布(三)
10 4
|
2天前
|
网络安全 Docker 容器
测试开发环境下centos7.9下安装docker的minio
测试开发环境下centos7.9下安装docker的minio
|
2天前
|
NoSQL Redis Docker
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
13 0
|
2天前
|
安全 Linux 网络安全
安装docker
安装docker
19 0
|
3天前
|
Shell 数据安全/隐私保护 Docker
docker安装anaconda3 python环境
docker安装anaconda3 python环境
10 0
|
3天前
|
NoSQL Linux Redis
本地虚拟机centos7通过docker安装主从redis3.2
本地虚拟机centos7通过docker安装主从redis3.2
10 0