Docker学习笔记

Docker学习笔记

1.为什么要有Docker

首先学习一门技术之前,我还是要问一个Why?为什么会产生这个技术呢,这个技术可以满足什么需求呢,可以在哪些场景下应用呢?之前一直通说过这个概念,在部署博客网站时了解到可以使用Docker部署,但是没有采用这种方法,不过受到Guide哥的指引,今天来学习一下这门技术

我的理解是,Docker的目的是减少了开发和运维之间的打架斗殴行为,哈哈哈,虽然我没有具体体验过,但是众所周知开发和运维是一个相爱相杀的关系,开发完成项目之后在本地怎么跑都是OK的,打包成war包给运维,但是运维却跑不通,可是运维一点都没改过代码啊,回头找开发说,你写这啥破代码啊,根本不行,这时候开发心里一万个草泥马在奔跑😂 ​

其实这往往可能是由代码运行的环境不同,或者软件的版本不同导致的,例如开发电脑中安装的是jdk1.7,mysql5.7,而运维安装的是jdk1.8,mysql8.0,这其中涉及到一些不同版本的特性,就会导致问题的出现,针对这种情况,Docker技术就应运而生了,我觉得这门技术可谓是对运维非常友好,试想如果一个项目如果需要部署到集群上面,假如说就10台机器吧,那么10台机器就要挨个进行配置,鬼知道配置环境是多么反人类的一件事啊,犹记得刚接触Java时候配置jdk花了一天的时间😢,​如果业务加大,需要增加20台机器,那么再继续配置20台机器嘛?这根本就是拿运维不当人啊。

而Docker打破了我们原有的思维,一直觉得代码打包之后就是应用,而Docker提出了镜像的概念,开发将代码和运行环境一并打包,交给运维或者直接进行部署,我的理解镜像就是代码+环境,就像我们去买金鱼一样,如果我们只买了一条金鱼,而不要他们的鱼缸和水,回家之后金鱼却死掉了,这不是很尴尬,所以我们通常都是连同鱼缸和水一起买回去,这里自由发挥有点多了,接下来进入正题吧😀

2.永远的HelloWorld

学习新技术最好的地方当然就是官网了,官网地址:Docker官网

首先我们进行安装,Docker可以安装在很多平台上,Windows也是可以的,这里我将他安装在Centos中,这里有一个坑就是Docker对Linux的版本是有要求的,安装教程也可以在官网中找到,这里就略过了

image

启动Docker成功,执行docker run hello-world:

image

当然Docker命令还有很多的API可以调用,这里我就不举例写出了,因为记住是不可能的,我们只需要具备快速查找的能力就好了,学习新技术的第一选择永远是官网,里面的Reference文档里面说的很详细,使用docker --help也是可以查到简单版的api,这里不多说,授人以渔即可

3.Docker概念理解

Docker架构:

image

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。

image.png

3.Docker概念原理

这一块的内容昨天咨询了一下Guide哥,只需要了解一些原理,会使用就可以了,所以关于Linux底层的知识这里就不作深入了

image.png


以下内容摘取自Guide哥文档:Docker

每当说起容器,我们不得不将其与虚拟机做一个比较。就我而言,对于两者无所谓谁会取代谁,而是两者可以和谐共存。

简单来说: 容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高。

3.1 两者对比图

传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便.

容器 VS 虚拟机

3.2 容器与虚拟机总结

容器与虚拟机 (VM) 总结

  • 容器是一个应用层抽象,用于将代码和依赖资源打包在一起。 多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行 。与虚拟机相比, 容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动
  • 虚拟机 (VM) 是一个物理硬件层抽象,用于将一台服务器变成多台服务器。 管理程序允许多个 VM 在一台机器上运行。每个 VM 都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此 占用大量空间 。而且 VM 启动也十分缓慢

通过 Docker 官网,我们知道了这么多 Docker 的优势,但是大家也没有必要完全否定虚拟机技术,因为两者有不同的使用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而 Docker 通常用于隔离不同的应用 ,例如前端,后端以及数据库。

3.3 容器与虚拟机两者是可以共存的

就我而言,对于两者无所谓谁会取代谁,而是两者可以和谐共存。

两者是可以共存的

3.4 镜像、容器、仓库

概念什么的不用多说,镜像就是相当于面向对象中的类,容器就相当于对象,仓库是一个存放很多类的地方

4.常用命令

因为最近时间比较紧,就不一一演示命令了,现学现用吧

官方文档:https://docs.docker.com/reference/

一文搞懂 Docker 镜像的常用操作!