前言
Docker是用Go语言编写的一个开源的应用容器引擎,本质上是一个操作系统级虚拟化方法,可以认为是轻量级的虚拟机。和虚拟机比起来:
- Docker更快速,启动一般在1秒内,虚拟机要慢好多;
- 节省资源,一台计算机跑个千百个Docker不是事,虚拟机几个就废了,而且还需要专用的cpu和内存资源来跑操作系统。
为什么会这样?因为Docker复用了主机的操作系统,使用了LXC(Linux Container)技术,linux的一种内核虚拟化技术,而VM的Hypervisor技术需要实现对硬件的虚拟化并搭载独立的操作系统,所以就会产生很大的差异。
Docker使用客户端/服务器 (C/S)架构模式,使用远程API来管理和创建Docker容器。Docker容器通过镜像来创建,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后就可以发布到任何Linux系统上。容器是完全使用沙箱机制,相互之间不会有任何接口。
用处
Docker的主要用处是: - 快速迭代。细微的修改可以马上可视化的迭代,是应用的构建更加轻便,开发、测试、部署都超级快。 - 协同工作提高效率,开发、测试、质量管理等各环节人员协同工作,通过容器的标准化服务隔离开发和管理。 - 可以在各种环境下部署,在多平台下方便迁移,另外无论是云端还是桌面,是物理主机还是虚拟主机都可以很快切换,十分方便。
安装
以Ubuntu为例:
Docker需要在64位版本的Ubuntu上安装。另外需要保证Ubuntu内核的最小版本在3.10以上。
你可以输入以下命令查询:
1
root@localhost:~# uname -r
安装命令如下:
1
2root@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
<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
4root@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
停止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