docker

概念

容器就是将软件打包成标准化单元,以用于开发、交付和部署。
简单来说,容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高。而容器的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更轻便。

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

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

Docker中有三个核心概念:Image、Container、Repository。

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

镜像(Image)

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

容器

镜像运行的实体。
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。前面讲过镜像使用的是分层存储,容器也是如此。

容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。

容器的存在离不开镜像的支持,他是镜像运行时的一个载体(类似于实例和类的关系)。依托Docker的虚拟化技术,给容器创建了独立的端口,进程,文件等空间,Container就是一个宿机隔离“容器”。容器和宿主机之间可以进行port,volumes,network等通信。

仓库(Repository)

集中存放镜像文件的地方,镜像构建完成后,可以很容易地在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。

一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。所以说:镜像仓库是Docker用来集中存放镜像文件的地方,类似于我们之前常用的代码仓库。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。

在deepin上安装docker服务端:

sudo apt-get install docker-ce

查看docker的客户端和服务端的版本号:

image.png

查看docker的服务端的运行状态:

image.png

`

用docker images 命令来查看我们本地有哪些images

image.png

可以看见,本地没有images,所以也就没有运行的containters。

搜索一下,搜索一下包含deepin的images


image.png

下载images,并且在docker中运行hello world


image.png

image.png

image.png

创建、运行Docker容器

docker run创建并运行容器

sudo docker run -it repository:tag /bin/bash

删除Docker容器和镜像

sudo docker rm containerID
sudo docker rmi ImageID

启动/停止容器

sudo docker start/stop containerID

进入正在启动的容器

sudo docker exec -it containerID /bin/bash

你可能感兴趣的:(docker)