阅读148 返回首页    go 技术社区[云栖]


理解并使用Docker

本文并不是科普问,只是对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.txtcat: /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

https://tech.uc.cn/?p=2726
https://my.oschina.net/feedao/blog/223795
https://docs.docker.io/


最后更新:2017-04-03 12:56:38

  上一篇:go 微信之父张小龙:怎样做简单的产品经理?六
  下一篇:go Coursera Scala 2-1:高阶函数