一、Docker入门

Docker是一个开源的应用容器引擎,基于Linux容器技术,提供轻量级的虚拟化。它使开发者可以打包应用及依赖到容器中,实现跨平台的快速部署和移植。Docker对比虚拟机有更快的速度和更低的资源消耗。文章介绍了Docker的背景、工作原理、为何使用Docker以及与虚拟机的区别,并详细讲解了在CentOS上的Docker安装步骤。
摘要由CSDN通过智能技术生成

一、Docker背景介绍

什么是docker。
Docker 是一个开源的应用容器引擎(面试的时候可以这样回答),基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

Linux容器技术
Docker引擎的基础是Linux容器(Linux Container,LXC)技术。Linux Container 容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。简单地说,Docker在内核容器技术(Cgroup和Namespace)的基础上,提供一个更高层的控制工具。
Linux容器是与系统其他部分隔离开的一个或一组进程。运行这些进程所需的所有文件都由另一个特定镜像提供,意味着从开发到测试再到生产整个过程中,Linux 容器都是可移植且一致的。因此,相对于依赖重复传统测试环境的开发渠道,使用容器速度要快得多。

从Linux容器到Docker
在LXC基础上,Docker进一步优化了容器的使用体验。Docker提供了各种容器管理的工具,包括分发、版本、移植等,让用户无需关注底层的操作,就可以简单明了地管理和使用容器,大大减轻了Linux容器技术的使用难度。

为什么要使用Docker

Docker虚拟化的好处
Docker在正确的地点、正确的时间顺应了正确的趋势-即高效的构建应用。现在开发者需要能方便地创建运行在各种不同平台上的应用,也就是说应用能够脱离底层服务器,而且必须是“任何时间任何地点”都可以获取。因此,开发者们需要一种创建分布式应用程序的方式,这也是Docker能够提供的。将业务容器打包成镜像,并在新的服务器上启动成相应的容器即可。
Docker在开发和运维中的优势
1)更快捷的交付和部署
2)更高效的资源利用
3)更轻松的迁移和扩展
4)更简单的更新管理
Docker与虚拟机的比较
1)Docker容器很快,启动和停止可以在秒级别实现,这相比传统的虚拟机方式要快得多
2)相同情况下,Docker容器对系统资源需求更少,一台主机上可以同时运行数千个容器
3)Docker通过类似git的操作方式来方便用户获取、分发和更新应用镜像,指令简单,学习容易
4)Docker通过Dockerfile文件来支持对镜像业务的升级
更多比较如下:
在这里插入图片描述

Docker容器技术和传统虚拟化技术区别

相同点:docker和容器技术和虚拟机技术,都是虚拟化技术。
不同点:虚拟机(virtual machine)是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里面运行 centos系统,这样就可以运行在centos系统中部署应用了。而Docker仅仅是封装函数库,并没有模拟完整的操作系统。
我们可以用一种简单方式来思考一下:
虚拟化使得许多操作系统可同时在单个系统上运行。
容器则可共享同一个操作系统内核,将应用进程与系统其他部分隔离开。
在这里插入图片描述

由图可知,Docker并没有传统虚拟化中的Hypervisor层,因为Docker是基于容器容器技术的轻量级虚拟化,相对于传统的虚拟化技术,省去了Hypervisor层的开销,而且其虚拟化技术是基于内核的Cgroup和Namespace技术,处理逻辑与内核深度融合,所以在很多方面,它的性能与物理机非常接近。

在通信上,Docker并不会直接与内核交互,它是通过一个更底层的工具 Libcontainer与内核交互的。Libcontainer是真正意义上的容器引擎,它通过clone系统调用直接创建容器,通过pivot_root系统调用进入容器,且通过直接操作cgroupfs文件实现对资源的管控,而Docker本身则侧重于处理更上层的业务。

Docker的另一个优势是对层级镜像的创新应用,即不同的容器可以共享底层的只读镜像,通过写入自己特有的内容后添加新的镜像层,新增的镜像层和下层的镜像一起又可以作为基础镜像被更上层的镜像使用。这种特性可以极大地提高磁盘利用率,所以当你的系统上有10个大小为1GB的镜像时,它们总共占用的空间大小可能只有5GB,甚至更少。另外,Docker对 Union mount的应用还体现在多个容器使用同一个基础镜像时,可极大地减少内存占用等方面,因为不同的容器访问同一个文件时,只会占用一份内存。当然这需要使用支持Union mount的文件系统作为存储的 Graph Driver,比如 AUFS和 Overlay。

Docker的终极目标
docker的主要目标是"Build,Ship and Run any App,Angwhere",一处构建,到处运行
构建:做一个docker镜像
运输:docker pull
运行:启动一个容器
每一个容器,它都有自己的文件系统rootfs。

二、Docker 架构和核心概念

我们要使用Docker来操作管理镜像、容器,就必须要安装Docker。

Docker是一个CS架构的程序,由两部分组成:

服务端(host/server):Docker守护进程,负责处理Docker指令,管理镜像、容器等
客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。
如下图:
在这里插入图片描述

Docker中很重要的三个基本概念:
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
容器(Container):Docker 利用容器(Container)独立运行的一个或一组应用。镜像是静态的定义,容器是镜像运行时的实体, 它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。 容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

总结:
Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就称之为image镜像文件。通过这个镜像文件生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。 同一个 image 文件,可以生成多个同时运行的容器实例。
image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例, 也就是我们的容器。
至于仓库,就是放了一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库中拉下来。

三、Docker安装

可以参看官方文档:https://docs.docker.com/engine/install/centos/
环境要求
目前我们使用的是 CentOS 7 (64-bit) ,CentOS 仅发行版本中的内核支持 Docker。 Docker需要运行在 CentOS 7及以上版本,要求系统为64位、系统内核版本为 3.10 以上。

查看自己的内核:

[root@k8s-m1 ~]# uname  -r
3.10.0-957.el7.x86_64
[root@k8s-m1 ~]# uname  -a
Linux k8s-m1 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

1、 使用官方安装脚本自动安装

安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2、手动安装

卸载旧版本(如果之前安装过)
较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
rm -rf /var/lib/docker   #删除之前的镜像、容器相关数据

安装 Docker Engine-Community
使用 Docker 仓库进行安装
如在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,再从仓库安装Docker。

(1)设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

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

使用以下命令来设置稳定的仓库。
官方源地址(比较慢)

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

可以选择国内的一些源地址:
阿里云(常用)

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

清华大学源

$ sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

(2)安装
1)安装最新版本的 Docker Engine-Community 和 containerd:

$ sudo yum makecache fast  #更新yum软件包索引
$ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

如果启用了多个 Docker 仓库,则在未在 yum install 或 yum update 命令中指定版本的情况下,进行的安装或更新将始终安装最高版本,这可能不适合我们的需求。

Docker 安装完默认未启动。并且已经创建好 docker 用户组,但该用户组下没有用户。

2)安装指定版本的 Docker

a.列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。

$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64            3:23.0.6-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.5-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.4-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.3-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.2-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.1-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.0-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:20.10.9-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.8-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.7-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.6-3.el7                    docker-ce-stable 

b.、通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-20.10.9-3。

$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io  #注意修改版本号

3)启动 Docker。

$ sudo systemctl enable docker
$ sudo systemctl start docker

通过运行 hello-world 镜像来验证是否正确安装了 Docker Engine-Community 。

$ sudo docker run hello-world

卸载 docker
删除安装包:

yum remove docker-ce

删除镜像、容器、配置文件等内容:

rm -rf /var/lib/docker
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

margu_168

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值