【Docker技术入门与实践(第2版)】Docker入门_学习笔记

本书介绍了Docker的基本知识,包括Docker与虚拟化的区别、核心概念如镜像、容器和仓库,以及Docker的安装配置。通过详细讲解如何创建、操作、管理Docker镜像和容器,包括使用Dockerfile创建镜像、容器的创建与启动、进入容器的多种方法,以及容器的导出导入。此外,还探讨了如何访问Docker Hub、使用镜像构建操作系统、添加SSH服务、Web服务与应用,以及如何进行持续开发与管理。最后,介绍了数据库应用和分布式处理与大数据平台的Docker实践。
摘要由CSDN通过智能技术生成

第一章

1 Docker入门须知

1.1 Docker基本知识

       Docker是基于Go语言实现的开源容器项目,诞生于2013年年初,最初发 起者是dotCloud公司。Docker自开源后受到广泛的关注和讨论,目前已有多个相关项目(包括Docker三剑客、Kubernetes等),逐渐形成了围绕Docker容器的生态体系。现在主流的Linux操作系统都已经支持Docker。例如,红帽公司的RHEL 6.5/CentOS 6.5往上的操作系统、Ubuntu14.04往上的操作系统,都已经在软件 源中默认带有Docker软件包。

       Docker的构想是要实现“Build,Ship and Run Any App,Anywhere”, 即通过对应用的封装(Packaging)、分发(Distribution)、部署 (Deployment)、运行(Runtime)生命周期进行管理,达到应用组件“一次封装,到处运行”的目的。这里的应用组件,既可以是一个 Web应用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。

                    

1.2  Docker VS 虚拟化

       虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务 器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的 不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。

       虚拟化的核心是对资源的抽象,目标往往是为了在同一个主机上同时运行多个系统或应用,从而提高系统资源的利用率,并且带来降低成本、方便管理和容错容灾等好处。 从大类上分,虚拟化技术可分为基于硬件的虚拟化和基于软件的虚拟化:

       真正意义上,基于硬件的虚拟化技术不多见,少数如网卡中的单根多IO虚拟化(Single Root I/O Virtualization and Sharing Specification,SR-IOV)等技术。  

       基于软件的虚拟化从对象所在的层次,又可以分为应用虚拟化和平台虚拟化(通常说的虚拟机技术即属于这个范畴)。其中,前者一般指的是一些 模拟设备或诸如Wine这样的软件。平台虚拟化又可以细分为如下几个子类:

       传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。

       Docker容器是在操作系统(OS)层面上实现虚拟化直接复用本地主机的操作系统,因此更加轻量级。

 

2. 核心概念和安装配置

  2.1 核心概念

   1.Docker镜像(Image)

       Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了Apache应用程序(或用户需要的其他软件)。可以把它称为一个Apache镜像

       镜像是创建Docker容器的基础。通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。

   2.Docker容器(Container)

       Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例。可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。可以把容器看做是一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。

       镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。

  3.Docker仓库(Repository)

      Docker仓库类似于代码仓库,它是Docker集中存放镜像文件的场所有时候会看到有资料将Docker仓库和仓库注册服务器(Registry)混为 一谈,并不严格区分。实际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放 Ubuntu操作系统镜像的仓 库称为Ubuntu仓库,其中可能包括14.04、12.04等不同版本的镜像。

       根据所存储的镜像公开分享与否,Docker仓库可以分为公开仓库 (Public)和私有仓库(Private)两种形式。目前,最大的公开仓库是官方提供的Docker Hub,其中存放了数量庞大的镜像供用户下载。国内不少云服务提供商(如时速云、阿里云等)也提供了仓库的本地源,可以提供稳定的国内访问。

       当然,用户如果不希望公开分享自己的镜像文件,Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。当用户创建了自己的镜像之后就可以使用push命令将它上传到指定的公有或者私有仓库。这样用户下次在另外一台机器上使用该镜像时,只需要将其从仓库上pull下来就可以了。Docker利用仓库管理镜像的设计理念与Git非常相似,实际上 在理念设计上借鉴了Git的很多优秀思想。

  2.2 Docker安装

   MacOS :https://docs.docker.com/docker-for-mac/install/

   Windows : https://docs.docker.com/docker-for-windows/

  ·Docker Platform : 支持在桌面系统或云平台安装Docker;

  ·Docker Hub : 官方提供的云托管服务,可以提供公有或私有的镜像仓库;

  ·Docker Cloud : 官方提供的容器云服务,可以完成容器的部署与管理, 可以完整地支持容器化项目,还有CI、CD功能;

  ·Docker DataCenter : 提供企业级的简单安全弹性的容器集群编排和管理。

   Docker目前只能运行在64位平台上且要求内核版本不低于3.10,实际上内核越新越好,过低的内核版本容易造成功能不稳定。Docker目前支持的最低Ubuntu版本为12.04 LTS,但实际上从稳定性上考 虑,推荐至少使用14.04 LTS版本。CentOS系统的要求与Ubuntu情况下类似:64位操作系统,内核版本至少为3.10。Docker目前支持CentOS 6.5及以后的版本,推荐使用CentOS 7系统。

  本人电脑安装简略步骤:

