学习Docker(2017-10-5)

本节目录:

  • 镜像的实现原理
    1. 操作 Docker 容器
      • 启动容器
      • 后台(background)运行
      • 终止容器
      • 进入容器
      • 导出和导入容器
      • 删除容器
      • 清理所有处于终止状态的容器

镜像的实现原理

Docker 镜像是怎么实现增量的修改和维护的?每个镜像都由很多层次构成,
Docker 使用 Union FS 将这些不同的层结合到一个镜像中去。

通常 Union FS 有两个用途:

  1. 一方面可以实现不借助 LVM、RAID 将多个 disk 挂到同一个目录下

  2. 另一个更常用的就是将一个只读的分支和一个可写的分支联合在一起,Live CD 正是基于此方法可以允许在镜像不变的基础上允许用户在其上进行一些写操作。Docker 在 AUFS 上构建的容器也是利用了类似的原理。

关于 UFS

操作 Docker 容器

容器是 Docker 又一核心概念

容器对应虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他操作系统)和跑在上面的应用。下面学习容器的创建、启动和停止等

启动容器

  1. 基于镜像创建一个容器并启动
  2. 将在终止状态(stopped)的容器重新启动

实例1:

1
docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world

1
docker run -t -i ubuntu:14.04 /bin/bash

-t 选项让 Docker 分配一个伪终端,并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开,进入交互终端,用户可以通过所创建的终端来输入命令,

当利用 docker run 来创建容器时, Docker 在后台运行的标准操作包括:

  1. 检查本地是否存在指定镜像,不存在就从公有仓库下载 利用镜像创建并启动一个容器
  2. 分配一个文件系统,并在只读的镜像层外面挂载一层 可读写层
  3. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去,从地址池配置一个 ip 地址给容器
  4. 执行用户指定的应用程序
  5. 执行完毕后容器被终止

关于 pwd

实例2:
利用 docker start 命令,直接将一个已经终止的容器启动运行。

容器的核心是为所执行的应用程序,所需要的资源都是应用程序运行所必须的。在终端中利用 pstop 来查看进程信息。

可见,容器中仅运行了指定的 bash 应用。这种特点使得 Docker 对资源利用率极高,体现了 Docker 轻量级虚拟化

top:

后台(background)运行

通常的时候需要让 Docker 在后台运行,而不是直接将执行结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现

实例:

1
docker run ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

容器会把输出的结果打印到宿主机上面

使用 -d参数运行容器

1
docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

使用 -d 参数启动后会返回一个唯一的 id ,也可以通过 docker ps 命令来查看容器信息

要获取容器的输出信息,可以通过 docker logs [container ID or Names]

终止容器

使用 docker stop 命令来终止一个运行中的容器

终止状态的容器可以用 docker ps -a 命令看到。

现在我们可以用我们刚才讲的docker start 重启结束的容器

docker restart 可以结束正在运行的容器,然后重新启动

进入容器

在使用 -d 参数时,容器启动后进入后台。某些时候需要进入容器进行操作:

  1. attach 命令
  2. nsenter 命令

实例1:
attach 命令

当多个窗口同时 attach 到同一个容器的时候,所以窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作。

实例2:
nsenter 命令

书上介绍的都是 Linux 系统下进行的,因为自己电脑上 windows 这一部分,先暂停

导出和导入容器

导出容器
导出本地容器

1
docker ps -a

查询已经停止的容器 ID

1
docker export commitID > xxx.tar


导入容器快照

实例:

1
docker import - test/ubuntu:v1.0

删除容器

docker rm命令删除处于终止状态的容器。 -f 强制删除容器,用在运行的容器中。

清理所有处于终止状态的容器

1
docker rm &(docker ps -a -q)

windows 下进入 git bash 运行上面的命令删除

注意;这个命令其实会尝试删除所有的包括还运行中的容器,不过就像上面提过的 docker rm 默认不会删除运行中的容器。这个命令是在 linux 系统下执行

(*^▽^*)