Docker 入门

Docker是什么

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

上面是官方的解释,用通俗一点的话来形容就是用下面这样的一个集装箱(container)把运行的程序装进去,放到任何 Linux 机器上都可以。
[

](https://ruby-china-files.b0.upaiyun.com/photo/2015/1d1dc201701c3716d80b3016f8ae546f.png)

docker 和 virtual machine不一样的地方

docker 更加轻量,需要更少的资源。
但是vm的隔离更加好。

优点

docker 的架构

Docker的几个重要概念

安装

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起步

如果搞明白 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

我们上一个 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 在中国

下载 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/