本文并不是科普问,只是对Docker的一些个人理解,使用。
为什么使用Docker呢?一般程序员在搭建开发环境问题时,通常会遇到如下问题:
- 软件安装麻烦,系统环境不同,软件安装通过运维人员操作容易出现问题,因为不提供ssh权限,导致调试不便。
- 隔离性差,例如不同的开发人员如果在同一台主机环境下共享开发,虽然是用户隔离,但端口如果不规范可能会冲突;同一个Mysql如果权限管理不好很有可能误删别人的数据
- 可移植性差,例如和生产环境不一致,开发人员之间也无法共享;更严重的情况是当有新人入职时,通常需要又折腾一遍开发环境,无法快速搭建
Docker利用Linux的LXC和AUFS,为我们的应用程序提供轻量级的虚拟环境。性能有待考证,不知国内是否有公司运用在生产环境。
Docker有两个重要概念:image,container
image
可以理解为基本的操作系统镜像,为只读的,共享的,支撑container的层。
container
基于image的,可写的层。所有基于image运行的命令,都会产生一个container,运行完,container就会停止。
做个试验:
基于centos6-ssh这个image,创建一个包含hello word的文件/root/hello.txt:
[root@localhost ~]# docker run centos6-ssh echo "hello world" > /root/hello.txt
再试图读取一下该文件:
[root@localhost ~]# docker run centos6-ssh cat /root/hello.txt
cat: /root/hello.txt: No such file or directory
无法读取,没有这个文件。因为其实是运行了2个
container,文件是在第一个container中创建的。我们来看一下刚才自动创建的container:
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2f55c998fa75 centos6-ssh:latest cat /root/hello.txt 2 minutes ago Exit 1 focused_ritchie
6822bdf4eae8 centos6-ssh:latest echo hello world 3 minutes ago Exit 0 sharp_poincare
那我们要如何从新访问刚才那个container中的hello.txt文件呢?正确的使用方式,应该是将container后台运行(-d参数),通过开启ssh服务,保持container up状态。通过ssh连接到container,创建或或者访问文件。
基本命令
查看已经下载、或者自己构建的image
[root@localhost centos6-image]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos6-base latest 4cd606247337 42 minutes ago 311.2 MB
开启一个bash,交互性的,伪tty。exit退出
[root@localhost centos6-image]# docker run -i -t centos6-base /bin/bash
bash-4.1# ls
bin dev home lib64 mnt proc sbin srv tmp var
boot etc lib media opt root selinux sys usr
创建包含ssh服务的image,开启ssh服务;ssh端口暴露出来.最为后台运行,不会退出。
docker build -t centos6-ssh https://git.oschina.net/feedao/Docker_shell/raw/start/Dockerfile
docker run -d -p 127.0.0.1:33301:22 centos6-ssh
之后就可以ssh我们创建的container,正常使用linux系统一样使用container.
Reference
http://tech.uc.cn/?p=2726
http://my.oschina.net/feedao/blog/223795
http://docs.docker.io/