Docker
在以前的开发时代,开发人员把自己开发好的war交付给运维人员,运维人员为了把war部署到服务器上且保证能运行,就必须由运维人员在服务器上搭建好运行环境!
可这样带来的问题是,如果开发环境与部署环境不一致(比如版本),则会导致无法在服务器环境上运行的问题。也就会经常听到开发人员说:“在我的机器上可正常工作的呀”之类的抱怨!
而为了解决这个问题,让这些程序在部署环境可以顺利执行,开发团队除了交付应用代码以外,也得准备完整的部署文件,让运维团队得以部署应用程序。即便如此,服务器上仍然常常发生部署失败的状况。
为了维护宇宙和平,为了开发人员和运维人员的大团结,docker应运而生!
docker的作用,简单来说,就是将你的业务代码和部署环境打包在一起,打包在一起的这个东东叫做“镜像”,然后你把“镜像”直接交给运维人员即可,运维人员拿到了你给他的“镜像”,就等价于同时拿到了业务代码、部署环境,运维人员再也不用自己亲自下载任何环境包了(甚至运维人员都可以不要了,DevOps应运而生)。
也就是说,docker能保证开发环境与部署环境的绝对一致!在使用docker的情况下,只要开发人员能保证在开发阶段应用能正常运行,那么把项目交付给运维人员后,在部署环境下也一定能运行!
另外,在使用docker的提前下,横向扩展(集群)也是很方便的。
Docker是什么
想要搞懂Docker,其实看它的两句口号就行。第一句,是“Build, Ship and Run”。
也就是,“搭建、发送、运行”,三板斧。举个例子:我来到一片空地,想建个房子,于是我搬石头、砍木头、画图纸,一顿操作,终于把这个房子盖好了。
结果,我住了一段时间,想搬到另一片空地去。这时候,按以往的办法,我只能再次搬石头、砍木头、画图纸、盖房子。但是,跑来一个老巫婆,教会我一种魔法。这种魔法,可以把我盖好的房子复制一份,做成“镜像”,放在我的背包里。
我拿着这个包,到了另一片空地,就用这个“镜像”,复制一套房子,摆在那边,拎包入住。
怎么样?是不是很神奇?
所以,Docker的第二句口号就是:“Build once,Run anywhere”
务必先配置阿里的yum源,这样安装docker的速度就不会太慢。
在CentOS 7下安装Docker:
卸载旧版本的docker,旧版本的docker程序被称作docker或者docker-engine,如果之前在系统中安装过,那么就卸载掉,当然连同依赖一起卸载了!
yum remove docker \
docker-client-latest \
docker-latest \
docker-selinux \
docker-engine
现在新版本的docker社区版叫做:docker-ce。安装需要的packages
yum install -y yum-utils device-mapper-persistent-data lw2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
此时可以正式安装docker-ce了,安装时间稍长
systemctl start docker
至此,在CentOS 7下,docker已经安装好了,可以查看下docker的版本
卸载旧版本
docker-client \
docker-common \
docker-latest-logrotate \
docker-engine
安装依赖
sudo yum install -y yum-utils \
device-mapper-persistent-data \
sudo yum-config-manager --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
如果安装报错,则执行以下命令,然后再安装
systemctl start docker
至此,在CentOS 8下,docker已经安装好了,可以查看下docker的版本
Docker架构设计原理
上图展示出了docker三要素:仓库、镜像、容器。看起来和Maven很相似,我们可以为Maven配置镜像仓库来提高依赖的下载速度,同样,我们也可以为docker配置镜像仓库,以提高镜像的下载速度。
Docker镜像加速器配置
Docker Hub服务是部署在国外的,且一个镜像大小,一般都在上百兆,这样的话,我们从Docker Hub服务上下载镜像的速度就会很慢,为了提高下载镜像的速度,我们需要配置国内的镜像加速器。
国内的镜像加速器不止一个,比如有:科大、网易、阿里云、七牛云。在本教程中,我们使用阿里云的镜像加速器。
首先注册一个阿里云账户,并登录,剩下的步骤,在图中已经很明确了
https://www.aliyun.com/product/acr?spm=5176.12825654.h2v3icoap.26.1dbb2c4akHLmKD&aly_as=6Y2Nt_Ty
该步骤是可选的,但还是建议配置一下,不然从dockerhub上拉取镜像的速度是无法容忍的!
配置好镜像加速器之后,可以键入以下命令进行验证
Docker Hello World
docker pull 镜像名 拉取远程仓库的镜像到本地仓库中
docker pull hello-world
docker images查看本地的所有镜像
docker run 镜像名 根据指定的镜像生成一个镜像的实例并运行
能看到以上的输出内容,就说明hello-world运行成功!
注意,如果docker的hello-world例子是由java写的,那么该hello-world镜像中,则会包含:应用程序、JVM、精简版的操作系统。如下图所示:
docker技术中的三大核心概念
1. 镜像,就是一个只读的模板(包含着软件,以及运行软件所需的环境)
2. 容器,是用镜像创建的运行实例 (每一个容器本质上都是一个操作系统)
其中仓库分为公开仓库和私有仓库两种形式,最大的公开仓库是Docker Hub,其中存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等。