一、镜像的概念

  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. Controller中页面跳转完后页面的样式全消失的解决办法

    问题的原因应该是在controller中进行页面跳转时当前文件的路径变了 解决办法: 1.在jsp页面中<%@ page language="java" contentTyp ...

  2. CSP201903-2二十四点

    如图所示先处理乘号和除号,再处理加减. #include<bits/stdc++.h> using namespace std; ];int main(){ int n; cin>& ...

  3. table 组件

    table 组件了解一下? https://juejin.im/post/5da925bdf265da5b5d205b3f?utm_source=gold_browser_extension

  4. 还看不懂同事代码?快来补一波 Java 7 语法特性

    前言 Java 平台自出现到目前为止,已经 20 多个年头了,这 20 多年间 Java 也一直作为最流行的程序设计语言之一,不断面临着其他新兴编程语言的挑战与冲击.Java 语言是一种静态强类型语言 ...

  5. spring-boot第一章:快速开始

    快速开始 创建pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...

  6. 用户svn密码自定义

    由于在linux系统Apache+svn服务器,用户需要自定义密码怎么办呢? 1.创建脚本目录 mkdir -p /var/www/svn/svntools 2.创建apache配置文件 touch ...

  7. C++装饰器模式

    UML图: #include <iostream> #include <string> #include <windows.h> using namespace s ...

  8. Match3 Module For Game(THDN)

    介绍    THDN的核心机制为Match3的利用,本文对Match3 Gameplay进行记录,并对其进行改良.THDN作为RogueLIke性质的游戏,玩家在随机生成的dungeon里进行探索并获 ...

  9. 基于springboot+thymeleaf+springDataJpa自带的分页插件实现完整的动态分页

    实现百度搜索使用的前五后四原则,效果如下. 下面贴出代码,复制到前端即可,只需要域中放置page对象就可以.(springdatajpa自带的page 注意:第一页是按0开始算的) <div c ...

  10. C++生成dll以及调用(函数)和类

    C++新手,方法可能有很多,此方法仅仅是自己实验并可行,详细步骤如下: 生成dll文件和lib文件: (1) 新建项目-windows桌面向导,选择动态链接.dll以及空项目: (2)复制代码(头文件 ...