Linux--Docker容器引擎

1.1.1揭开 Docker的神秘面纱

      1、Docker是什么

       Docker是在Linux容器里运行应用的开源工具,是一种轻量级的 “虚拟机”。诞生于2013年,最 初的发起者是dotCloud公司。后来改名为Docker Inc,专注于Docker相关技术和产品的开发。Docker 项目目前已经加人啊Linux基金会,全部开源代码均在https://github.com/docker上进行相关维护官网地址为https://www.docker.com/,有相关文档可以参考。现在Docker 与 OpenStack同为最受欢迎的云计算开源项目。

       Docker 的Logo设计为蓝色鲸鱼,拖着许多集装箱。如图1.1所示,鲸鱼可以看作宿主机,而集装箱可以理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。正如 Docker的设计宗旨一 样:Build、Ship and Run Any App、Anywhere,即通过对应用组件的封装、发布、部署,运行等生命周期的管理,达到应用组件级别的 “一次封装,到处运行” 的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。

2、Docker和虚拟机的区别

       作为一种轻量级的虚拟化方式,Docker与传统虚拟机相比具有显著的优势

       Docker容器很快,启动和停止可以在秒级实现,比传统虚拟机要快很多;Docker核心解决的问题是利用容器来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源, 所以 Docker 容器除了运行其中的应用之外,基本不消耗额外的系统资源,从而在保证应用性能的同时,减小系统开销,使得在一台主机上同时运行数千个Docker容器成为可能;Docker操作方便,还可以通过 Dockerfile配置文件支持灵活的自动化创建和部署。表1-1对使用Docker容器技术与传统虚拟化技术的特性进行了比较。

1.1.2 Docker的核心概念

1、镜像

      Docker的镜像(image)是创建容器的基础,类似虚拟机的快照.可以理解为是一个面向 Docker 容器引擎的只读模板。比如,一个镜像可以是一个完整的CentOS操作系统环境,称为一个CentOS 镜像:可以是一个安装了MySQL的应用程序,称为一个MySQL镜像,等等。

      Docker提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经做好的应用镜 像来直接使用。

2、容器

       Docker的容器(Container)是从镜像创建的运行实例。它可以被启动、停止和删除。所创建的每 一个容器都是相互隔离,互不可见,可以保证安全性的平台。可以把容器看作一个简易版的Linux环境,Docker利用容器来运行和隔离应用。

3、仓库

       Docker仓库(Repository)是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用 push 命令将它上传到公有仓库(Public)或者私有仓库(Private),这样一来当下次要在另外一台机器上使用这个镜像时,只需要从仓库上拉取下来就可以了。

      仓库注册服务器(Registry)是存放仓库的地方,其中包含了多个仓库,每个仓库集中存放某一 类镜像,并且使用不同的标签(Tag)来区分它们。目前最大的公共仓库是Docker Hub,存放了数量庞大的镜像供用户下载使用。

安装Docker的前提操作

能ping通即可 

[root@node2 ~]# ping www.baidu.com

下载以下插件需官网yum源,把原来的移回来即可 。安装完成后启动Docker并设置为开机自动启动。

[root@node2 yum.repos.d]# yum -y install epel-release

[root@node2 yum.repos.d]# wget http://mirrors.aliyun.com/docker-ce/linux/

[root@node2 yum.repos.d]# yum -y install docker-ce

[root@node2 yum.repos.d]# systemctl enable docker containerd --now

 搜索镜像

       在使用下载镜像前,可以使用docker search命令搜索远端官方仓库中的共享镜像。 命令格式:docker search关键字

例如,搜索关键字为dhcp的镜像:

[root@node2 ~]# docker search dhcp

获取镜像

搜索到符合需求的镜像,可以使用 docker pull命令从网络下载镜像到本地使用。

      命令格式,docker pull仓库名称[:标签]

      对于Docker镜像来说,如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即 选择标签为latest,也可通过指定的标签来下载特定版本的某一镜像。这里标签就是用来区分镜像版 本的。 例如,下载镜像docker.io/networkboot/dhcpd:

