很早之前就听说过Docker,但一直木有实践过。前一阵子参加OSC的源创会时,里面嘉宾讲的东西提到了Docker,感觉Docker是一个很有意义的工具,于是就学习了一下它的基本用法,在此总结一下。
以我的理解,Docker是一种虚拟化容器,这个容器里可以运行各种程序,是一种轻量级的虚拟化技术,使用Golang编写。它与传统的虚拟化技术(KVM和Xen)的区别是,Docker容器是操作系统层面上的虚拟化(内核级),基于LXC技术,直接服用本地操作系统,而传统的虚拟化技术则是从硬件方面进行虚拟化。它的好处是,启动特别快,而且对系统资源的利用率较高,一台机器上可以运行很多Docker容器,而且因为Docker非常轻量,它为快速部署提供了很好的技术支持。并且Docker引入了版本控制的思想,可以更好地持续构建和部署。
下面总结一下Docker的基本用法:
安装
用apt-get或者yum安装都是坑,基本上都不是最新版本的。要安装还是用官方的命令安装:
|
|
不过由于Docker的安装文件存放在Amazon S3上,会间接性抽风,因此最好找个国内的源。
(2015-7 补充:DaoCloud是不错的选择,服务很好)
容器与镜像
Docker容器可以理解为运行在沙盒里的进程。
通俗地讲,镜像(images)相当于一个类,而容器(container)相当于类的一个实例。容器可以不断地被修改,并通过commit化为一个镜像。
基本命令
主要有:
Docker信息
查看Docker版本:docker version
登录至远程库:docker login
镜像操作
列出镜像列表:docker images
删除镜像:docker rmi [id]
搜索镜像:docker search [name]
从远程拉取镜像:docker pull [name]:[tag]
将镜像发布至远程:docker push [name]
容器运行
容器运行用docker run
命令,它有一些详细的参数很有用,比如:
以交互模式启动容器centos:latest : docker run -i - t centos:latest /bin/bash
-i
表示支持输入,-t
表示命令行交互。
以后台模式运行,并进行端口映射: docker run -d -p 8080:8080 sczyh30/tomcat:v1 /start.sh
-d
表示daemon,即以后台方式运行。-p
表示端口映射。
这里用的时候有个比较fucking的地方,如果运行容器的时候相应的命令不阻塞,那么容器会自动结束运行(比如resin)。看来以后运行命令要加个阻塞的命令咯~
另外对于在容器里自动执行apt-get命令时,一定要加上-y,否则容器虽然进入交互模式但却无法响应,运行完即退出。
容器管理
查看正在运行的容器:docker ps
查看所有容器:docker ps -a
删除容器:docker rm [name/id]
删除所有容器:docker rm 'docker ps -a -q'
停止、启动、杀死一个容器:
从容器中读取日志:docker logs [Name/ID]
列出更改项:docker diff [Name/ID]
从容器中拷贝文件至本机:docker cp ID:/container_path to_path
附加到一个运行的容器上:docker attach [ID]
容器的简单构建
通过命令操作来部署容器显然很麻烦,所以通过Dockerfile进行自动化容器构建是非常方便的。
这里我自己写了一个简单的Dockerfile来练练手,这是一个用于构建Hexo博客的Dockerfile:
然后在此目录执行构建:
.表示在当前目录构建
docker build的一些参数:
执行后就会按照Dockerfile的内容进行构建,过几分钟构建成功,用docker run运行一下:
运行成功~在docker ps里可以看到容器已成功运行:
在浏览器中打开,一个简单的Hexo已经搭好咯~
总结一下,Dockerfile非常方便,以后用它构建容器进行集群部署貌似是不错的选择呢~
后面将进行更多的关于Docker的实践。