一.Docker介绍

1.1什么是docker

Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源

Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植性的容器中,然后发布到任何流行的Liunx机器上,也可以实现虚拟化

容器是完全使用沙箱机制,相互之间不会有任何接口(类似iphone的app),更重要的是容器性能开销极低

1.2为什么用docker

1.简化程序
Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Liunx机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker进行管理。方便快捷已经是Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成

2.避免选择恐惧症
如果你有选择恐惧症,还是资深患者。Docker帮你打包你的纠结!比如Docker镜像;Docker镜像中包含了运行环境和配置,所以Docker可以简化部署多种应用实例工作。比如Web应用,后台应用,数据库应用,大数据应用比如Hadoop集群,消息队列等等都可以打包成一个镜像部署

3.节省开支
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker改变了高性能必然高价格的思维定势。Docker与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式

4.持续交付和部署
对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。使用Docker可以通过定制应用镜像来实现持续集成,持续交付,部署。开发人员可以通过Dockerfile来进行镜像构建,并结合持续集成(Continuous Integration)系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署,而且使用Dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像

5.更轻松的迁移
由于Docker确保了执行环境的一致性,使得应用的迁移更加容易,Docker可以在很多平台上运行,无论是物理机,虚拟机,公有云,私有云,甚至是笔记本,其运行结果是一致的,因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况

1.3Docker的应用场景

Web应用的自动化打包和发布
自动化测试和持续集成,发布
在服务型环境中部署和调整数据库或其他的后台应用
从头编译或者扩展现有的OpenShift或Cloud Foundry 平台来搭建自己的PaaS环境

云计算+大数据时代
开发一套应用程序代码,服务器(Liunx),安装开发环境工具包(JDK/Tomcat/MySql/Nginx/RabbitMQ/Redis/Solr)
IaaS:(Infrastructure-as-a-Service)基础设施即服务
阿里云,百度云,腾讯云,华为云
IaaS:服务器:开发一套应用程序代码,安装开发环境工具包

PaaS:(Platform as a Service)平台即服务
PaaS:服务器+安装开发环境工具包:只需要开发一套应用程序代码

SaaS:(Software-as-a-Service)软件即服务
SaaS:服务器+安装开发环境工具包+代码 —>只需要花钱购买服务即可

1.4Docker和虚拟机总结

1.实现原理技术不同
虚拟机是用来进行硬件资源划分的完美解决方案,利用的是硬件虚拟化技术,如此VT-x,AMD-V会通过一个hypervisor层来实现对资源的彻底隔离

2.使用资源方面不同·
Docker容器与主机共享操作系统内核,不同的容器之间可以共享部分系统资源,因此更加轻量级,消耗的资源更少

3.虚拟机会独占分配给自己的资源,不存在资源共享,各个虚拟机之间近乎完全隔离,更加重量级,也会消耗更多的资源

4.应用场景不同
若需要资源的完全隔离并且不考虑资源的消耗可以使用虚拟机
若是想隔离进程并且需要大量进行实例,应该选择Docker容器

项目 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

1.5Docker总结

  • Docker是世界领先的软件容器平台
  • Docker使用Google公司推出的Go语言进行开发实现,基于Liunx内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其他的隔离的进程,因此也称为容器,Docker终于最初实现是基于LXC
  • Docker能够自动执行重复性任务,例如 搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件
  • 用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理,复制,分享,修改,就像管理普通的代码一样
  • Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现"这段代码在我机器上没问题啊"这类问题–一致的运行环境
  • 可以做到秒级,甚至毫秒级的启动时间,大大的节约了开发,测试,部署的时间—更快速的启动时间
  • 避免公用的服务器,资源会容易受到其他用户的影响–隔离性
  • 善于处理集中爆发的服务器使用压力–弹性伸缩,快速扩展
  • 可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况----迁移方便
  • 使用Docker可以通过定制应用镜像来实现持续集成,持续交付,部署----持续交付和部署

二.Docker架构

简介
Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器

Docker容器通过Docker镜像来创建

容器与镜像的关系类似于面向对象编程中的对象与类

2.1Docker基本概念

Docker包括三个基本概念

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)
    理解了这三个概念,就理解了Docker的整个生命周期

2.2Docker引擎

Docker使用客户端 服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。
Docker容器通过Docker镜像来创建,详情可以自行百度

2.3Docker架构

容器与镜像的关系类似于面向对象编程中的对象与类

