一、镜像的概念

  1、广泛镜像概念:

    镜像是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在完全相同的副本即为镜像。

  2、Docker镜像概念:

    在Docker中镜像同样是一种完全相同的副本,以广泛的镜像来理解就很简单了,Docker虽然在Linux系统中,但是内部又完全和Linux系统隔开。所以我们可用Docker来将自己的项目构建成镜像。相当于把自己的项目代码复制一份到Docker系统里。

二、如何解决项目运行时所需的生产环境

  问题很快产生,在Linux中已经安装好的运行环境。使得我们项目可以正常运行,但是去到一个新系统中。项目那些生产环境岂不是需要重新安装。而重新安装又很麻烦。所以Docker对于这个处理就是可以用多个镜像叠加在一起。如下图:

  可看见镜像是分层的,及上面一层依赖着下面的镜像来运行。举个例子:我们需要部署Java项目在Docker上,我们需要先从Docker中拉取jdk的镜像作为基础的镜像,有了这个镜像那么Java项目就可进行编译及运行了。所以Docker中的镜像分层的概念可以理解为是在Linux系统中安装对应的生产环境。而且DockerHub中同样具有很全的镜像,包括Ubuntu的镜像与centos镜像同样存在。但是重点在于镜像是只读的。我们能写入的只有容器。

三、静态容器

  对于静态容器的定义和镜像几乎一模一样,同样是一堆层的统一视角,唯一区别是在于容器最上面那一层是可读可写的。可以理解为我们的项目基于下面运行环境搭建起来的镜像并为它覆盖上一层读写层,使得我们可以进入修改文件。即容器=镜像+读写层。这里需要注意的是容器的定义并没有说容器是否在运行。也就是容器可以运行也可以暂停。

四、运行中的容器

  在运行态中的容器被定义为一个可读写的统一文件系统加上隔离的进程空间和包含其中的进程。如下图:

  Docker拥有文件隔离技术与进程隔离技术。在运行态的容器,可通过shell进入bash系统,内部的进程与文件都是较外部系统独立存在的,可通过读写层进行修改内部文件

五、理解Dokcer中build命令

  在Docker中build是用来创建镜像的命令,通常我们会使用Dockerfile来创建镜像,而每次Dockerfile文件开头总是会有FROM字段。结合上面我们所说镜像是多层的来看,FROM就是底层镜像,而我们当前需要build的镜像需要以该镜像作为基础。镜像的关键在于可不停叠加镜像,直到我们把所需要的生产环境都部署好,再进行构建我们项目的镜像即可。

六、理解Docker中create,start,run三种命令

  1、create

    docker create <image-id>命令可以理解为为指定镜像添加一个读写层,就构成了容器,正如上面所说容器=镜像+读写层。但此时容器并未运行起来。如下图

  2、start

    docker start <container-id>命令是为容器的文件系统创建了一个进程隔离空间,注意:每个容器只能有一个进程隔离空间,因为进程隔离所以外部的信息访问不到内部的,这时候就需要端口映射,将容器内的正在运行端口映射到外部Linux系统上。这样就可以通过访问Linux的端口从而访问到Docker中。这个端口通常是我们项目接受请求的端口,比如MySQL要运行在Docker上需要映射3306端口等。这时候容器是属于运行起来了的状态。项目可以正常接收请求和发布请求了。

  3、run

    docker run <image-id>这个命令相当于create+start,即如下图:

七、总结

  上面的概念已经揭开Docker最神秘的面纱。让我们知道Docker内部是一个什么情况。为什么需要构建镜像,容器运行时为什么要暴露端口等等一些最基础的问题。而Docker技术现在也已经成为微服务架构时代最主流的部署方式,后面我们还会讲如何编排服务。使得服务之间能正常通讯与运行。

    

  

