【虚拟化与云计算】走进Docker

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ARPOSPF/article/details/82320931

泊坞窗简介

什么是多克?

  • 泊坞窗是一个容器引擎,提供了一套完整的容器解决方案。
  • 多克是2014年最火热的开源项目,由多克公司(www.docker.com)领导开发,基于Apache2.0的开源授权协议发行。
  • 泊坞窗是用围棋语言开发的,其源码在https://github.com/docker/docker。
  • 码头工人的官方文档在https://docs.docker.com。

什么是容器?

  • 容器是一种历史悠久的虚拟化技术,如OpenVZ是的Solaris上的区域,LINUX上的LXC等,都是容器的不同实现方式。
  • 一个容器实质上就是运行在宿主机上的一个进程。只不过在启动这个进程之前,进行了一些特殊处理,让这个进程进入了一个全新的虚拟环境,与宿主机环境分开,所以这个进程以及它的子进程认为自己运行在一个独立的世界里面。

容器的优势

  • 相比于传统的KVM,ZEN等虚拟化及半虚拟化技术来说:
  • 创建容器速度快,速度在1秒左右,而传统虚拟机需要15秒以上。
  • 删除容器速度快,速度也在几秒左右。
  • 容器在运行期间占用的额外开销非常小。在一个宿主机上,能运行的容器数量更多。

正因为容器的这些轻,快的特点,所以容器技术右叫做“轻量虚拟化”技术,在很多场合下,容器技术比传统虚拟化技术更有优势。

泊坞窗之前的各种容器技术,最大问题是使用起来不方便,只有少数技术高手才能熟练应用。而泊坞窗的最大优势就是让容器的管理变得极其方便,不需要掌握高深的技术就能使用。

什么是多克镜像?

每个泊坞容器运行在独立的虚拟环境中,虚拟环境包括多个方面,其中最重要的就是独立的文件系统;在这个文件系统的读写操作,即不影响宿主机的文件系统,也不影响其他容器的文件系统。

Docker镜像是一个比较复杂的概念,现阶段,我们可以简单地把Docker镜像理解成一个目录。Docker Server在启动容器的时候,先根据这个镜像目录,复制出一个新的目录,然后在容器进程启动时,让这个进程chroot到这个新的目录下。这样,这个目录就成了这个容器的根文件系统(rootfs)。

Tips: 在宿主机中使用chroot aufs/mnt/容器编号 可以进入容器的文件系统

查看镜像:

通过docker images指令来查看本地有哪些镜像

  1. 镜像ID:每个镜像有一个唯一的ID,长度为64个字符。通常只使用前12个字符就可以了
  2. 镜像TAG:每个镜像上可以打上一个或多个TAG
  3. 镜像Repository:每个镜像存储在一个仓库中
  4. Repositoty:TAG  唯一标识了一个镜像

Docker Registry:

  • 镜像和镜像仓库存储在Registry中
  • 本地Registry:通过docker images查看的就是本地Redistry
  • 官方Registry:Docker官方维护了一个Registry,里面存储了各种各样的镜像。

从官方Registry拉取镜像:

Docker刚安装完,本地Registry是空的。因此我们需要从Docker官方Registry来拉取镜像。docker pull命令用于从官方Registry拉取镜像。

如果从Docker官方Registry拉取镜像的速度很慢,可以尝试daocloud提供的加速器服务。https://dashboard.daocloud.io/mirror有详细使用方法介绍。

运行容器:

docker run命令用于运行容器。

docker run是最常用也是最复杂的命令,通过docker help run我们可以看到该命令有很多选项,其中最常用的选项包括:

  • -i -t      这两个选项经常一起使用,可以缩写为-it,用于创建交互式容器。
  • -d        让容器运行在后台,用于创建守护式容器。
  • --name 为容器指定一个名称

容器运行成功后,会返回一个64字符的容器ID,作为容器的唯一标识。类似于镜像ID,容器ID也可以采用简写形式。

运行交互式容器:

通过如下命令来运行一个交互式容器:

sudo docker run -it centos:6 /bin/bash

  • -it                  指定要创建交互容器
  • centos:6       以仓库:TAG的形式指定了镜像名称
  • /bin/bash      容器对应的进程,会启动一个新的shell