Docker 面向对象
容器 对象
镜像
Docker 镜像(Images) Docker镜像是用于创建Docker容器的模板
Docker 容器(Container) 容器是独立运行的一个或一组应用
Docker 客户端 (Client) Docker客户端通过命令行或者其他工具使用Docker API 与Docker的守护进程通信
Docker 主机(Host) 一个物理或者虚拟的机器用于执行Docker守护进程和容器
Docker仓库(Registry) Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库,Docker Hub提供了庞大的镜像集合供使用
Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox,Digital Ocean,Microsoft Azure

2.3Docker镜像

是一个存入镜像的仓库,通常被部署在互联网服务器或者云端
Docker Hub(https://hub.docker.com)提供了庞大的镜像集合供使用

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序,库,资源,配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷,环境变量,用户等)镜像不包含任何动态数据,其内容在构建之后也不会被改变

2.3.1分层存储

因为镜像包含操作系统完整的root文件系统,其体积往往是庞大的,因此在Docker设计时,就充分利用Union FS的技术,将其设计为分层存储的架构,所以严格来说,镜像并非是像一个ISO那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成

镜像构建时,会一层层构建,前一层是后一层的基础,每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层,比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像,因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉

分层存储的特征还使得镜像的复用,定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,侯建新的镜像

jdk
liunx
docker

2.4Docker容器

镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建,启动,停止,删除,暂停等

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命令空间,因此容器可以拥有自己的root文件系统,自己的网络配置,自己的进程空间,甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样,这种特性使得容器疯转给的应用比直接在宿主运行更加安全,也因为这种隔离的特性,很多人初学Docker时常常会混淆容器和虚拟机

前面讲过镜像使用的是分层存储,容器也是如此,每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层

容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡,因此,任何保存于容器存储层的信息都会随容器删除而丢失

按照Docker最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷,或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高

数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡,因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失

三.Docker仓库

3.1公有Docker Registry

Docker Registry公开服务是开放给用户使用,允许用户管理镜像的Registry服务,一般这类公开服务允许用户免费上传,下载公开的镜像,并可能提供收费供用户管理私有镜像

最常使用的Registry公开服务是官方的Docker Hub,这也是默认的Registry
并拥有大量的高质量的官方镜像,除此以外,还有CoreOSQuay.io,
CoreOS相关的镜像存储在这里,Google的Google Container Registry,Kubernetes的镜像使用的就是这个服务

由于某些原因,在国内访问这些服务可能会比较慢,国内的一些云服务商提供了针对Docker Hub的镜像服务,这些镜像服务被称为加速器,常见的有阿里云加速器,DaoCloud加速器等,使用加速器会直接从国内的地址下载Docker Hub的镜像,比直接从Docker Hub下载速度会提高很多

国内也有一些云服务商提供类似于Docker Hub的公开服务,比如时速云镜像仓库,网易云镜像服务,DaoCloud,镜像市场,阿里云镜像库

3.2私有Docker Registry

除了使用公开服务外,用户还可以在本地搭建私有Docker Registry,Docker官方提供了Docker Registry镜像,可以直接使用

四.安装Docker

我这里安装的是docker版本是20.10.11,我是在CentOS7里安装的
官方提供的安装教程:
httpsL//docs.docker.com/install/liunx/docker-ce/centos/#install-using-the-repository

4.1 CentOS安装要求

Docker支持以下的CentOS版本:

  • CentOS 7(64-bit)
  • CentOS 6.5(64-bit)或更高的版本

4.2 安装

Centos7https://docs.docker.com/engine/install/centos/
目前,CentOS仅发行版本中的内核支持Docker。Docker运行在CentOS7上,要求系统为64位,系统内核版本为3.10以上。Docker运行在CentOS-6.5或更高的版本的CentOS上,要求系统为64位,系统内核版本为2.6.32-431或者更高版本

4.2.1校验版本

命令: 校验Liunx内核版本 (3.10以上版本)

uname -r

以2017年3月开始docker在原来的基础上分为两个分支版本:Docker CE和Docker EE. Docker CE即社区免费版,Docker EE即企业版,强调安全,但需付费使用 本文介绍Docker CE的安装使用

4.2.2移除旧的版本

 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine

如果yum报告未安装这些软件包,则可以

4.2.3安装一些必要的系统工具

安装所需的软件包。yum-utils提供了yum-config-manager应用,并device-mapper-persistent-datalvm2由需要devicemapper存储驱动程序

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

4.2.4添加软件源信息

源1(官方推荐)(国外镜像慢)

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

源2(阿里云源)(个人推荐使用)

sudo yum-config-manager --add-repo  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.2.5更新yum缓存

sudo yum makecache fast

4.2.6安装Docker-CE

