Docker 的特点:
- 相对于虚拟机来说 Docker 有 Image 管理。
- 相对于虚拟机来说更强大的迁移能力。
- 云计算的未来,再也不用受到环境 API 的限制。
Install Docker
Docker的安装十分简单方便,执行命令:
curl -sSL https://get.daocloud.io/docker | sh
这里我推荐使用 Ubuntu Server 操作系统,无论是在 host 上还是虚拟机上。
Hello World
这部分的代码来自 Docker UserGuide,但是与 User Guide 不同的是我们会描述更多的执行过程。
case1 运行一个容器
$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'
Hello world
- 注意 Docker 是需要使用 root 权限的。
- Run 作为 Docker 的子命令来控制新建容器并且运行。 Docker 命令虽然比较多,但是命令是分级来执行的,多参照 Help 就会习惯。
- ubuntu:14.04 代表镜像的名字,由 Docker Hub 来提供,如果本地没有 pull 那么执行命令的时候会有 Pull 的动作。
- /bin/echo 在容器内执行的程序(进程)
- ‘Hello world’ 程序执行的参数 Tip:此程序运行完成之后,容器状态为存在,但是为 Stop。
case2-1 进入容器内操作
$ sudo docker run -t -i ubuntu:14.04 /bin/bash
root@af8bae53bdd3:/#
与上面的 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 查看容器内的文件以及容器本身
在上一个例子中如果容器没有关闭通过如下命令可以看出:
Docker 中容器使用了 root 权限,整个容器内也是一个操作系统,且默认工作目录为根。
容器中的进程相当简洁,只有正在运行的两个程序没有其他任何进程。 并且 PID 号码是独立存在的,与 Host 主机完全没有关系。 整个容器内为一个独立有效的操作系统,设备输出信息与 Host 一致。但由于文件系统问题,还是有一定出入。
Case3 运行一个后台容器,并且查看日志信息
在这个Case中加入了新的选项-d这个选项中可以让Docker后台运行进程,托管到Docker守护进程中。 如果我们查看运行的结果:
case4 快速准确的调度容器–给容器起名字
上面的命令跟之前Case中的命令对比多了一个 --name
选项( -name
已经过时)给调度容器带来了很多方便,用户可以自己设定容器的名字,当然如果未指定名字系统会自动起一个随机的名字给容器。 那么我们查看 logs
的时候就可以通过命令 sudo docker logs helloubuntu
愉快的查看日志信息了。
Tip:Container name only [a-zA-Z0-9][a-zA-Z0-9_.-]
are allowed.
Case5 查看所有正在运行的Container
在 # 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)