[root@node2 ~]# docker pull docker.io/networkboot/dhcpd

查看镜像信息

      用户可以使用 dockerimages命令查看下载到本地的所有镜像。 查看指定镜像的命令语法: docker images 仓库名称:[标签]

      如果不指定仓库名称和标签,直接查看本地所有镜像,输入如下:

[root@node2 ~]# docker images

从回显的信息中可以读出以下信息:

REPOSITORY:镜像属于的仓库

TAG:镜像的标签信息,标记同一个仓库中的不同镜像。

IMAGE ID:镜像的唯一口号,唯一标识了该镜像。

CREATED:镜像创建时间。

VIRTUAL SIZE:镜像大小。 用户还可以根据镜像的唯一标识D号,获取镜像的详细信息。

命令格式:  docker inspect 镜像ID号

例如,获取镜像的详细信息:

[root@node2 ~]# docker inspect e25c872f0fca

镜像的详细信息中包括创建时间、系统版本、主机名、域名、用户、卷、标签、操作系统、设备ID等各种信息。

      为了在后续工作中使用这个镜像,可以用 dockertag命令来为本地的镜像添加新的标签。

      命令格式:  docker tag名称:[标签]新名称:[新标签]

例如,本地镜像添加新的名称为dhcp,新的标签为dhcp:

[root@node2 ~]# docker images

删除镜像

使用 docker rmi命令可以删除多余的镜像。

 删除镜像的操作有两种方法:使用镜像的标签删除镜像;使用镜像的ID删除镜像。

命令格式:   docker rmi 仓库名称:标签

                  或者

                  docker rmi 镜像ID号

例如,要删除掉dhcp:dhcp镜像,可以使用如下命令:

[root@node2 ~]# docker rmi dhcp:dhcp 

       当一个镜像有多个标签的时候,docker mi命令只是删除该镜像多个标签中的指定标签,不会影响镜像文件,相当于只是删除了镜像的一个标签而已。但当该镜像只剩下一个标签的时候就要小 心了,再使用删除命令就会彻底删除该镜像。

      例如,删除docker.io/networkboot/dhopd镜像,可以看出它会删除整个镜像文件的所有层:

[root@node2 ~]# docker rmi docker.io/networkboot/dhcpd

存出镜像和载入镜像

       当需要把一台机器上的镜像迁移到另一台机器上的时候,需要将镜像保存成为本地文件,这一 过程叫做存出镜像,可以使用 docker save命令进行存出操作。之后就可以复制该文件到其他机器。

命令格式: docker save -o存出镜像为本地文件

例如,存出本地的docker.io/networkboot/dhcpd镜像为文件dhcp:

[root@node2 ~]# docker pull docker.io/networkboot/dhcpd

[root@node2 ~]# docker save -o dhcp docker.io/networkboot/dhcpd

[root@node2 ~]# ls -l dhcp 

将存出的镜像从A机器复制到B机器,需要在B机器上使用该镜像,就可以将该导出文件导入到B机器的镜像库中,这一过程叫作载入镜像。

命令格式: docker load --input存出的文件或者docker load <存出的文件

例如,从文件dhcp 中载入镜像到本地镜像库中:

[root@node2 ~]# docker load --input dhcp 

或

[root@node2 ~]# docker load < dhcp

容器的创建与启动

       Docker的创建就是将镜像加载到容器的过程,Docker的容器十分轻量级,用户可以随时创建或者删除。新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器 这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全停止。停止的容器可以重 新启动并保留原来的修改。可以使用 docker create命令新建一个容器。

       命令格式; docker create [选项]镜像运行的程序

       常用选项,-i 表示让容器的输入保持打开;-t 表示让Docker分配一个伪终端。

[root@node2 ~]# docker create -it docker.io/networkboot/dhcpd /bin/bash

使用 docker create 命令创建新容器后会返回一个唯一的ID,可以使用 docker ps命令来查看所有容器的运行状态。添加 -a 选项可以列出系统最近一次启动的容器。

