Docker的介绍与安装
1、Docker的介绍
[1]、什么是 Docker
Docker 是一个开源的应用容器引擎,是使用最广泛的开源容器引擎之一,基于Go语言开发。它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,可以更快的交付应用。也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。说简单就是使用Docker可以更快的打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。
总之一句话:只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作 。
Docker的官方网站:https://www.docker.com/
[2]、为什么使用Docker
- 一致的运行环境:Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“这段代码在我机器上没问题啊”这类问题。
- 更快速的启动时间:可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
- 隔离性:避免公用的服务器,资源会容易受到其他用户的影响。
- 弹性伸缩,快速扩展:善于处理集中爆发的服务器使用压力。
- 更高效的利用系统资源:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。
- 迁移方便:可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
- 持续交付和部署:使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。
[3]、Docker的应用场景
- Web应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
使用Docker可以实现开发人员的开发环境、测试人员的测试环境、运维人员的生产环境的一致性。
Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。
2、Docker和传统虚拟机的区别
Docker和传统虚拟机的区别:
- 传统虚拟机技术是虚拟出整台机器包括硬件,然后在该虚拟机上安装并运行一个完整操作系统,在该系统上再运行所需应用进程;虚拟机一旦被开启,预分配给它的资源将全部被占用。每一个虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。虚拟机占用的硬盘空间比较大,一般都需要10GB以上,可见虚拟机使用起来非常笨重。
- 容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。 容器内的应用进程直接运行于宿主机的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。容器包含应用和其所有的依赖包,但是与其它容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。容器占用的空间也比较小,一般在几十到几百MB,因此容器要比传统虚拟机更为轻便。
所以综上对比,Docker是一种轻量级的虚拟化技术,比传统的虚拟机性能更好。
下面的图片比较了 Docker 和传统虚拟化方式的结构不同之处:
下图是虚拟机的体系结构:
- Server - 一台真实的电脑,例如:笔记本,台式机。
- Host OS - 真实电脑的操作系统,例如:Windows,Linux
- Hypervisor - 虚拟机平台,模拟硬件,如:VMWare,VirtualBox
- Guest OS - 虚拟机平台上安装的操作系统,例如:CentOS Linux
- App - 虚拟机操作系统上的应用,例如:mysql,redis
下图是Docker的体系结构:
- Server - 一台真实的电脑,例如:笔记本,台式机。
- Host OS - 真实电脑的操作系统,例如:Windows,Linux
- Docker Engine - 新一代虚拟化技术Docker引擎,不需要包含单独的操作系统。
- App - 所有的应用程序现在都作为Docker容器运行。
这种体系结构的明显优势是,不需要为虚拟机操作系统提供硬件模拟。所有应用程序都作为Docker容器工作,性能更好。
Docker和传统虚拟机的详细对比:
- Docker启动快速属于秒级别。虚拟机通常需要几分钟去启动。
- Docker需要的资源更少,Docker在操作系统级别进行虚拟化,Docker容器和内核交互,几乎没有性能损耗,性能优于通过Hypervisor层与内核层的虚拟化。
- Docker更轻量,Docker的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境,Docker运行的镜像数远多于虚拟机数量。对系统的利用率非常高。
- 与虚拟机相比,Docker隔离性更弱,Docker属于进程之间的隔离,虚拟机可实现系统级别隔离。
- 安全性:Docker的安全性也更弱。Docker的租户root和宿主机root等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户root权限和宿主机的root虚拟机权限是分离的,并且虚拟机利用如Intel的VT-d和VT-x的ring-1硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击。
- 可管理性:Docker的集中化管理工具还不算成熟。各种虚拟化技术都有成熟的管理工具,例如VMware vCenter提供完备的虚拟机管理能力。
- 高可用和可恢复性:Docker对业务的高可用支持是通过快速重新部署实现的。虚拟化具备负载均衡、高可用、容错、迁移和数据保护等经过生产实践检验的成熟保障机制,VMware可承诺虚拟机99.999%高可用,保证业务连续性。
- 快速创建、删除:虚拟化创建是分钟级别的,Docker容器创建是秒级别的,Docker的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间。
- 交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化;Docker在Dockerfile中记录了容器构建过程,可在集群中实现快速分发和快速部署。
3、Docker的三个核心组件
Docker的三个核心分别为:仓库、镜像和容器,如果理解了这三个概念,就理解了 Docker 的整个生命周期。
- 镜像(image):Docker的镜像代表一个应用的环境,它是一个只读模板,是容器的基础。如:MySQL镜像、Tomcat镜像,Nginx镜像等等。
- 容器(container):Docker的容器就是基于镜像启动后的一个具体的应用实例(进程),意思就是启动了一个服务,它的特点就是可读可写,有系统容器和应用容器。如:MySQL服务,Tomcat服务等。
- 仓库(repository):仓库是用来存放镜像的位置,有公开仓库(Public)和私有仓库(Private)两种形式。类似于maven仓库,也是镜像下载和上传的位置。
- DockerFile:Docker生成镜像配置文件,用来自定义镜像的一些配置。
- TAR:对镜像打包的文件,以后可以还原成镜像。
4、存储库安装Docker(CentOS7)
Docker的安装官方文档地址:在 CentOS | 上安装 Docker 引擎Docker 文档 ,所以下面就参考官方的步骤来。
系统要求:Docker需运行在CentOS7.X以上的版本
1、移除系统原有的docker安装包,以免影响安装
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、设置docker的yum源(这一步可省略,仅仅为了下载快一点)
(二选一)
#国内yum源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#官方yum源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3、安装docker [注:docker-ce是社区版(免费),docker-ee是企业版(收费),我们下载社区版基本够用了]
#没有指定版本则默认安装最新版
yum install docker-ce docker-ce-cli containerd.io
4、查看docker安装的版本号
#查看docker版本
docker -v
docker version
#查看docker详细信息
docker info
5、docker启动相关的命令,docker在安装完之后默认是没有启动的,所以需要手动启动。
#开启docker
systemctl start docker
#关闭docker
systemctl stop docker
#docker状态
systemctl status docker
#重启
systemctl restart docker
#设置开机启动
systemctl enable docker
6、测试安装的docker,永远的hello-world。
docker run hello-world
7、docker的卸载,卸载当前已经安装好的docker程序,包括docker引擎、客户端 和容器包。
#1. 卸载依赖
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
#2. 删除资源(docker的默认工作路径),因为主机上的映像、容器、卷或自定义配置文件不会自动删除。
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
5、Bash脚本安装Docker(推荐)
通过这种方式安装Docker就是脚本安装,方便快捷暴力。在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装,另外可以通过 --mirror 选项使用国内源进行安装,非常方便并且速度快。但是注意:官方特别声明了不建议将脚本用于生产环境,但可以用作示例来创建根据您的需求量身定制的预配脚本。
1、下载docker安装脚本
curl -fsSL get.docker.com -o get-docker.sh
2、使用ls
命令查看get-docker.sh脚本是否下载成功
3、然后执行 sudo sh get-docker.sh --mirror Aliyun
安装docker
只要执行上面两个命令就已经安装好了,是不是非常的快。注意,如果你不是root
用户,是需要使用sudo
命令或者给用户sudo权限。安装完成后,通过docker version
命令检查是否安装成功。
6、Docker配置镜像加速服务
用过Maven的都知道,它默认使用的是国外的中央仓库,在国内下载jar包内容非常的慢。而Docker默认也是从官方镜像仓库拉取所需镜像的,因此国内拉取比较慢,所以需要指定国内的镜像仓库加速服务。这里使用阿里云的镜像加速服务:https://help.aliyun.com/document_detail/60750.html 打开链接后会出现如下界面。
登录操作完成之后回来到下面这个页面,然后点击[镜像工具-->镜像加速器],在这里可以看到为我们单独生成了加速地址,把这个按照操作将加速地址加到Docker中即可。
获取上面的文件之后操作就很简单了,按照上面的提示一步步完成就好了。即将大括号{}中的json字符串复制到一个daemon.json即可,然后重启docker。
# 1、创建文件夹
mkdir -p /etc/docker
# 2、笔记json文件
vim /etc/docker/daemon.json
# 3、添加如下内容,具体地址请自己申请哟
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
# 或者省略1、2、3步骤,直接执行如下命令
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
# 4、最后重启服务
systemctl daemon-reload
systemctl restart docker
然后使用 docker info
参考是否配置成功。