Docker入门---介绍和安装Docker

Docker安装文档

Docker介绍

背景

由于不同的机器有不同的操作系统,以及不同的库和组件,在将一个应用部署到多台机器上需要进行大量的环境配置操作。Docker 主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主操作系统和其它隔离的进程。使用 Docker 可以不修改应用程序代码,不需要开发人员学习特定环境下的技术,就能够将现有的应用程序部署在其它机器上。

简介

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

Docker是世界领先的软件容器平台。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。 运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用 Docker 可以构建敏 捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。

框架

Docker使用C/S架构,Client通过接口与Server进程通信实现容器的构建,运行和发布,如图:
在这里插入图片描述
Host(Docker 宿主机)
安装了Docker程序,并运行了Docker daemon的主机。

Docker daemon(Docker 守护进程):
运行在宿主机上,Docker守护进程,用户通过Docker client(Docker命令)与Docker daemon交互。

Images(镜像):
将软件环境打包好的模板,用来创建容器的,一个镜像可以创建多个容器。

镜像和容器的区别

镜像是一种静态的结构,可以看成面向对象里面的类,而容器是镜像的一个实例。镜像包含着容器运行时所需要的代码以及其它组件,它是一种分层结构,每一层都是只读的(read-only layers)。构建镜像时,会一层一层构建,前一层是后一层的基础。镜像的这种分层存储结构很适合镜像的复用以及定制。构建容器时,通过在镜像的基础上添加一个可写层(writable layer),用来保存着容器运行过程中的修改。
在这里插入图片描述

优点

  • 简化程序:Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管 理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就 能完成。
  • 避免选择恐惧症: 如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库 应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
  • 节省开支: 一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高 价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式
  • 快速回滚:容器之前的回滚机制,一般要基于上个版本的应用重新部署,且替换掉目前有问题的版本,在最初的时代,可能是一套完成的从开发到部署的流程,而执行这一套流程往往需要花费很长时间,在基于Git的环境中,可能是回退某个历史提交,然后重新部署,这些跟容器相比,都不够快,而且可能会产生新的问题。而容器技术天生带有回滚特性,因为每个历史容器或者镜像都会保存,而替换某个容器或者镜像是非常快速和简单的。

缺点

  • 局限性:Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用,并且Docker并非适合所有应用场景,Docker只能虚拟基于Linux的服务。Windows Azure 服务能够运行Docker实例,但到目前为止Windows服务还不能被虚拟化。
  • 隔离性:基于hypervisor的虚拟技术,在隔离性上比容器技术要好,它们的系统硬件资源完全上虚拟化的,当一台虚拟机出现系统级别的问题,往往不会蔓延到同一宿主机上的其它虚拟机上,但是容器就不一样了,容器之间共享同一个操作系统内核及其它组件,所以在受到诸如黑客攻击这种情况的时候,很容易通过底层操作系统影响的其它容器,甚至逐个击破,产生连锁反应,当然,这个问题可以通过部署容器来解决,但随之又会产生新的问题,比如成本增加以及性能问题。
  • 存储方案:容器的诞生并不是为OS抽象服务的,这是它和虚拟机最大的区别,这样的基因意味着容器天生是为应用环境做更多的努力,容器的伸缩也是基于容器的这一特性,而与之相对的,需要持久化存储方案恰恰相反,在数据存储这一点上Docker容器提供的解决方案是利用volume接口(存储卷)形成数据的映射和转移,以实现数据持久化的目的。但是这样同样也会造成一部分资源的浪费和更多的交互,不管是映射到宿主机上还是网络磁盘,都是退而求其次的解决方案
  • 性能瓶颈:不管是虚拟机还是容器,都是运用不同的技术对应用本身进行了一定程度的封装与隔离,在降低应用和应用之间以及应用和环境之间的耦合性上做了很多努力,但是随之而来的,就会产生更过的网络连接转发和数据交互,这在低并发系统上虽然不会很明显,但是当同一虚拟机或者服务器下面的容器需要更高并发量支撑的时候,也就是并发问题成为系统瓶颈的时候,容器会将这个问题放大,所以,并不是所有的场景都适合容器技术。

Docker安装

这里以CentOS7为例,官方明确指定需要64位的系统,并且Linux内核版本需要在3.1+

# 查看Linux内核版本指令:
uname -r

# 安装依赖的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2 

# 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 更新yum源软件包索引
yum makecache fast

# 安装docker-ce
yum install -y docker-ce

### 安装指定版本的docker
# 1. 先查看docker的版本列表
yum list docker-ce.x86_64  --showduplicates | sort -r 

# 2. 安装指定版本的docker
yum install -y docker-ce.x86_64 3:19.03.5-3.el7

# 安装完成之后使用命令查看安装docker的版本
docker version

在这里插入图片描述

发布了69 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Min_Monk/article/details/103911727