docker-基础
https://yeasy.gitbook.io/docker_practice/ 一、基本概念 镜像(Image) 容器(Container) 仓库(Repository) 理解以上三个概念,就能理解docker的生命周期 1.镜像 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件,以及一些运行时所需的配置参数。镜像不包含任何动态数据,其内容在插件之后也不会被改变 分层存储,镜像采用了分层存储的架构,由一组文件系统组成的(多层文件系统联合组成)。在构建镜像时,会一层一层构建,后一层依赖于上一层,后一层上的任何改变都只会发生在本层,不会干涉到上一层。因此构建镜像的时候,需要对每层需要添加的东西尽量加最少最有必要的东西,减少额外的东西 分层存储的特征还使得镜像的复用,定制更为容易 2.容器 容器是镜像运行时的实体,可以被创建、启动、停止、删除暂停等 镜像(Image)和容器(container)的关系,就像是面向对象程序设计中的类 和实例 一样 容器的实质是进程,运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统,网络配置、进程空间等,运行在一个隔离的环境。这样的隔离特性,使得容器封装的应用比直接在宿主运行更加安全 容器也是分层存储,是以镜像为基础层,在其上创建一个当前容器的存储层,这个层是为容器运行时进行读写而准备的,称为容器存储层 容器存储层的生命周期跟容器一样,当容器消亡时,容器存储层也随之消亡,因此任何保存于容器存储层的信息都会随着容器的删除而丢失 Dokcer最佳实践的要求,容器不应该向其存储层写入任何数据,容器存储层保存无状态化,所有的文件写入操作,都应该使用数据卷、或者绑定宿主目录 数据卷独立于容器,使用容器卷,容器的删除或者重写运行之后,数据都不会丢失 3.仓库 Docker Register:提供一个集中的存储、分发镜像的服务 一个Docker Register可以包含多个**仓库(Repository);每个仓库可以包含多个标签(Tag),**每个标签对应一个镜像 可以通过<Repository Name>:<Tag Name> 的格式来指定具体的软件是那个版本的镜像 仓库名以两段路径形式出现,比如jwilder/nginx-proxy 前者是Docker Registry多用户环境下的用户名,后者是对应的软件名 Docker Registry 公开服务 Docker Registry公开服务是开放给用户使用、允许用户管理镜像的Registry服务。 最常见的是Docker Registry公开服务是官方的hub.docker.com,也是默认的Registry 也可以使用国内的镜像网站 私有Docker Registry 用户可以在本地搭建私有的Docker Registry。Docker提供了Docker Registry镜像,可以直接使用搭建私有Registry服务 二、镜像 1.获取镜像 从Docker镜像仓库获取镜像的命令是 docker pull docker pull [选项] [Docker Registry 地址[:端口号]/] 仓库名[:标签] 具体选项可以从docker pull --help 命令查看, Docker镜像仓库地址:地址格式一般为 <域名/IP>[:端口号]。默认地址是 Docker Hub 仓库名:仓库名是两段式,即<用户名>/<软件名>.对于Docker Hub,如果不给出用户名,默认为 library,也就是官方镜像 $ docker pull ubuntu:18.04 上面命令没有给出Docker镜像仓库地址,默认从Docker Hub获取镜像。而镜像名称是ubuntun:18.04,因此会获取官方镜像 library/ubuntun仓库中标签为18.04的镜像 ...