http://localhost/ 打开,看到如下页面,表示正确install nginx webserver.

命令行下输入: docker run --help  可查询docker run 命令所有的参数,其他命令也如此。

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

3. 使用Docker镜像

       Docker运行容器前需要本地存在对应的镜像,如果镜像没保存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。镜像是运行容器的前提,官方的Docker Hub网站已经提供了数十万个镜像供大家开放下载。

   docker  pull  [OPTIONS]  NAME[:TAG|@DIGEST]  -------> Pull an image or a repository from a registry,如果不显式指定TAG,则默认会选择 latest 标签,就会下载仓库中最新版本的镜像。

       一般来说,镜像的latest标签意味着该镜像的内容会跟踪最新的非稳定版本而发布,内容是不稳定的。从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的 latest 标记的镜像。如下:

    docker  pull  nodejs:10.11.0  <=====>  docker  pull  registry.hub.docker.com/nodejs:10.11.0

如果从非官方的仓库下载,则需要在仓库名称前指定完整的仓库地址。docker  pull  hub.c.163.com/public/nodejs:10.11.0

3.1  docker images(获取镜像文件)

·Tag: 比如14.04、latest用来标注不同的版本信息。只是标记,并不能标识镜像内容;

·IMAGE ID(唯一标识镜像):  如果ID一样表示它们目前实际上指向同一个镜像; 它唯一标识了镜像。在使用镜像ID的时 候,一般可以使用该ID的前若干个字符组成的可区分串来替代完整的ID。

·created : 说明镜像最后的更新时间;

·size : 优秀的镜像往往体积都较小。镜像大小信息只是表示该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用的存储空间会小于各镜像的逻辑体积之和。

3.2  docker tag (取别名)

     为了方便在后续工作中使用特定镜像,还可以使用docker tag命令来为本地镜像任意添加新的标签。这些myubuntu:latest镜像的ID跟ubuntu:latest 完全一致。它们实际上指向同一个镜像文件,只是别名不同而已。docker tag 命令添加的标签实际上起到了类似链接的作用。docker  tag  ubuntu:latest   myubuntu:latest 

 3.3  docker inspect (获取镜像的详细信息)  

     使用 docker inspect  nginx(docker inspect e81eb098537d)命令可以获取该镜像的详细信息,包括制作者、适应架构、各层的数字摘要等。返回的是一个JSON格式的消息,如果我们只要其中一项内容时,可以使用参数 -f 来指定,例如,

     获取镜像的Architecture : docker inspect nginx( or e81eb098537d)  -f  { {".Architecture"}}

 3.4  docker history (获取镜像的历史信息)  

     使用history子命令,该命令将列出各层的创建信息。docker history nginx

      

3.5  docker rmi (删除镜像)

     使用docker rmi命令可以删除镜像,命令格式为docker rmi  IMAGE [IMAGE...],其中IMAGE可以为标签或ID。当同一个镜像拥有多个标签的时候,docker rmi命令只是删除该镜像多个标签中的指定标签而已,并不影响镜像文件。删除标签为hel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值