Docker

1. Docker快速起步_运维



先安装Docker,再讲课


没有Docker的日子里


在以前的开发时代,开发人员把自己开发好的war交付给运维人员,运维人员为了把war部署到服务器上且保证能运行,就必须由运维人员在服务器上搭建好运行环境!


可这样带来的问题是,如果开发环境与部署环境不一致(比如版本),则会导致无法在服务器环境上运行的问题。也就会经常听到开发人员说:“在我的机器上可正常工作的呀”之类的抱怨!


而为了解决这个问题,让这些程序在部署环境可以顺利执行,开发团队除了交付应用代码以外,也得准备完整的部署文件,让运维团队得以部署应用程序。即便如此,服务器上仍然常常发生部署失败的状况。


1. Docker快速起步_运维_02



所以,我们才会看到“程序员拜服务器” 这种奇葩的事情了!

1. Docker快速起步_Docker_03




Docker能做什么

为了维护宇宙和平,为了开发人员和运维人员的大团结,docker应运而生!


docker的作用,简单来说,就是将你的业务代码和部署环境打包在一起,打包在一起的这个东东叫做“镜像”,然后你把“镜像”直接交给运维人员即可,运维人员拿到了你给他的“镜像”,就等价于同时拿到了业务代码、部署环境,运维人员再也不用自己亲自下载任何环境包了(甚至运维人员都可以不要了,DevOps应运而生)。


也就是说,docker能保证开发环境与部署环境的绝对一致!在使用docker的情况下,只要开发人员能保证在开发阶段应用能正常运行,那么把项目交付给运维人员后,在部署环境下也一定能运行!


另外,在使用docker的提前下,横向扩展(集群)也是很方便的。




Docker是什么

docker 是一个 开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现 虚拟化。容器是完全使用 沙箱机制,相互之间不会有任何接口。(摘自百度百科)



想要搞懂Docker,其实看它的两句口号就行。第一句,是“Build, Ship and Run”。

1. Docker快速起步_docker_04



也就是,“搭建、发送、运行”,三板斧。举个例子:我来到一片空地,想建个房子,于是我搬石头、砍木头、画图纸,一顿操作,终于把这个房子盖好了。

1. Docker快速起步_Docker_05



结果,我住了一段时间,想搬到另一片空地去。这时候,按以往的办法,我只能再次搬石头、砍木头、画图纸、盖房子。但是,跑来一个老巫婆,教会我一种魔法。这种魔法,可以把我盖好的房子复制一份,做成“镜像”,放在我的背包里。

1. Docker快速起步_运维_06



我拿着这个包,到了另一片空地,就用这个“镜像”,复制一套房子,摆在那边,拎包入住。

1. Docker快速起步_docker_07



怎么样?是不是很神奇?


所以,Docker的第二句口号就是:“Build once,Run anywhere



Docker安装

务必先配置阿里的yum源,这样安装docker的速度就不会太慢。


在CentOS 7下安装Docker:

卸载旧版本的docker,旧版本的docker程序被称作docker或者docker-engine,如果之前在系统中安装过,那么就卸载掉,当然连同依赖一起卸载了!

yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-selinux \

docker-engine-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了,安装时间稍长

yum -y install docker-ce


安装好之后,启动docker

systemctl start docker


至此,在CentOS 7下,docker已经安装好了,可以查看下docker的版本

docker -v


在CentOS 8下安装Docker:

卸载旧版本

yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-engine


安装依赖

sudo yum install -y yum-utils \

device-mapper-persistent-data \

lvm2


添加yum源

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


如果安装报错,则执行以下命令,然后再安装

yum erase podman buildah


安装好之后,启动docker

systemctl start docker


至此,在CentOS 8下,docker已经安装好了,可以查看下docker的版本

docker -v



Docker架构设计原理

先大致看一下这个图

1. Docker快速起步_运维_08


上图展示出了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


1. Docker快速起步_运维_09



该步骤是可选的,但还是建议配置一下,不然从dockerhub上拉取镜像的速度是无法容忍的!


配置好镜像加速器之后,可以键入以下命令进行验证

docker info



Docker Hello World

docker pull 镜像名 拉取远程仓库的镜像到本地仓库中

docker pull hello-world


docker images查看本地的所有镜像

docker images


docker run 镜像名 根据指定的镜像生成一个镜像的实例并运行

1. Docker快速起步_运维_10


能看到以上的输出内容,就说明hello-world运行成功!


docker run命令查找镜像的流程如下:

1. Docker快速起步_docker_11


注意,如果docker的hello-world例子是由java写的,那么该hello-world镜像中,则会包含:应用程序、JVM、精简版的操作系统。如下图所示:

1. Docker快速起步_运维_12



docker技术中的三大核心概念

1. 镜像,就是一个只读的模板(包含着软件,以及运行软件所需的环境)

2. 容器,是用镜像创建的运行实例 (每一个容器本质上都是一个操作系统)

3. 仓库,是集中存放镜像文件的仓库


容器本质上是一个操作系统:


其中仓库分为公开仓库和私有仓库两种形式,最大的公开仓库是Docker Hub,其中存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等。