docker

前言

Docker是用Go语言编写的一个开源的应用容器引擎,本质上是一个操作系统级虚拟化方法,可以认为是轻量级的虚拟机。和虚拟机比起来:

  • Docker更快速,启动一般在1秒内,虚拟机要慢好多;
  • 节省资源,一台计算机跑个千百个Docker不是事,虚拟机几个就废了,而且还需要专用的cpu和内存资源来跑操作系统。

为什么会这样?因为Docker复用了主机的操作系统,使用了LXC(Linux Container)技术,linux的一种内核虚拟化技术,而VM的Hypervisor技术需要实现对硬件的虚拟化并搭载独立的操作系统,所以就会产生很大的差异。

Docker使用客户端/服务器 (C/S)架构模式,使用远程API来管理和创建Docker容器。Docker容器通过镜像来创建,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后就可以发布到任何Linux系统上。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker

用处

Docker的主要用处是: - 快速迭代。细微的修改可以马上可视化的迭代,是应用的构建更加轻便,开发、测试、部署都超级快。 - 协同工作提高效率,开发、测试、质量管理等各环节人员协同工作,通过容器的标准化服务隔离开发和管理。 - 可以在各种环境下部署,在多平台下方便迁移,另外无论是云端还是桌面,是物理主机还是虚拟主机都可以很快切换,十分方便。

安装

以Ubuntu为例:

Docker需要在64位版本的Ubuntu上安装。另外需要保证Ubuntu内核的最小版本在3.10以上。 你可以输入以下命令查询:

1
root@localhost:~# uname -r

安装命令如下:

1
2
root@localhost:~# sudo apt-get update
root@localhost:~# sudo apt-get install docker.io

验证安装是否成功:

1
root@localhost:~# sudo docker version

在docker中运行应用

使用Docker在容器中运行应用程序,使用的命令是“docker run”,我们试个“Hello word”:

1
root@localhost:~# sudo docker run ubuntu:14.04 /bin/echo 'Hello world'

这个时候容器里什么都没有,而我们的命令是说要让“hello world” 运行在一个ubuntu:14.0系统中,所以系统会先Pull一个ubuntu:14.0的docker镜像到本地,然后会运行结果:

1
Hello world

docker常用命令

docker的命令格式比较简单,可以实现客户端的操作。

1
2
3
# 格式:  [sudo] docker [flags] [command] [arguments] ..
# 示例:
$ docker run -i -t ubuntu /bin/bash

  • 查看正在运行的容器情况

    1
    root@localhost:~# sudo docker ps
  • 显示容器的标准输出

    1
    root@localhost:~# sudo docker logs
  • 停止正在运行的容器

    1
    root@localhost:~# sudo docker stop
  • 运行一个Python的WEB程序,命令如下:

    1
    root@localhost:~# sudo docker run -d -P training/webapp python app.py

    其中-d表示后台运行,-P表示网络端口映射从主机映射到我们的docker容器中,然后training/web是我们指定的镜像,python是我们指定的容器,app.py是我们运行在这个容器中的程序。

  • 查看Web程序的运行情况:

    1
    root@localhost:~# sudo docker ps -a ##所有容器的运行情况。

你会发现,比起最早运行“hello world”的时候,你会发现这次列表中的ports有了对应的内容,是一个端口,类似这样:

1
0.0.0.0:32768->5000/tcp
这说明docker将5000(python的默认端口)这个端口映射到了你电脑上的32768端口。这样的话你打开你的浏览器输入:

<img src=”docker/docker-ip.png” width=500 alt =”docker hello world “align=center />

-l参数的话,是查询最后一个启动的容器。你可以记住容器的名称,方便以后使用,我们这里它的名字叫“boring_ritchie”。

  • 查询映射端口情况:

    1
    root@localhost:~# sudo docker port boring_ritchie 5000

    结果会直接返回32768。这样比使用ps方便。

  • 查看WEB应用程序日志:

    1
    2
    3
    4
    root@localhost:~# sudo docker logs -f boring_ritchie
    * Running on http://0.0.0.0:5000/(Press CTRL+C to quit)
    192.168.1.* - - [24/Oct/2016 17:16:31] "GET / HTTP/1.1" 200 -
    192.168.1.* - - [24/Oct/2016 17:16:31] "GET /favicon.ico HTTP/1.1" 404 -
  • 检查WEB应用程序:

    1
    root@localhost:~# sudo docker inspect boring_ritchie

    docker inspect

  • 停止WEB应用容器:

    1
    root@localhost:~# sudo docker stop boring_ritchie

    可以使用“sudo docker ps -l”来检查。

  • 重启WEB应用容器:

    1
    root@localhost:~# sudo docker start boring_ritchie

    也可以使用“sudo docker restart”启动最后一个容器。

  • 移除WEB应用容器:

    1
    root@localhost:~# sudo docker rm boring_ritchie