sudo yum -y install docker-ce

4.2.7启动Docker后台服务

sudo systemctl start docker

4.2.8重启Docker服务

sudo systemctl restart docker

4.2.9安装成功后可通过查看

docker version

Docker学习(一)-----Docker简介与安装相关推荐

  1. 容器虚拟化技术Docker(一)简介、安装、常见命令、数据卷、安装常规软件

    容器虚拟化技术Docker(一)简介.安装.常见命令.数据卷.安装常规软件 1.Docker简介 1.简介 Docker的主要目标是"Build,Ship and Run Any App,A ...

  2. Docker学习(2)-Docker基础1

    Docker学习(1)-Docker简介 1.2 Docker安装及基础命令介绍 https://www.docker.com/#Docker官网 Docker 运行系统 OS 版本选择: Docke ...

  3. Docker学习1——Docker入门

    Docker学习1--Docker入门 参考资料 1.Docker简介 2.尚硅谷2022版Docker实战教程(docker教程天花板) 1.1 Docker简介 1.1.1 Docker引入 假定 ...

  4. Docker学习(3)-Docker镜像构建和使用

    Docker学习(1)-Docker简介 Docker学习(2)-Docker基础1 Docker 镜像与制作 Docker 镜像内是否包含内核(bootfs)? 首先,从镜像的体积大小来说,一个比较 ...

  5. Docker学习2——Docker高级

    Docker学习2--Docker高级 2.1 Dockerfile解析 2.1.1 Dockfile是什么 Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参 ...

  6. Mahout学习之Mahout简介、安装、配置、入门程序测试

    一.Mahout简介 查了Mahout的中文意思--驭象的人,再看看Mahout的logo,好吧,想和小黄象happy地玩耍,得顺便陪陪这位驭象人耍耍了... 附logo: (就是他,骑在象头上的那个 ...

  7. 狂神说--docker学习笔记-docker安装,常用命令,以及使用

    狂神说bilibili视频地址:https://www.bilibili.com/video/BV1og4y1q7M4?p=1 1. Docker概述 1.1 Docker为什么出现? 大家经常做一款 ...

  8. Docker学习三 Docker安装Mysql

    Docker安装Mysql 文章目录 Docker安装Mysql 前言 查看docker镜像 查看mysql镜像版本 下载镜像 运行mysql 前言 mysql数据库是后端开发经常用到的,而且有时候还 ...

  9. Docker学习(一)-----Docker全面介绍

    Docker简介 Docker是一种遵从Apache2.0协议开源的Linux容器管理解决方案,它通过进程和进程通信技术对操作系统的文件资源和网络的进行隔离,实现了包含文件资源.系统资源(shell环 ...

最新文章

  1. 第一次接觸sbt會遇到的
  2. 用keil怎么擦除_用这种方法销毁硬盘数据,即使美国中央情报局也难以恢复
  3. 青源 LIVE 预告 | 北大王一飞:高效 GAN 采样算法 (ECML 最佳论文解读)
  4. 2019年首趟春运年货集装箱班列抵达北京
  5. EDM数据营销概念简要介绍
  6. linux进程打开链接数,Linux 进程打开最大文件连接数Too many open files
  7. [工具]-PGP的使用方法
  8. CSS3动画@keyframes中translate和scale混用出错问题
  9. html绘制波形图,JS实现波形图
  10. 网址的bibtex格式
  11. java游戏可以刷升级挖药材,【毕业设计】Java手机游戏设计
  12. python获取文件夹名_python基础之获取文件目录及名称
  13. Linux/deppin 中安装、卸载软件的几种命令
  14. 进程间同步的几种方法
  15. servlet mysql 分页_Java基础94 分页查询(以MySQL数据库为例,Servlet技术)
  16. typedef用法(二)
  17. pyqt5制作定时关机软件
  18. Blender场景建模练习:破旧的公寓楼
  19. 2018最新圣思园JavaSE实地培训系列视频教程
  20. Systrace的工作原理

热门文章

  1. 索引是建的越多越好吗?
  2. 2022-2028年中国滑雪产业投资分析及前景预测报告(全卷)
  3. 常用的高性能 KV 存储 Redis、Memcached、etcd、Zookeeper 区别
  4. linux系统管理必备知识之关机命令
  5. LeetCode简单题之最近的请求次数
  6. 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)
  7. 卷积神经网络模型可解释性
  8. 目标检测中的anchor-based 和anchor free
  9. 客快物流大数据项目(六十二):主题及指标开发
  10. Python案例:使用BeautifuSoup4的爬虫