Docker(一):理解Docker镜像与容器的更多相关文章

  1. Docker——理解好镜像和容器的关系

    关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料.  镜像也是 docker 的核心组件之一,镜像时容器运行的基础,容器是镜像运行后的形态.前面我们介绍了 ...

  2. docker核心概念(镜像、容器、仓库)及基本操作

    概要 docker是一种linux容器技术.容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求.可简单理解为一种沙盒 .每个容器内运行一个应用,不同的容 ...

  3. Docker 基于已有镜像的容器创建镜像

    Docker 基于已有镜像的容器创建镜像: docker:/root# docker run -it januswel/centos /bin/bash docker exec -it januswe ...

  4. Docker学习笔记之镜像与容器

    0x00 概述 镜像和容器作为 Docker 里最基础的概念,我们很有必要了解 Docker 对它们的很多定义以及其他与它们有关的知识.在这一小节里,我们就专门针对镜像与容器两个概念展开,细致的梳理与 ...

  5. Docker学习笔记:镜像、容器、数据卷

    核心概念 镜像:一个只读的模板,类似虚拟机的镜像. 容器:可以理解为镜像的一个运行实例.运行时类似于沙箱,多个容器互相独立. 仓库:存放镜像文件的地方. 镜像 命令表格 命令 解释 选项 docker ...

  6. docker commit理解构建镜像(7)

    镜像是多层存储,每一层是在前一层的基础上进行的修改: 而容器同样也是多层存储是在以镜像为基础层,在基础层上加一层作为容器运行时的存储层. 当我们使用Docker Hub的镜像无法满足我们的需求时,我们 ...

  7. docker批量删除本地镜像和容器

    长时间运行docker,每次只用docker kill去停止容器,但是从没删除过本地镜像,导致有上百个镜像在占用内存. 1.批量停止容器 docker container stop $(docker ...

  8. docker安装、下载镜像、容器的基本操作

    文章目录 一.docker安装与基本使用 1.docker的安装.从远程仓库下载镜像 2.配置docker国内源 二.创建容器 1.create i.创建容器 ii.进入容器 iii.启动容器 2.r ...

  9. Docker入门——理解Docker的核心概念

    1 前言 相信不少人听过这么一句话: 人类的本质是复读机. 在软件开发领域也一样,我们总是想寻找更好地方式复制优秀的逻辑或系统.最核心的方法是抽取通用逻辑和组件,把差异化的东西接口化或配置化,达到复用 ...

  10. docker挂载volume的用户权限问题,理解docker容器的uid

    docker挂载volume的用户权限问题,理解docker容器的uid 在刚开始使用docker volume挂载数据卷的时候,经常出现没有权限的问题. 这里通过遇到的问题来理解docker容器用户 ...

随机推荐

  1. C# ref参数

    ref关键字用于将方法内的变量改变后带出方法外.具体我们通过例子来说明: static void Main(string[] args) { int c = 0; Add(1, 2,ref c); C ...

  2. 【转载】CSS flex属性深入理解

    文章转载自 张鑫旭-鑫空间-鑫生活 http://www.zhangxinxu.com/ 原文链接:https://www.zhangxinxu.com/wordpress/2019/12/css-f ...

  3. 从头学pytorch(十二):模型保存和加载

    模型读取和存储 总结下来,就是几个函数 torch.load()/torch.save() 通过python的pickle完成序列化与反序列化.完成内存<-->磁盘转换. Module.s ...

  4. 【题解】多少个$1$(exBSGS)

    [题解]多少个\(1\)(exBSGS) 解方程: \[ \underbrace {1\dots1}_{n}\equiv k \mod m \] 其实就是 \[ \dfrac {10^n-1} {9} ...

  5. Python 线性回归(Linear Regression) - 到底什么是 regression?

    背景 学习 Linear Regression in Python – Real Python,对 regression 一词比较疑惑. 这个 linear Regression 中的 Regress ...

  6. 异常记录 Connection reset

    连接重置Connection reset 异常java.net.SocketException: Connection reset 详细信息 java.net.SocketException: Con ...

  7. Hadoop以及组件介绍

    一.背景介绍 在接触过大数据相关项目的时候常常都会听到Hadoop这个东西,简单来说,他是一个用分布式计算来处理大数据的开源软件,下面包含了许多的组件和子项目,这篇文章将会介绍Hadoop的原理以及一 ...

  8. Linux 学习笔记 6 搭建nginx 实现二级域名访问

    前言 在前一节的内容里面,我们学习了如何使用yum 包管理工具来安装我们需要的软件,这节内容,通过搭建Nginx 反向代理服务器,以及学习服务的配置等内容. NGINX Nginx是一款轻量级的Web ...

  9. Spring Boot从零入门3_创建Hello World及项目剖析

    目录 1 前言 2 名词术语 3 创建Hello World项目 3.1 基于STS4创建项目 3.2 使用Spring Initializr Website创建项目并导入 3.3 基于Spring ...

  10. No property andp found for type String! Traversed path: CmsPage.siteId.

    Respository没有找到该参数 1)由该参数,函数名写错,不符合JPA规范 2)实体类没有该参数