一、什么是Docker

  官方文档描述:“Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.”

  一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。

  • Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docke最初实现是基于LXC。
  • 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。

  • 容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。

  • 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

  再来看看容器较为通俗的解释:
  如果需要通俗的描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。

              

二、为什么要用Docker

  • Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“这段代码在我机器上没问题啊”这类问题;——一致的运行环境

  • 可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。——更快速的启动时间

  • 避免公用的服务器,资源会容易受到其他用户的影响。——隔离性

  • 善于处理集中爆发的服务器使用压力;——弹性伸缩,快速扩展

  • 可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。——迁移方便

  • 使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。——持续交付和部署

三、Docker容器与虚拟机的区别

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

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

  两者对比图

        

  容器与虚拟机 (VM) 总结

          

  • 容器是一个应用层抽象,用于将代码和依赖资源打包在一起。 多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行 。与虚拟机相比, 容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动 。

  • 虚拟机(VM)是一个物理硬件层抽象,用于将一台服务器变成多台服务器。 管理程序允许多个VM在一台机器上运行。每个VM都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此占用大量空间。而且VM启动也十分缓慢 。

  通过Docker官网,我们知道了这么多Docker的优势,但是大家也没有必要完全否定虚拟机技术,因为两者有不同的使用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用 ,例如前端,后端以及数据库。就我目前项目而言,对于两者无所谓谁会取代谁,而是两者可以和谐共存。
  容器与虚拟机(VM)两者共存:

          

三、Docker的基本概念

  Docker 中包括三个基本的概念:

  • Image(镜像)
  • Container(容器)
  • Repository(仓库)

            

   Image(镜像)

  镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心。
  那么镜像到底是什么呢?Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
  镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像(Image)就是一堆只读层(read-only layer)的统一视角,也许这个定义有些难以理解,下面的这张图能够帮助读者理解镜像的定义: 
              

  从左边我们看到了多个只读层,它们重叠在一起。除了最下面一层,其他层都会有一个指针指向下一层。这些层是 Docker 内部的实现细节,并且能够在主机的文件系统上访问到。
统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角。这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。我们可以在图片的右边看到这个视角的形式。

  镜像有多种生成方法:

  • 从无到有开始创建镜像

  • 下载并使用别人创建好的现成的镜像

  • 在现有镜像上创建新的镜像

  我们可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作 Dockerfile ,通过执行 docker build命令可以构建出 Docker 镜像。

  Container(容器)
  容器(Container)的定义和镜像(Image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

              

  由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层。

  Repository(仓库)
  Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行。
  但是, 如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry(仓库注册服务器)就是这样的服务。
  有时候会把仓库(Repository)和仓库注册服务器(Registry)混为一谈,并不严格区分。
  Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。
  实际上,一个 Docker Registry 中可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag),每个标签对应着一个镜像。
  所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方,类似于我们之前常用的代码仓库。
  通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。
  我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 Latest 作为默认标签。
  仓库又可以分为两种形式:

  • Public(公有仓库)
  • Private(私有仓库)

  Docker Registry 公有仓库是开放给用户使用、允许用户管理镜像的 Registry 服务。
  一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。
  除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。
  当用户创建了自己的镜像之后就可以使用 Push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 Pull 下来就可以了。
  以上我们主要把 Docker 的一些常见概念如 Image,Container,Repository 做了详细的阐述,也从传统虚拟化方式的角度阐述了 Docker 的优势。

四、Docker的架构

  我们从下图可以直观地看到 Docker 的架构: 
            

  Docker 使用 C/S 结构,即客户端/服务器体系结构。Docker 客户端与 Docker 服务器进行交互,Docker服务端负责构建、运行和分发 Docker 镜像。
  Docker 客户端和服务端可以运行在一台机器上,也可以通过 RESTful 、 Stock 或网络接口与远程 Docker 服务端进行通信。 
          

  这张图展示了 Docker 客户端、服务端和 Docker 仓库(即 Docker Hub 和 Docker Cloud ),默认情况下 Docker 会在 Docker 中央仓库寻找镜像文件。
  这种利用仓库管理镜像的设计理念类似于 Git ,当然这个仓库是可以通过修改配置来指定的,甚至我们可以创建我们自己的私有仓库。

五、Docker常用命令

  我们可以通过 docker -h 去查看命令的详细的帮助文档。在这里会讲一些日常我们可能会用的比较多的一些命令。 
              

例如,我们需要拉取一个 Docker 镜像,我们可以用如下命令:

docker pull image_name

image_name 为镜像的名称,而如果我们想从 Docker Hub 上去下载某个镜像,我们可以使用以下命令:

docker pull centos:latest

cento:lastest 是镜像的名称,Docker Daemon 发现本地没有我们需要的镜像,会自动去 Docker Hub 上去下载镜像,下载完成后,该镜像被默认保存到 /var/lib/docker 目录下。
接着我们如果想查看主机下存在多少镜像,我们可以用如下命令:

docker images

我们要想知道当前有哪些容器在运行,我们可以用如下命令:

docker ps -a

-a 是查看当前所有的容器,包括未运行的。我们该如何去对一个容器进行启动,重启和停止呢?
我们可以用如下命令:

docker start container_name/container_iddocker restart container_name/container_iddocker stop container_name/container_id

