什么是docker?
Docker使用Google公司推出的Go语言进行开发实现;
docker是linux容器的一种封装,提供简单易用的容器使用接口。是最流行的Linux容器解决方案;接口相当简单,用户可以方便的创建和销毁容器;
docker将应用程序与程序与程序的依赖,打包在一个文件里面,运行这个文件就会生成一个虚拟容器;程序运行在虚拟容器里,如同在真实物理机上运行一样,有了docker就不用担心环境问题了。
为什么使用docker?
以前的服务器部署的缺点:
1.部署非常慢;
2.成本非常高;
3.浪费资源;
4.难于迁移和扩展;
5.可能会被限定硬件厂商。
由于物理机的诸多问题,后来出现了虚拟机:
1.一个物理机可以部署多个app;
2.每个app独立运行在一个VM中;
但是虚拟化也是有局限性的,每一台虚拟机都是一个完整的操作系统,要分配系统资源,虚拟机多到一个程度时,操作系统本身资源也会消耗殆尽,或者必须扩容docker
docker与虚拟机的比较
特性 | docker | 虚拟机 |
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
虚拟机解决环境配置的问题
它可以在一种操作系统里面运行另一种操作系统,比如在Windows中运行Linux系统。应用程序对此毫无感知,因为虚拟机看上去和真实系统一样,对于windows来说,虚拟机就是一个普通的文件,不需要就可以删掉,对其他毫无影响。
虽然虚拟机可以还原软件的原始环境,但依然有几个缺点:
1.资源占用多,虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不用使用这些资源了。假如虚拟机里面运行的程序只有1MB,依然会需要几百MB的内存才能运行;
2.冗余步骤多,虚拟机是完整的操作系统,一些系统级别的操作步骤往往无法跳过,比如用户登录;
3.启动慢,启动操作系统需要多久,启动虚拟机就需要多久。
docker容器解决环境配置的问题
用上docker容器后,可以实现开发,测试和生产环境的统一化和标准化。
镜像作为标准的交付件,可以在开发,测试和生产环境上以容器来运行,最终实现三套环境上的应用以及运行所依赖内容的完全一致。
Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。在正常进程的外面套了一个保护层,对于容器里面的进程来说,它接触的资源都是虚拟的,从而实现和底层的隔离。
(1)启动快,容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本季的一个进程,而不是启动一个操作系统,速度就快很多;
(2)资源占用少,只占需要的资源,容器还可以共享资源,虚拟机都是独享资源;
(3)体积小,容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包。容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小的多。
docker容器的优势
更高效的利用系统资源;
更快速的启动时间;
一致的运行环境;
持续交付和部署;
更轻松的迁移。
docker的三大概念
docker镜像(image)
docker镜像就是一个只读的模版。
例如:一个镜像可以包含一个完整的CentOS操作系统环境,里面仅安装Apache或用户需要的其他的程序。
镜像可以用来创建docker容器。
docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户可以直接从别人那里下载一个已经做好的镜像来直接使用。
image的分层存储
因为镜像包含完整的root文件系统,体积是非常庞大的,因此docker在设计时按照Union FS的技术,将其设计为分层存储的架构。
镜像不是IOS那种完整的打包文件,镜像只是一个虚拟的概念,不是一个完整的文件,而是一组文件构成或者多组文件系统联合构成。
docker容器(container)
镜像和容器的关系,就像面向对象编程设计中的类和实例一样,镜像是静态的定义(class),容器是镜像运行时的实体(object)。
容器可以被创建,启动,停止,删除,暂停。
docker利用容器来运行应用。
容器是从镜像创建的运行实例,每一个容器都是相互隔离的,保证安全的平台。
*镜像是只读的,容器在启动的时候创建一层可写层作为上层。
docker仓库(repository)
仓库是集中存放镜像文件的场所,有时候把仓库和仓库注册服务器(registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放多个仓库,每个仓库里包含多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供大陆用户更稳定快读的访问。
当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下载在另外一台机器上使用这个镜像时候,只需需要从仓库上pull下来就可以了。
*Docker仓库的概念跟Git类似,注册服务器可以理解为GitHub这样的托管服务。
CentOS安装docker
1.卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
2.设置存储库
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
3.安装docker社区版
sudo yum install docker-ce #docker有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。
4.启动关闭docker systemctl start docker
docker镜像加速器
https://www.daocloud.io/mirror#accelerator-doc
https://www.cnblogs.com/pyyu/p/6925606.html
#一条命令加速
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io