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选项

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
消息中间件 Kafka Docker
docker compose 安装 kafka
通过本文的步骤,您可以快速在本地使用 Docker Compose 安装并配置 Kafka 和 Zookeeper。Docker Compose 简化了多容器应用的管理,方便快速搭建和测试分布式系统。
35 2
|
6天前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
54 20
|
6天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
131 15
|
12天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
91 42
|
16天前
|
Linux Docker 容器
安装docker-18.06报错Error: libseccomp conflicts with docker-18.06
通过这些步骤,您可以成功在CentOS上安装Docker 18.06,并解决libseccomp的冲突问题。这些方法确保系统兼容性,并保证Docker的正常运行。
54 27
|
1月前
|
前端开发 应用服务中间件 nginx
docker安装nginx,前端项目运行
通过上述步骤,你可以轻松地在Docker中部署Nginx并运行前端项目。这种方法不仅简化了部署流程,还确保了环境的一致性,提高了开发和运维的效率。确保按步骤操作,并根据项目的具体需求进行相应的配置调整。
125 25
|
1月前
|
安全 数据安全/隐私保护 Docker
docker私有仓库harbor安装
通过以上步骤,您可以成功在企业内部安装和配置Harbor私有仓库,方便地管理和分发Docker镜像。Harbor不仅提供了基础的镜像管理功能,还增强了安全性、身份管理和审计功能,使其成为企业级容器镜像管理的理想选择。
102 22
|
1月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
209 11
|
1月前
|
弹性计算 Ubuntu Linux
阿里云服务器一键安装Docker社区版教程,基于系统运维管理OOS
阿里云服务器一键安装Docker社区版教程,基于系统运维管理OOS自动化部署。支持Ubuntu 22.04/20.04、CentOS 7.7-7.9及Alibaba Cloud Linux 3.2104 LTS。前提条件:ECS实例需运行中且有公网。步骤:选择Docker扩展并安装,验证成功通过命令`docker -v`查看版本号。
300 79
|
1月前
|
关系型数据库 MySQL 应用服务中间件
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
124 7