为什么要学习Docker
没有使用Docker情况:
开发人员开发好项目后,打成war包交给运维人员,运维人员需要在服务器上搭建好环境,并把war包部署到服务器上保证可以运行。
当开发环境与部署环境不一致时(比如版本),就会导致无法在服务器环境上运行。
为了让程序在部署环境下也可以顺利运行,开发人员除了交付应用代码,还需要准备完整的部署文件。即使这样,服务器上仍然经常发生部署失败的情况。
Docker的作用
简单来说,就是把业务代码和部署环境打包在一起,这种业务代码和部署环境打包在一起的东西被称为"镜像"。有了这个镜像,就相当于运维人员同时拿到了业务代码和部署环境,这样运维人员就不需要自己下载任何环境包了(甚至运维人员都可以不要了,DevOps(自动化运维)应运而生)。
也就是说,docker保证了开发环境和部署环境的绝对一致,只要开发人员保证开发时应用可以正常运行,把项目交给运维人员后,在部署环境下一定可以运行。
Docker介绍
docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。(摘自百度百科)
Docker的两句口号:
第一句:Build, Ship and Run 意思是搭建、发送、运行
第二句:Build once,Run anywhere 搭建一次,到处运行
Docker安装
安装前保证配置了阿里的yum源,这样安装的速度会快。
在CentOS 7下安装Docker
如果想卸载之前安装过的Docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
yum自带的仓库中没有Docker,要安装Docker需要先安装前置依赖
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
yum -y install docker-ce
安装完成,整个安装过程花费了大概10分钟。
启动docker
systemctl start docker
检测docker版本
docker -v
Docker设计原理
registry代表docker的中央仓库,里面放了很多软件的镜像,镜像中是打包好的代码和环境。
Docker_Host代表你的主机,之前装redis时需要自己yum安装,还要手动make编译。
使用了docker安装之后,只需要使用docker命令:"docker pull 镜像名称",它就会从中央仓库把镜像拉到本地,使用"docker run 镜像名称"运行镜像得到一个容器,就可以启动redis,整个过程中没有安装、编译的过程。
这和maven很相似,我们可以为Maven配置镜像仓库来提高依赖的下载速度,同样,我们也可以为docker配置镜像仓库,以提高镜像的下载速度。
Docker镜像加速器配置
Docker Hub服务部署在国外,从下载镜像的速度很慢,为了提高下载速度,需要配置国内的镜像加速器。
国内的镜像加速器有很多,比如有:科大、网易、阿里云、七牛云。我们使用阿里云的镜像加速器。
首先注册一个阿里云账户,并登录
https://www.aliyun.com/product/acr?spm=5176.12825654.h2v3icoap.26.1dbb2c4akHLmKD&aly_as=6Y2Nt_Ty
点击管理控制台 ==> 镜像工具 ==> 镜像加速器 ==> CentOS
复制配置镜像加速器中的代码,粘贴到FinalShell命令行,回车运行。
配置好镜像加速器之后,可以验证一下
docker info
看到这个网址和上图的加速器地址一样就说明配置好了
Docker Hello World
我们先查看一下docker中有没有镜像
docker images
可以看到没有任何镜像。
开始使用Docker拉取测试镜像hello world
docker pull hello-world
完成之后再查看,发现有一个hello-world镜像,这个镜像中有代码以及运行该代码所需要的环境
运行hello-world镜像
docker run hello-world
出现上面这些输出内容,就说明hello-world运行成功。
删除镜像
测试完成可以删除这个镜像,删除镜像之前需要先删除镜像中的容器。
镜像和容器的关系就像类和对象,一个类可以创建多个对象,一个镜像也可以跑出多个容器。
查看所有容器
docker ps -a
通过容器id删除容器
docker rm c79da81aebe4
通过镜像id删除镜像
docker rmi feb5d9fea6a5
删除完成后,再次查看发现已经没有镜像了。
上面的例子是先下载镜像,再运行镜像。其实还可以直接运行镜像:
docker run命令查找镜像的流程
如果docker的hello-world例子是由java写的,那么该hello-world镜像中,则会包含:应用程序、JVM、精简版的操作系统。
如下图所示:
docker技术中的三大核心概念
1. 镜像,就是一个只读的模板
2. 容器,是用镜像创建的运行实例,一个镜像能跑多个容器。容器本质上是一个操作系统。
3. 仓库,是集中存放镜像文件的仓库
其中仓库分为公开仓库和私有仓库两种形式,最大的公开仓库是Docker Hub,其中存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等。