Docker入门

Develop, Ship and Run Any Application, Anywhere.
Docker consists of:
The Docker Engine – our lightweight and powerful open source container virtualization technology combined with a work flow for building and containerizing your applications.
Docker Hub – our SaaS service for sharing and managing your application stacks.
Docker hub(app仓库)也是docker的组成,可以在https://hub.docker.com/ 登录并注册一个docker账户,搜索、下载别人分享的docker app,也可以自己上传和保存自己修改/创建的docker app(即docker image托管)。hub repository上提供了APP非常丰富多彩,基本上囊括了常用的一切应用平台。相关资料参见:
Docker1.0发布—迈入云(DockerHub应用分发平台)端(Docker引擎)时代
http://www.openstack.cn/p1961.html
官方文档:
https://docs.docker.com/
另外官方有个在线模拟的tutorial,10分钟就可以了解docker的基本使用。
http://www.docker.com/tryit/
15个有用的docker技巧
http://www.21ops.com/linux/13512.html

1. 安装Docker

CentOS 6.5中使用epel可以直接通过yun安装:

# 启动docker服务

2. docker的命令列表如下

3. pull image

使用root帐号先登录hub,使用之前在docker hub上注册的帐号。如果输出的帐号和邮箱不存在,则会直接为你注册一个hub帐号。

比如我们在docker hub的web上搜索到

https://registry.hub.docker.com/u/williamyeh/docker-scala/tags/manage/

当然也可以使用docker search命令

虽然这个docker app基于Debian版本的,docker会自动构建依赖层,不会影响我们的使用。
经过漫长的pulling过程后,

pull完成后,可以查看images的汇总信息。

通过IMAGE ID信息,可以通过inspect命令得到JSON格式的详细的配置信息。

运行docker
docker run是最核心的命令之一,选项有很多,可以通过docker run –help来查看。
docker run williamyeh/docker-scala
有这样一个报错:unable to remount sys readonly: unable to mount sys as readonly max retries reached
可能是由于selinux的关系,Stack Overflow给出了下面的解决方法:

然后重启docker服务,再次运行即可。

这个app提供了两种方式启动:bash和scala shell
第一种是启动bash,它是以一个伪tty的方式启动的。

然后ton通过docker ps 信息,-l表示最后一次创建的docker(无论是否退出)

根据获得的container id提交一个新的image
docker commit 952a6c45a965 debugo/scala
7036e1f8e9791e4683a6b7b75c752723d01e1183fd10acbc2f40666634875c60
第二种是启动一个scala shell,由于指定了–rm退出则结束这个container。
–rm=false Automatically remove the container when it exits (incompatible with -d)
docker run -i –rm -t debugo/scala
root@65ad94de848a:/# scala
Welcome to Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_60).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import scala.io.Source
import scala.io.Source
scala> for (line <- Source.fromFile(“/tmp/hello”).getLines) print(line) hello,docker 说明新的image里已经包含了我们的修改,下一步我们将这个image上传到hub上,没有修改的dependencies会自动跳过。

^^

Posted in Ops, Tools, Virtualization.