一、镜像的概念

  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. 【重学Node.js 第4篇】实现一个简易爬虫&启动定时任务

    实现一个简易爬虫&启动定时任务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https://gith ...

  2. DEVOPS技术实践_07:Jenkins 管道工作

    一 简介 由于在公司构建很多工作,都是使用的maven工作构建的,这种构建方式很大缺点就是所有的工作都需要一步一步的配置,当项目较多,需求变动时,需要很大的精力去修改配置,很费劲 Pipeline即为 ...

  3. saltstack操作

    使用分组 修改minon的ID,做一个标识 [root@node2 ~]# vim /etc/salt/minionmaster: 172.25.254.130 id: web1 #node2[roo ...

  4. 软件包查询-rpm查询常用命令

    软件包查询 〇.测试环境[root@osker ~]# cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core)[root@osker ...

  5. MySQL中文乱码 - window环境

    MySQL中文乱码 window环境 Linux环境请参考这篇文章:[https://www.cnblogs.com/hankleo/p/9695842.html]: 查看及修改字符集sql --查看 ...

  6. RHEL6.6安装Oracle 11g RAC - 基于VMware的实验环境

    实验环境准备虚拟机:VMware® Workstation 14 Pro操作系统:Red Hat Enterprise Linux 6.6 x86_64rhel-server-6.6-x86_64-d ...

  7. Arrays.asList() 导致的java.lang.UnsupportedOperationException异常

    Arrays.asList() 只支持遍历和取值 不支持增删改 继承至AbstractList内部类

  8. C语言之数组用法总结

    一维数组的定义:1.数组的数据类型:每一元素占内存空间的字节数.2.数组的存储类型:内存的动态. 静态存储区或CPU的寄存器.3.一维数组在内存中占用的字节数为:数组长度X sizeof (基类型). ...

  9. Vuex实践(下)-mapState和mapGetters

    Vuex系列文章 <Vuex实践(上)> <Vuex实践(中)-多module中的state.mutations.actions和getters> <Vuex实践(下)- ...

  10. rabbitmq系列(二)几种常见模式的应用场景及实现

    一.简单模式 原理:生产者将消息交给默认的交换机,交换机获取消息后交给绑定这个生产者的队列(投递规则为队列名称和routing key 相同的队列),监听当前队列的消费者获取信息并执行消费逻辑. 场景 ...