Docker容器技术的使用,现在它已经不仅仅只是运维人员的专属技能了,对于我们开发人员同样需要具备,在很多中小公司中云环境的项目搭建和项目部署依然还是我们开发人员干的事,所以多学一门技术总是没错的。
1.Docker介绍
Docker最初是PaaS云服务平台提供商dotCloud公司创始人Solomon Hykes在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并于2013年3月以Apache2.0授权协议开源,主要项目代码在GitHub上进行维护。Docker项目后来还加入了Linux基金会,并成立推动开放容器联盟(OCI)。
Docker自开源后受到广泛的关注和讨论,无论是从 github上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连Google的Compute Engine也支持docker在其之上运行。甚至由于 Docker项目的火爆,在2013年底,dotCloud公司决定改名为Docker。
Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于LXC,从0.7版本以后开始去除LXC,转而使用自行开发的libcontainer,从1.11开始,则进一步演进为使用runC和containerd。
下面的图片比较了Docker和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而Docker容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
图1.1-传统虚拟化
图1.2-Docker
Docker优点
·环境搭建和部署方便
以前要在Linux上搭建应用所需的一些环境不是一件容易的事,往往一个环境出现一些小问题可能都耗费我们很久的时间,并且搭建了环境应用部署和管理也不是一件容易的事。而又了Docker我们可以很轻松的搞定环境的问题,只需要下载一个镜像或几个镜像然后创建容器运行即可。
·可移植性强Docker
可以让开发者打包他们的应用以及依赖包到一个或多个可移植的容器中,然后发布到任何流行的Linux机器上。Docker可以对其中的镜像环境(比如:tomcat、jdk、redis等)的启动、重启、停止等都可以进行管理。
·隔离性
Docker可以确保你的应用程序与资源是分隔开的。Docker中每一个容器都拥有自己的资源,并且跟其他容器都是隔离开的。这样我们就可以使用Docker的容器运行多个不同的应用程序,并且我们不需要它的时候删除容器即可,非常的方便并且也不会影响其他的应用。
·快速实现版本回滚
在没有容器之前,我们现在的应用出现问题需要回滚的时候,我们需要借助于git等其他工具把代码回滚到以前状态,然后重新打包部署起来,这个过程肯定不是很快能够完成。而Docker就可以像git一样对器进行版本的提交和回滚,从而可以快速实现应用的回滚。
2.Docker架构
Docker使用客户端-服务器 (C/S) 架构模式,主要由两部分组成:
·Docker:开源的容器虚拟化平台
·Docker Hub:用于分享、管理Docker容器的 Docker SaaS平台
Docker客户端会与Docker daemon守护进程进行通信。Docker守护进程会处理复杂繁重的任务,例如建立、运行、发布你的Docker容器。Docker客户端和守护进程可以运行在同一个系统上,当然你也可以使用 Docker客户端去连接一个远程的Docker守护进程。Docker客户端和守护进程之间通过socket或者 RESTful API进行通信。
3.Docker的组成
Docker基本上由三个部件组成:
Docker镜像-Docker images
Docker仓库-Docker registeries
Docker容器-Docker containers
·Docker镜像
Docker镜像是Docker容器运行时的只读模板,每一个镜像由一系列的层(layers)组成。Docker使用 UnionFS来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker是如此的轻量。当你改变了一个 Docker镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发Docker镜像变得简单和快速。
·Docker容器
Docker容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个Docker 容器都是从Docker镜像创建的。Docker容器可以运行、开始、停止、移动和删除。每一个Docker容器都是独立和安全的应用平台,Docker容器是Docker的运行部分。
·Docker仓库
Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker仓库也有公有和私有的概念。公有的Docker仓库名字是Docker Hub。Docker Hub提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker仓库是Docker的分发部分。
这三个部件也可以这样来形象的理解:Docker镜像为我们要安装应用的安装包文件,而Docker容器就是安装包安装好可以运行的应用程序只不过一个镜像可以创建很多的容器程序,Docker仓库就是可以下载Docker镜像的一个应用商店。
4.Docker的安装、启动和镜像加速配置
Docker划分为CE和EE。CE即社区版(免费,支持周期三个月),EE即企业版,强调安全,付费使用。官方网站上有各种环境下的安装指南,Docker CE在 Linux、Windows 10 (PC)和macOS上的安装。
CE和EE的主要区别:
1.EE兼容更多的操作系统。
2.EE更加的安全。
因为服务器系统都是CentOS(Linux操作系统的一种),所以这里只介绍CentOS的安装及使用。
Docker CE支持64位版本CentOS 7,并且要求内核版本不低于3.10。CentOS 7满足最低内核的要求,但由于内核版本比较低,部分功能(如overlay2存储层驱动)无法使用,并且部分功能可能不太稳定。
Docker安装:
在现在版本的Docker引擎安装中,通常主要使用两种方式:设置Docker的存储库并从中进行安装或者使用自动脚本安装(其实还有rpm软件包安装),其实使用脚本安装的方式也是运行了方式一中的yum命令进行安装的。
在安装之前,如果系统上存在较旧版本的Docker的话,我们先进行卸载。较旧的Docker版本称为docker或docker-engine。
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
(1)使用Docker存储库安装
在新主机上首次安装Docker Engine之前,需要设置Docker存储库。之后,您可以从存储库安装和更新Docker。安装yum-utils软件包(提供yum-config-manager实用程序)并设置稳定的存储库。
$ sudo yum install -y yum-utils
$ 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
然后安装docker引擎:
$ sudo yum install docker-ce docker-ce-cli containerd.io
如果需要安装特点版本的docker引擎,可以使用以下命令:
$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
(2)使用脚本自动安装
在测试或开发环境中Docker官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS系统上可以使用这套脚本安装:
官方安装脚本:
curl-fsSL https://get.docker.com | bash -s docker–mirror Aliyun
也可以使用国内daocloud一键安装命令:
curl-sSL https://get.daocloud.io/docker | sh
启动Docker:
安装好Docker之后,为了方便我们把Docker设置为开机自启:
$ sudo systemctl enable docker.service
然后启动Docker:
$ sudo systemctl start docker
最后测试下我们安装的Docker是否能用:
$ sudo docker version
镜像加速:
国内从Docker Hub拉取镜像的时候太慢,并且有的时候还会拉取失败,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
·Docker官方提供的中国registry mirror
·阿里云加速器
·DaoCloud加速器
我们以阿里云加速器为例进行介绍,注册阿里云账号,并在“容器镜像服务”->“镜像库”->“镜像加速”中可以看到自己的镜像加速地址,如图:
镜像加速配置之后,需要重启Docker才能生效:
$ systemctl daemon-reload
$ systemctl restart docker