通过如上的命令,我们启动了新的shell,并运行在容器环境中。由于是一个交互式容器,所有我们会离开当前的shell,被这个新的shell带入到容器的虚拟世界中,此后我们在这个shell里面执行的任何命令,都是相对于这个虚拟世界的。

当我们在新的shell里面执行exit,就结束了这个bash进程,从而也结束了这个容器,我们从虚拟世界又返回到宿主机的现实世界。

交互式容器适合一些临时性的任务,当退出bash的时候,交互式容器的生命也就结束了。大多数场合下,我们需要的是守护式容器。

通过如下方式运行守护式容器:

 sudo  docker run -d redis

  • -d          创建守护式容器
  • redis     镜像名称     这里只有仓库名称,没有指定TAG,那么就使用默认TAG‘latest’

没有指定命令,那么会使用镜像所提供的默认命令。redis镜像的默认命令是/entrypoint.sh redis-server

守护式容器运行在后台,这样我们就可以继续留在当前shell中进行其他操作。

通过docker ps命令可以查看容器的基本信息,包括容器ID、命令、状态等;

sudo  docker ps          查看运行中的容器

Tips : 在上述命令后加上-a ,可以查看所有运行过的容器,包括已经退出的。

docker ps命令只能查看容器的基本信息;

docker inspect命令则可以查看容器的详细信息。

sudo  docker inspect [ID]

docker inspect返回的信息是JSON格式的,非常丰富。有时候我们需要获取这些信息来进行二次开发。

docker inspect -f   则可以指定查看某种信息,例如查看容器的IP地址:

sudo docker inspect -f '{{.NetworkSettings.IPAddress}}' [ID]

docker stop命令用来停止一个正在运行的守护式容器

sudo  docker stop [ID]

docker rm命令用来删除容器:

sudo  docker rm [ID]

Tips:容器停止后,并不会被自动删除

删除完之后再运行docker ps -a,会发现容器已经消失了

安装Docker:

目前Docker已可以安装到绝大多数Linux发行版上,包括Ubuntu、CentOS、Redhat等,也可以安装到苹果Mac OS上。

需要注意的是,目前Docker只支持64位操作系统

  • 通过uname -i,如果是x86_64则为64位操作系统
  • 确认Linux内核版本>=3.10,通过uname -r可以查看到内核版本信息。

在Ubuntu系统上通过apt-get命令来安装软件

Ubuntu官方软件仓库提供了Docker的稳定版,通过如下步骤进行安装:

  1. sudo  apt-get update
  2. sudo apt-get install docker.io
  3. 运行 ps axf|grep docker来验证
  4. 运行sudo  docker version查看docker版本

可以从Docker的私有软件仓库来安装最新版,安装步骤如下:

在Ubuntu上,按如下方式来启动和运行Docker server:

Docker架构

泊坞窗是一个经典的CS架构:

  • Docker Server:它是一个守护进程(守护进程),一直运行在后台。它其中内嵌了一个Web服务器。
  • Docker Client:它是一个命令行工具,通过HTTP协议与Docker Server交互
  • 巧妙的是,Docker Server与Docker Client共用同一个可执行文件。通过哪个docker这个命令就可以找到它安装后的路径。

泊坞窗应用实验

实验描述:

  1. 先创建一个守护式容器A运行Redis Server
  2. 再创建一个交互式容器B中,在里面安装Redis的客户端
  3. 最后使用Redis客户端去访问Redis Server

本实验模拟了需要两个机器,分别运行客户端和服务端程序的场景

实验步骤:

  1. 拉取Redis的镜像
  2. 创建守护式容器A,运行Redis Server
  3. 获取一个IP的地址
  4. 创建交互式容器乙
  5. 在乙里面安装Redis的客户端
  6. 从乙中访问容器甲的Redis的数据库。

回顾:

什么是多克?

什么是容器?

如何安装泊坞窗?

泊坞窗镜像和镜像仓库。

泊坞窗容器的创建,删除,停止,查看等基本命令。

猜你喜欢

转载自blog.csdn.net/ARPOSPF/article/details/82320931