这个时候我们如果想进入到这个容器中,我们可以使用 attach 命令:

docker attach container_name/container_id

那如果我们想运行这个容器中的镜像的话,并且调用镜像里面的 bash ,我们可以使用如下命令:

docker run -t -i container_name/container_id /bin/bash

那如果这个时候,我们想删除指定镜像的话,由于 Image 被某个 Container 引用(拿来运行),如果不将这个引用的 Container 销毁(删除),那 Image 肯定是不能被删除。
我们首先得先去停止这个容器:

docker psdocker stop container_name/container_id

然后我们用如下命令去删除这个容器:

docker rm container_name/container_id

然后这个时候我们再去删除这个镜像:

docker rmi image_name

常用的 Docker 相关的命令就讲到这里为止了,我们在后续的文章中还会反复地提到这些命令。

参考文献:

https://docs.docker.com/engine/docker-overview/

https://mp.weixin.qq.com/s/9--UJYVJXVr92RCX36R6Vg

                                --- END ---

转载于:https://www.cnblogs.com/LangXian/p/10635639.html

Docker基础入门总结相关推荐

  1. Docker基础入门(基本命令)

    Docker基础入门(基本命令) 一.Docker概述 1.Docker为什么会出现? 一款产品: 开发–上线 两套环境!应用环境,应用配置! 开发 - 运维. 问题:我在我的电脑上可以允许!版本更新 ...

  2. Docker基础入门及示例

    Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...

  3. Docker基础入门详解

    一.产生背景 在传统软件开发流程中,研发程序员将功能代码研发完成后,交由测试人员进行测试,最后通过运维人员部署上线.但是在这个过程中,常常因为环境问题.配置问题.软件版本问题等等诸多因素,造成一些问题 ...

  4. 老男孩Docker基础入门培训视频Docker核心原理解(完整版)

    课程介绍: Dokcer比较初级的培训视频教程,很适合零基础的朋友们来学习,没有复杂的原理,初入门推荐的Docker培训视频 课程目录: L021-01-Docker介绍.avi L021-02-Do ...

  5. docker基础入门和docker compose实战

    Docker运维部署 docker官网:https://www.docker.com/ 文档:https://docs.docker.com/ Docker的文档是超级详细的! 仓库:https:// ...

  6. Docker 基础入门篇(上)

    为什么需要docker 主流虚拟化技术分析 Docker的安装与部署 Docker的完整架构图 1.为什么需要docker 系统运行环境变更,软件版本升级,操作系统不一致等等问题都会导致本来一个很简单 ...

  7. Docker 基础入门

    参考 [狂神说Java]Docker最新超详细版教程通俗易懂 Docker 启动报错 前言 记录下笔记, 之后好复习 Docker安装 Docker的基本组成 镜像(image): Docker镜像就 ...

  8. Docker基础入门getting started

    系列文章目录 Docker 概述 Docker getting started 文章目录 系列文章目录 前言 一.容器及镜像的概念 二.容器化一个应用 三.更新应用 四.分享应用 五.持久化数据存储 ...

  9. docker基础入门一:docker安装镜像下载根据镜像创建容器

    一.安装准备: #卸载旧的版本: yum list installed |grep docker yum -y remove  ... #卸载后将保留/var/lib/docker的内容(镜像.容器等 ...

最新文章

  1. opencv 卡尔曼 java_卡尔曼滤波经典例子(opencv)
  2. 《spring揭秘》读书笔记二
  3. js库prototype中的$()
  4. JZOJ 100046. 【NOIP2017提高A组模拟7.14】收集卡片
  5. JAVA NIO概述(一):I/O模型
  6. 什么才是尊重自己呢?
  7. ie的window.open 未指明的错误_错误还是违法——离开的原因之一
  8. 克鲁斯卡尔算法c语言,Kruskal算法(一)之 C语言详解
  9. 基于yolo5工地安全帽和禁入危险区域识别系统,附数据集
  10. vue-lazyload的使用
  11. 【转载】RSA signatures with TPM2.0 and OpenSSL
  12. Java 类锁、对象锁、私有锁
  13. linux中ONBOOT=yes
  14. 实现putchar put_str put_int
  15. 放苹果(递归、动态规划、python)
  16. Spydroid还是大牛直播内置RTSP服务SDK
  17. 如何设置局域网内的固定IP地址?
  18. 微信开发工具使用git
  19. c语言格式字符二进制,C语言printf如何输出二进制数格式?将十进制数转为二进制输出...
  20. 什么是Memcached?

热门文章

  1. 数字孪生体技术白皮书_数字孪生体的标准化之路
  2. js的正则自定义金额输入验证函数
  3. python在win7中不能运行_Python3.6在win7中无法正常运行的问题
  4. mysql c 调用存储过程返回值_Mysql:使用返回值调用存储过程
  5. python爬虫短片_Python爬虫练习:爬取全民小视频(附代码,过程)
  6. 用python编写一个点餐程序_Python写一个自动点餐程序
  7. Qt笔记-QProcess切换用户执行进程(Linux)
  8. 前端笔记-vue cli使用echarts
  9. Java高级语法笔记-向上层抛出异常
  10. 大四课程设计之基于RFID技术的考勤管理系统(一)项目介绍