Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
上面是官方的解释,用通俗一点的话来形容就是用下面这样的一个集装箱 (container) 把运行的程序装进去,放到任何 Linux 机器上都可以。
docker 更加轻量,需要更少的资源。 但是 vm 的隔离更加好。
ubuntu14.04 默认的源有 docker,但是版本太老了,我们演示下通过 Docker 源安装最新版本: 首先确认你的 APT 系统能够处理 https 的 URLs:如果你的主机不存在 /usr/lib/apt/methods/https 这个文件,先安装 apt-transport-https 包:
[ -e /usr/lib/apt/methods/https ] || {
apt-get update
apt-get install apt-transport-https
}
然后添加 Docker 镜像的 key 到你的本地 local keychain。
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
添加 Docker 镜像到 apt 软件源,更新和安装 lxc-docker 包。
$ sudo sh -c "echo deb https://get.docker.com/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker
然后使用下面的命令查看是否安装成功。
$ docker version
如果搞明白 Docker 的基本概念,使用起来非常简单。下面我们开始创建我们的第一个容器:
$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'
如果是第一次使用的话,应该会出现如下类似的输出:
Unable to find image 'ubuntu:14.04' locally
511136ea3c5a: Pull complete
511136ea3c5a: Download complete
f3c84ac3a053: Download complete
a1a958a24818: Download complete
9fec74352904: Download complete
d0955f21bf24: Download complete
Status: Downloaded newer image for ubuntu:14.04
Hello world
来解释一下这个其中的过程,docker run 的作用是创建一个容器。如果不熟悉一个命令的作用可以使用 --help 参数。
$ docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
ubuntu:14.04 是我们的镜像,docker 会先去本地查找是否有 docker 镜像,如果没有会去 docker 仓库下载。
Unable to find image 'ubuntu:14.04' locally # 本地没有找到
Status: Downloaded newer image for ubuntu:14.04 # 成功下载 可以使用docker images 来查看本地已经有的
/bin/echo 'Hello world'
是我们想在容器运行的命令。如果我们看到终端输出 Hello world.
我们上一个 docker 容器运行 echo 命令后就停掉了,这一般都不用于现实生活中。我们创建一个容器让它以守护进程的模式运行。
我们可以这样运行docker run
命令:
$ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
3f5f9f691bcc8fc509e5844ca4e9ad1fcbdd59279505b24d74722da9f7dce547
我们运行 docker 但是我们指定了一个-d
标识。-d
标识告诉 docker 运行容器在后台模式运行。所以返回了这个 container 的 id。
我们也指定了一个相同的镜像:ubuntu:14.04
我们指定命令行运行:
/bin/sh -c "while true; do echo hello world; sleep 1; done"
这是一个输出的 hello word 进程:一个脚本会一直输出"hello word"
docker ps
命令可以查询 docker 进程的所有容器。
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f5f9f691bcc ubuntu:14.04 "/bin/sh -c 'while t About a minute ago Up About a minute nostalgic_perlman
现在我们知道它运行。我们需要在我们容器内使用docker logs
命令来查看产生的 log。
$ sudo docker logs insane_babbage
hello world
hello world
hello world
. . .
这样不断的出现 hello world,我们可以推断出刚才那个那个容器一直在运行。
下载 docker 镜像的时候可能比较慢,可以考虑使用 daocloud 来加速。
docker 的镜像 (image) 就像一个一个的集装箱,容器 (container) 基于镜像运行的进程,
http://stackoverflow.com/questions/16047306/how-is-docker-io-different-from-a-normal-virtual-machine https://docs.docker.com/
原文链接:http://blog.bringstudio.com/dockerru-men/
这周末参加 ruby 分享会,分享 docker 相关的,不知道大家有啥建议吗?