[root@node2 ~]# docker ps -a

       输出信息显示容器的1D号,加载的镜像、运行的程序、创建时间、目前所处的状态、端口映射、容器名称等。其中状态一栏为Created 表示当前的容器是新创建的并处于停止状态。

      启动停止状态的容器可以使用docker start命令。

命令格式: docker start 容器的ID/名称

[root@node2 ~]# docker start 32b3fe67b18e

[root@node2 ~]# docker ps -a | grep 32b3fe67b18e

例如,创建容器并启动执行一条shell命令:

[root@node2 ~]# docker run docker.io/networkboot/dhcpd /bin/bash -c ls

这和在本地直接执行命令几乎沒有区別

[root@node2 ~]# docker ps -a

查看容器的运行状态,可以看出容器在执行完“/usr/bin/bash -c Is”命令之后就停止了。 有时候需要在后台持续地运行这个容器,就需要让 docker容器在守护态形式在后台进行运行。

可以在dockerrun 命令之后添加-d选项来实现,但是需要注意容器所运行的程序不能结束。

        例如,下面的容器会持续在后台进行运行:

[root@node2 ~]# docker run -d docker.io/networkboot/dhcpd /bin/bash -c "while true;do echo ok;done;"

[root@node2 ~]# docker ps  -a

查看容器的运行状态,可以看出容器始终处于“Up”运行状态。

容器的运行与终止

如果需要终止运行的容器,可以使用docker stop命令完成。

命令格式:docker stop容器的ID/名称

       例如,下面的容器会终止运行:

[root@node2 ~]# docker stop 5bb5203e8fc4

[root@node2 ~]# docker ps -a

查看容器的运行状态,可以看出容器处于Exited,终止状态。

容器的进入

需要进入容器进行相应操作时,可以使用 dockerexec命令进入运行着的容器。

 命令格式: docker exec-it容器ID/名称/bin/bash

其中,-i选项表示让容器的输入保持打开;-t选项表示让Docker分配一个伪终端。

       例如,进入正在运行着的容器b23490d618f1:

[root@node2 ~]# docker exec -it b23490d618f1 /bin/bash

root@b23490d618f1:/# ls

root@b23490d618f1:/# exit

容器的导出与导入

       用户可以将任何一个Docker容器从一台机器迁移到另一台机器。在迁移过程中,首先需要将已 经创建好的容器导出为文件,可以使用 docker export命令实现,无论这个容器是处于运行状态还是 停止状态均可导出。导出之后可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。

      命令格式: docker export 容器ID/名称>文件名

      例如,导出b23490d618f1容器到文件centos7dhcp:

[root@node2 ~]# docker export b23490d618f1>centos7dhcp

[root@node2 ~]# ls -l centos7dhcp

 

导出的文件从A机器复制到B机器,之后使用 docker import命令导入,成为镜像。

命令格式: cat 文件名|docker import -生成的镜像名称:标签

        例如,导入文件centos7dhcp成为本地镜像:

[root@node2 ~]# cat centos7dhcp |docker import - centos7:dhcp

[root@node2 ~]# docker images |grep centos7

容器的删除

可以使用dockerrm命令将一个已经终止状态的容器进行删除。

命令格式: dockerrm 容器ID/名称

       例如,删除ID号为b23490d618f1的容器

[root@node2 ~]# docker stop b23490d618f1

[root@node2 ~]# docker rm b23490d618f1
[root@node2 ~]# docker ps -a

如果删除一个正在运行的容器,可以添加 -f 选项强制删除,但是建议先将容器停止再做删除操作。

       Docker默认的存储目录在/var/lib/docker,Docker的镜像。容器,日志等内容全部都存储在此, 可以单独使用大容量的分区来存储这些内容,并且一般选择建立LVM逻辑卷,从而避免Docker运行 过程中存储目录容量不足的问题。

1.4 Docker资源控制(以下内容详见电子书)

1.4.1对CPU的控制

   1.限制CPU使用速率

   2.多任务按比例分享CPU

   3.限制CPU内核使用

1.4.2对内存使用的限制

1.4.3对blkio的限制

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值