陈斌彬的技术博客

Stay foolish,stay hungry

Ubuntu 使用 Docker(原创)

img

Docker 的特点:

  • 相对于虚拟机来说 Docker 有 Image 管理。
  • 相对于虚拟机来说更强大的迁移能力。
  • 云计算的未来,再也不用受到环境 API 的限制。

Install Docker

Docker的安装十分简单方便,执行命令:

curl -sSL https://get.daocloud.io/docker | sh

这里我推荐使用 Ubuntu Server 操作系统,无论是在 host 上还是虚拟机上。

img

Hello World

这部分的代码来自 Docker UserGuide,但是与 User Guide 不同的是我们会描述更多的执行过程。

case1 运行一个容器

$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'
Hello world

img

  1. 注意 Docker 是需要使用 root 权限的。
  2. Run 作为 Docker 的子命令来控制新建容器并且运行。 Docker 命令虽然比较多,但是命令是分级来执行的,多参照 Help 就会习惯。
  3. ubuntu:14.04 代表镜像的名字,由 Docker Hub 来提供,如果本地没有 pull 那么执行命令的时候会有 Pull 的动作。
  4. /bin/echo 在容器内执行的程序(进程)
  5. ‘Hello world’ 程序执行的参数 Tip:此程序运行完成之后,容器状态为存在,但是为 Stop。

case2-1 进入容器内操作

$ sudo docker run -t -i ubuntu:14.04 /bin/bash
root@af8bae53bdd3:/#

img

与上面的 Case 不同的是这里有一个 -t -i 在这指的是: -i, --interactive=false Keep STDIN open even if not attached -t, --tty=false Allocate a pseudo-TTY 上面来自 help 命令的提示,help 命令提示的是最简短最高效的获取文档信息途径。本次启动的进程是 bash,运行 bash 之后,Container 会在 attach 状态随时操作。Ctrl+c 就会停止运行。这就是 Docker 运行程序的最简单方式。

Tip:此程序运行完成之后,容器状态为存在,但是为 Run。

Tip:次程序关闭之后(detach)容器依然为存在状态,但是为 Stop。

case2-2 查看容器内的文件以及容器本身

在上一个例子中如果容器没有关闭通过如下命令可以看出:

img

Docker 中容器使用了 root 权限,整个容器内也是一个操作系统,且默认工作目录为根。

img

容器中的进程相当简洁,只有正在运行的两个程序没有其他任何进程。 并且 PID 号码是独立存在的,与 Host 主机完全没有关系。 img 整个容器内为一个独立有效的操作系统,设备输出信息与 Host 一致。但由于文件系统问题,还是有一定出入。

Case3 运行一个后台容器,并且查看日志信息

在这个Case中加入了新的选项-d这个选项中可以让Docker后台运行进程,托管到Docker守护进程中。 如果我们查看运行的结果:

img

case4 快速准确的调度容器–给容器起名字

img

上面的命令跟之前Case中的命令对比多了一个 --name 选项( -name 已经过时)给调度容器带来了很多方便,用户可以自己设定容器的名字,当然如果未指定名字系统会自动起一个随机的名字给容器。 那么我们查看 logs 的时候就可以通过命令 sudo docker logs helloubuntu 愉快的查看日志信息了。

Tip:Container name only [a-zA-Z0-9][a-zA-Z0-9_.-] are allowed.

Case5 查看所有正在运行的Container

img

# docker ps -a 这个命令中我们可以看到容器的 ID(hash)使用的 Image 的名字,启动的命令,创建的时间,目前状态,端口映射状态以及名字。 这些信息组成了我们需要管理容器的所有要素,接下来我们就来做这些测试用的 Docker,开始进阶实践。

Tip: docker 运行需要 root 权限,不要忘了。

Case6 容器管理

  • docker stop [ID/Name] 停止一个正在运行的容器。
  • docker start [ID/Name] 运行一个正在停止的容器。
  • docker restart [ID/Name] 重启一个容器。
  • docker rm [ID/Name] 删除一个容器。

以上的命令可以同时操作多个容器。 比如说:docker rm name1 name2 这样两个容器就会被同时删除了。

如果要删除所有容器 docker rm $(docker ps -q -a)