一、Docker简介
Docker是什么?
Docker的英文本意是“搬运工”,在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行。
说白了,docker是一种用了新颖方式实现的轻量级虚拟机,类似于VM,但是在原理和应用上和VM的差别还是很大的.并且docker的专业叫法是应用容器(Application Container)。
为啥要用容器?
应用容器是个啥样子呢,一个做好的应用容器长得就像一个装好了一组特定应用的虚拟机一样,比如我现在想用mysql,那我就找个装好了mysql的容器就可以了,然后运行起来,我就能使用mysql了。
为啥不能直接安装一个mysql?安装一个SQL Server也可以啊,可是有的时候根据每个人电脑的不同,在安装的时候可能会报出各种各样的错误,万一你的机器中毒了,你的电脑挂了,你所有的服务都需要重新安装.但是有了docker,或者说有了容器就不同了,你就相当于有了一个可以运行起来的虚拟机,只要你能运行容器,mysql的配置就省了.而且如果你想换个电脑,直接把容器”端过来”就可以使用容器里面的服务.
总结Docker的优点可以分为四类:
1.多
可以通过镜像一部署多个应用,组成完整的架构环境。
2.快
docker容器很轻!很快!容器的启动时间是次秒级的,节约开发、测试、部署的时间。
3.好
docker容器可以在几乎所有的环境中运行,物理机、虚拟机、公有云、私有云、个人电脑、服务器等等。
docker容器之间是隔离的,如果容器出现问题,可以通过镜像快速生成全新的容器保证正常访问。
4.省
在容器中不用搭建系统,只需要基本的运行环境就可以了,这样就省去了系统环境硬件的消耗。
docker容器不需要 hypervisor ,他是内核级的虚拟化。
那么为啥不用VM?
那么既然容器和VM这么类似为啥不用VM?docker容器相对于VM还是有很多优点的:
1.启动速度快,容器通常在一秒内可以启动.而VM要很久.
2.资源利用率高,一台普通服务器可以跑上千个容器,而跑VM就。。。。。。
3.性能开销小,VM需要额外的CPU和内存来完成OS的功能,这一部分占据了额外的资源.
为啥相似的功能在性能上会有如此巨大的差距呢?看一下他们的设计图,先看VM的:可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
Docker优势和劣势
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。
其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而 Docker 只需要启动 10 个隔离的应用即可。
具体说来,Docker 在如下几个方面具有较大的优势。
更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
对比传统虚拟机总结
特性 | 容器 | 虚拟机 |
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 较弱 |
系统支持量 | 单机支持上千个容器 |
Docker 镜像
Docker 镜像是 Docker 容器运行时的只读模板,镜像可以用来创建 Docker 容器。每一个镜像由一系列的层 (layers) 组成。Docker 使用UnionFS(联合文件系统)来将这些层联合到单独的镜像中。UnionFS允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。
每个docker都有很多层次构成,docker使用 union file systems 将这些不同的层结合到一个image 中去。
例如:centos镜像中安装nginx,就成了nginx镜像”,其实在此时Docker镜像的层级概念就体现出来了。底层一个centos操作系统镜像,上面叠加一个ngnx层,就完成了一个nginx镜像的构建。层级概念就不难理解,此时我们一般centos操作系统镜像称为nginx镜像层的父镜像。Docker 仓库
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括 Docker Pool等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上pull下来就可以了。
*注:Docker 仓库的概念跟Git类似,注册服务器可以理解为 GitHub 这样的托管服务。
Docker 容器
Docker 利用容器来运行应用,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
*注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。与虚拟机相比,容器有一个很大的差异,它们被设计用来运行"单进程",无法很好地模拟一个完整的环境。Docker设计者极力推崇“一个容器一个进程的方式”,如果你要选择在一个容器中运行多个进程,那唯一情况是:出于调试目的。
容器是设计来运行一个应用的,而非一台机器。你可能会把容器当虚拟机用,但你将失去很多的灵活性,因为Docker提供了用于分离应用与数据的工具,使得你可以快捷地更新运行中的代码/系统,而不影响数据。
Docker 安装
docker官网:https://docs.docker.com
Docker值得关注的特性:
o 文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
o 资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。
o 网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。
o 日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
o 变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
o 交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,
CentOS 系列安装 Docker,Docker 支持 CentOS6 及以后的版本。
CentOS 6:
在RedHat/CentOS环境下安装Docker。官方文档要求Linux kernel至少3.8以上,且docker只能运行在64位的系统中。由于RHEL6和CentOS6的内核版本为2.6,因此必须要先升级内核。
升级内核(记住一定要升级,要不然会出现很多莫名奇怪的问题,建议用yum安装)
1、yum安装带aufs模块的3.10内核
#cd /etc/yum.repos.d #wget http://www.hop5.in/yum/el6/hop5.repo #yum install kernel-ml-aufs kernel-ml-aufs-devel</td>
2、修改grub的主配置文件/etc/grub.conf,设置default=0,表示第一个title下的内容为默认启动的kernel(一般新安装的内核在第一个位置),重启系统,这时候你的内核就成功升级了。
[root@localhost ~]# uname -r 3.10.5-3.el6.x86_64
查看内核是否支持aufs:
[root@localhost ~]# grep aufs /proc/filesystems nodev aufs
对于 CentOS6,可以使用EPEL库安装 Docker,命令如下
#yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm #yum install docker-io
启动docker服务
#service docker start
CentOS 7:
Prerequisites(先决条件)
Docker requires a 64-bit installation regardless of your CentOS version. Also, your kernel must be 3.10 at minimum, which CentOS 7 runs.
To check your current kernel version, open a terminal and useuname -rto display your kernel version:
[root@localhost~]# uname -r
Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装docker,只需要运行下面的 yum 命令:
[root@localhost~]#yum install docker
启动 Docker 服务:
安装完成后,使用下面的命令来启动docker服务,并将其设置为开机启动:
[root@localhost~]#servicedocker start [root@localhost~]#chkconfigdocker on
(此处采用了旧式的sysv语法,如采用CentOS 7中支持的新式systemd语法,如下:
[root@localhost~]#systemctlstartdocker.service [root@localhost~]#systemctlenabledocker.service
查看docker版本
#docker version
安装之前删除这条否则无法安装
rm -rf /var/run/yum.pid
查看docker版本:
docker info
以上是使用centos7软件源提供的docker安装程序
附:也可以按照官方文档安装
1. Log into your machine as a user withsudoorrootprivileges.
2. Make sure your existing yum packages are up-to-date.
3.Add the yum repo
$ sudo tee /etc/yum.repos.d/docker.repo<<-'EOF' [dockerrepo] name=DockerRepositorybaseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF
注:如果我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令了。tee命令读取标准输入,把这些内容同时输出到标准输出和(多个)文件中
4.Install the Docker package
$ sudo yum installdocker-engine
5.Start the Docker daemon.
$ sudo service dockerstart
6.Verifydockeris installed correctly by running a test image in a container.
验证docker安装正确
$ sudodocker run hello-worlddocker默认使用的是unix socket
附:直接输入docker命令来查看所有的Options和Commands,查看某一个command的详细使用方法:dockerCOMMAND--help
本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!