Docker简介
业务流程
整个这章内容,就解决一个问题:Docker是什么? 要了解什么是Docer就要先了解什么容器, 要了解什么是容器就要先说一下应用的部署环境。
业务是基于应用( Application)运转的。我们学习编程技术,最终目的就是为了开发各种各样的应用。 大部分应用是运行在服务器之上的。 以前,每个服务器只能运行一个应用。 Windows 和Linux操作系统都没有相应的技术手段来保证在一台服务器上稳定而安全地同时运行多个应用。
在这样的时代,经常会出现这样一幕: 每次业务部门想要地加一个新的应用时, IT部门就需要去采购一个新的服务器。 大部分情况下,没有人知道新增应用所需的服务器性能究竟是怎样的, 这意味着IT部门需要凭借经验去猜测所购买的服务器型号和规格,因此, IT部门在采购的时候就不得不买那些性能大幅优于业务需求的服务器。 毕竟无论是IT部门还是业务部门,都不想看到服务器性能不足的情况出现。 因为服务器性能不足,可能会导致某些交易失败,而交易失败会使得公司客户流失、收益下降, 所以IT部门通常采购的都是更大、更好的服务器。 这种做法导致了大部分服务器长期运行在他们额定负载5%~ 10%的水平区间之内。 这对公司资产和资源都是一种极大的浪费!
为了解决上面的问题,VMware 公司给全世界带来了一个礼物:虚拟机(VM)。 然后几乎是一夜之间,世界就变得美好了! 人们终于拥有了一种允许多应用能够稳定、安全地同时运行在一个服务器中的技术。
虚刑机是一种具有划时代意义的技术! 每当业务部门需要增加应用的时候,IT部门无须采购新的服务器。 取而代之的是,IT部门会尝试在现有的,并且有空闲性能的服务器上部署新的应用。 突然之间,人们发现这种技术能够让现有的资产(如服务器)拥有更大的价值,从而最终为公司节省大量内资金支出。
但.....VM技术,在多应用部署这个角度来看,不是十全十美的! 实际上,虚拟机最大的缺点就是依赖其专用的操作系统(OS)。 OS会占用额外的CPU、RAM和存储,这些资源本可以用于运行更多的应用。 另外,OS本身不是免费的,安装在OS上的应用,进行迁移难度和成本都很高。
容器解决虚拟机的资源浪费的情况 长期以来,像谷歌这样的大规模Web服务玩家一直采用容器(Container)技术解决虚拟机模型的缺点。 容器模型其实跟虚拟机模型相似,其主要的区别左于,容器的运行不会独占操作系统。 实际上,运行在相同宿主机上的容器是共享一个操作系统的,这样就能够节省大量的系统资源,如CPU、RAM以及存储。 将容器从笔记本电脑迁移到云上,之后再迁移到数据中心的虚拟机或者物理机上,都是很简单的事情。
什么是Docker?
首先笼统地说,Docker就是我们上面说的容器模型中的一种具体的实现产品,是一个运行在Windows或Linux上的软件。 总体来说,在平时我们口头交流上,说的Docker可能是下面的几种情况: 1、Docker公司。 2、Docker引擎。 3、Docker开源项目( Moby )。
Docker 公司 Docker公司位于旧金山,由法裔美籍开发者和企业家Solomon Hykes创立,其标志如图:
“Docker”一词来自英国口语,意为码头工人(Dock Worker),即从船上装卸货物的人。
Docker引擎
多数技术人员在谈到Docker时,主要是指Docker引擎。 Docker引擎是用于运行和编排容器的基础设施工具。 Docker引擎是是容器最核心的东西,其他Docker公司或第三方的产品都是围绕Docker引擎进行开发和集成的。
Docker引擎位于中心,其他产品基于Docker引擎的核心功能进行集成。 Docker引擎可以从Docker网站下载,也可以基于GitHub上的源码进行构建。 无论是开源免费的社区版本还是收费商业版本,都有Linux和Windows版本。
Docker 引擎主要有两个版本:企业版(EE)和社区版(CE)。 每个季度,企业版和社区版都会发布一个稳定版本。 社区版本会提供4个月的支持,而企业版本会提供12个月的支持。
2017 年第一季度以前,Docker 版本号遵循大版本号.小版本号的格式。采用新格式前的最后一个版本是Docker 1.13 从2017年第一季度开始,Docker 版本号遵循YY.MM-xx格式,例如,2018 年6月第一次发布的社区版本为18.06.0-CE。
Docker 开源项目( Moby ) “Docker”一词也会用于指代开源Docker项目。 其中包含一系列可以从Docker官网下载和安装的工具,比如Docker服务端和Docker客户端。 不过,该项目在2017年正式命名为Moby项目。 由于这次改名,GitHub上的docker/docker库也被转移到了moby/moby,并且拥有了项目自己的Logo,如图:
Moby项目的目标是基于开源的方式,发展成为Docker上游,并将Docker拆分为更多的模块化组件。 核心的Docker引擎项目位于GitHub的moby/moby,但是引擎中的代码正持续被拆分和模块化。
Moby项目已经给软件产业带来了翻天覆地的变化。Docker 已经得到了广泛的应用!
进一步理解Docker里的三大核心概念:镜像、容器和仓库 1、镜像 Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。 例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了Apache应用程序(或用户需要的其他软件)。 可以把它称为一个Apache镜像。镜像是创建Docker容器的基础。 通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像, 用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。
2、容器 简单地说,可以把容器看装镜像的盒子。 容器还可以运行里边的镜像里的应用。 它可以启动、开始、停止、删除,而这些容器彼此之间相互隔离、互不可见的。 所以,一句话:Docker就是利用容器来运行和隔离应用程序的。
3、仓库 Docker仓库类似于代码仓库,是Docker集中存放镜像文件的场所。 有时候我们会将Docker仓库和仓库注册服务器(Registry,也可以叫镜像仓库服务器)混为一谈,并不严格区分。 实际上,镜像仓库服务器是存放仓库的地方,其上往往存放着多个仓库。 每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签( tag)来进行区分。 例如存放Centos操作系统镜像的仓库,被称为Centos仓库,其中可能包括6、7、8 等不同版本的镜像。
根据所存储的镜像公开分享与否,Docker 仓库可以分为公开仓库(Public) 和私有仓库(Private) 两种形式。目前,最大的公开仓库是官方提供的Docker Hub,其中存放着数量庞大的镜像供用户下载。 国内不少云服务提供商(如腾讯云、阿里云等)也提供了仓库的本地源,可以提供稳定的国内访问。
当然,用户如果不希望公开分享自己的镜像文件,Docker 也支持用户在本地网络内创建一个只能自己访问的私有仓库。 当用户创建了自己的镜像之后就可以使用push命令将它上传到指定的公有或者私有仓库。 这样用户下次在另外一台机器上使用该镜像时,只需要将其从仓库上pull下来就可以了。
Docker安装
Docker 可以安装在Windows、Mac,当然还有Linux之上,除此之外还可以在云上安装。 除了前面提到的各种安装场景之外,我们还可以选择不同方式完成Docker安装,包括手工安装、通过脚本方式安装和通过向导方式安装等。
本章以最容易,大家选择最多的安装方式,给大家做演示讲解,官网文档上都有详细说明:
1、桌面安装。 Windows 版Docker ( Docker for Windows ) 2、服务器安装。 Linux Windows Server2008
Windows 版Docker
在安装Windows版Docker之前, 首先要知道这是由Docker公司提供的一个产品。 这个产品需要运行在一个安装了64位Windows 10操作系统的计算机上,通过启动一个独立的引擎来提供Docker环境。 Requires Microsoft Windows 10 Professional or Enterprise 64-bit. 下载地址:https://hub.docker.com/editions/community/docker-ce-desktop-windows/ 安装Docker的计算机要求在BIOS开启硬件虚拟化支持,不同牌子型号的计算机BIOS设置有差异,没开启针对性百度一下。 对Windows系统也有要求:开启Hyper-v 其次,需要知晓Windows版Docker是一个社区版本( Community Edition, CE)的应用,并不是为生产环境设计的。 最后,还需要知道Windows版Docker在某些版本特性上可能是延后支持的。 这是因为Docker公司对该产品的定位是稳定性第一,新特性其次。 安装步骤就简单了,双击运行就是,完后,dos上运行一下:docker version 显示信息就ok。
注意:当前版本要求高,我去下载其它版本,直接下载是稳定版本
安装问题
Docker Desktop requires the Server service to be enabled.
处理:
----安装 Hyper-V 并启用它。如果已完成,则跳过此步。如果尚未完成,请在 PowerShell 中以管理员模式运行以下命令:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Enable-WindowsOptionalFeature -Online -FeatureName Containers -All
一旦以上2条命令成功完成。在管理员模式下打开 Services.msc 并查找Server服务。根据需要启用此服务为自动/手动并将其设置为运行。
重新启动机器以完成安装。
Linux上的安装
我们在Centos7上安装一下:
参考 (https://docs.docker.com/engine/install/centos/)
----没别的的前提,唯一一个就是Linux系统要能上外网。 然后就是具体的安装步骤:
1、确保CentOS上安装好gcc:yum -y install gcc
2、确保CentOS上安装好gcc-c++:yum -y install gcc-c++
3、查看gcc的版本:gcc -v 有版本信息,安装对了
4、卸载老版本,卸载命令从官网上拷贝:
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
5、安装下面yum-config-manager命令的支持工具
yum install -y yum-utils
6、设置Docker的yum源,注意这里不要用官网上的仓库,服务器在国外,很慢,要用国内镜像,如阿里云:
cd /etc/yum.repos.d
ll //显示该目录下所有的文件
-rw-r--r-- 1 root root 1680 Feb 10 2022 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Nov 23 2018 CentOS-CR.repo
-rw-r--r--. 1 root root 649 Nov 23 2018 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 314 Nov 23 2018 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 630 Nov 23 2018 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Nov 23 2018 CentOS-Sources.repo
-rw-r--r--. 1 root root 5701 Nov 23 2018 CentOS-Vault.repo
-rw-r--r-- 1 root root 927 Feb 10 2022 epel.repo
-rw-r--r-- 1 root root 1358 Sep 5 2021 epel.repo.rpmnew
-rw-r--r-- 1 root root 1457 Sep 5 2021 epel-testing.repo
//配置yum源,我们用阿里云的,国外很慢,这样下载到该目录下,成为yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
7、更新yum连接索引
yum makecache fast
8、安装Docker CE
cd ~
yum -y install docker-ce docker-ce-cli containerd.io
9、启动Docker
systemctl start docker
systemctl status docker
10、测试安装好没的
docker version
镜像
镜像的常用命令
docker info
docker images //查看当前所有的镜像
docker rmi -f 镜像id //删除指定的镜像
docker image inspect 镜像ID //查看镜像的祥情
- 配置从官网dockerhub镜像下载加速器
------上一章,我们在机器上安装好Docker引擎后,里边儿是空的,没有东西的。
镜像:是静态的,里边有应用,是没有运行起来的应用。好比Java的类。
容器:是动态的,是镜像跑起来,运行起来后的概念,镜像在怎么跑起来,靠Docker引擎。好比类实例化后的对象。
宿主机:安装Docker引擎的计算机主机。
虚拟机:在虚拟机引擎里安装的操作系统。
物流机:在物流计算机上安装的操作系统。
----- 仓库里,默认从官方的仓库Docker Hub上下载,官方的Docker Hub网站已经提供了数十万个镜像供大家开放下载。这里就要说一下,Docker Hub在国外下载起来肯定慢的很,所以建议把Docker的这个默认配置改为从国内的阿里云镜像仓库里获取镜像。这里就涉及怎么配置?
镜像加速器配置:
1、访问阿里云地址:dev.aliyun.com
2、注册阿里云账号
image.png
image.png
3、找到镜像加速器,拿到专属自己的镜像加速地址:(https://e0h65m8r.mirror.aliyuncs.com) 将说明中的配置,配置到Docker引擎的配置文件/etc/docker/daemon.json
image.png
4、让上面的配置文件生效,重新加载一下:systemctl daemon-reload
5、重启docker:systemctl restart docker
弄来后会放在本地的哪个地方?
Linux Docker 主机本地镜像仓库通常位于/var/lib/docker/,
- 获取(官网)镜像(我们一般是获取基础镜像,再用dockerfile创建镜像)
----利用的docker的pull命令,去仓库中拉,把镜像从网络上的仓库中拉下来,放到本地容器里。
常用的命令格式:docker [image] pull [可选的选项参数] 镜像仓库名称:tag标记 , tag标记不写,默认latest,如当前最新redis为6.xx.
如:
docker image pull redis:5.0.4
注意:一般来说,镜像的latest标签意味着该镜像的内容会跟踪最新版本的变更而变化,内容是不稳定的。因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的latest标记的镜像。
----pull后面跟着镜像的仓库名称,严格地讲,镜像的仓库名称中还应该添加仓库地址(即registry, 注册服务器)作为前缀,如果没有前面的镜像加速器的配置的话,默认使用的是官方Docker Hub 服务,该前缀可以忽略。
例如:
docker pull redis:5.0.4 //命令相当于docker pull registry.hub.docker.com/redis:5.0.4命令,
----即从默认的注册服务器Docker Hub Regisiry中的redis仓库,来下载标记为6.0.5的镜像。
-----如果从非官方的仓库下载,则需要在仓库名称前指定完整的仓库地址。
例如从网易云的镜像源来下载redis:2.8.4镜像,可以使用如下命令,
$ docker pull hub.c.163.com/public/redis:2.8.4
pull子命令支持的选项主要包括:
-a, --all-tags=true | false: 是否获取仓库中的所有镜像,默认为否;
--disable-content-trust: 取消镜像的内容校验,默认为真
-
运行镜像成容器与停止容器
pull后镜像就从远程仓库中,下载到本地了,下载后就可以用来构建容器,运行起来,怎么运行,这里先简单讲一下,后面细讲:
1)比如我们拉下来一个centos:7的镜像下来,docker pull centos:7(只有两百m左右)
2)要运行它的基本命令:docker run -it centos:7 //进入docker容器中centos容器了
3)另外打开一个linux客户端,查看centos容器id
image.png
image.png - 删除和清理镜像
1.使用标签或者ID删除镜像
使用docker rmi或docker image rm命令可以删除镜像,
命令格式为docker rmi IMAGE [IMAGE...],
其中IMAGE可以为标签或ID。
支持有用选项:
-f,-force: 强制删除镜像,即使有容器依赖它;
例如,要删除掉redis:latest镜像,可以使用如下命令:
$ docker rmi redis:latest
$ docker rmi redis:5.0.4 eeb6ee3f44bd -f //彻低删除
docker system prune -a //清除镜像层缓存,
注意:当一个镜像有多个标志副本的时候,不会真正删除镜像,只会删除副本标签。
所以,真要删除镜像,建议用ID,删除的靠谱一点。
2.清理镜像
使用Docker一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,
可以通过docker image prune 命令来进行清理。
支持选项包括:
-a, -all:删除所有无用镜像,不光是临时镜像;
-filter filter: 只清理符合给定过滤器的镜像;
-f,-force:强制删除镜像,而不进行提示确认。
例如,如下命令会自动清理临时的遗留镜像文件层,最后会提示释放的存储空间:
$ docker image prune -f
Total reclaimed space: 1.4 GB