docker入门教程?新手如何学docker以及docker的一些相关实例和实战操作

264 阅读4分钟

转自:https://zhuanlan.zhihu.com/p/22259092

初学者应该如何理解docker?初学时,我对docker的感受是这样的:docker就像是虚拟机技术的升级版,虽然之后来看,这个看法有失偏颇,但仍然可以作为一个初学者理解的好切入点。当然从官方的角度来说,docker是一种“容器”,但是和初学者解释容器的概念,显然比较突兀。

让我们来看看docker有哪些和虚拟机类似的概念:

  1. docker可以启动一个centos或ubuntu或某个linux发行版的镜像,并提供一个bash入口,区别是docker启动的速度更快
  2. docker可以启动一个nginx或mysql或web类应用的镜像,此镜像中包含有操作系统(比如ubuntu11.04精确至版本号),依赖lib版本(比如gcc等),以及使用的app如何安装,简单来说,就是得到一个“纯净”的,只有你需要的app的镜像,同样的,docker启动的速度还是一如既往的比虚拟化技术快
  3. docker做到了文件系统,内存,cpu等硬件资源看起来和宿主系统的隔离

从这几点来说,似乎虚拟机可以做到的docker都可以做到,而且docker速度更快,镜像占用空间更少,这些特性在带来好奇的同时也给了很多初学者疑问---docker是如何做到的

1 如何安装Docker,避免因为防火墙打击学习积极性

  • 首先,从官方的 docker.com/products/do… 下载安装,当然也可以选择:brew安装docker 或是下载源码包自行编译,不过对于一个初学者来说,一种简单的安装模式,比较不容易打击积极性。 tips:下载安装docker时,如果因为众所周知的原因导致速度够慢,可以使用迅雷离线下载。
  • 第二步,就是验证安装的成果了,在terminal中使用命令:
    docker run -ti ubuntu:latest /bin/bash
    docker run 是docker运行镜像的起头
    
    -ti 表示运行在交互模式,一般这个模式就是可以起动bash,然后和容器有命令行的交互
    ubuntu:lastest 中的ubuntu表示镜像名字,镜像由docker官方或个人提供
    /bin/bash 表示在docker容器中执行的命令
    
    当然对于大部分墙内的玩家可能一时半会会得不到结果,卡在网络获取镜像上,这里可以使用国内一些云服务公司的代理镜像,我个人采用了daocloud 的镜像,该镜像配置需要先注册一个daocloud的账号,链接:加速器 DaoCloud ,注意,配置了加速器没有办法通过日志等方式来验证,只能通过看镜像下载速度是否有显著提升来确定,作为参考,我这里的下载速度大约提升到1MB- 3MB每秒。
  • 接下来可以巡视一下ubuntu的文件结构,首先默认用户为root,文件系统和mac系统截然不同,基本上是一个非常纯净的ubuntu系统。
  • 接下来在容器中做出一些修改,比如跑一个命令,安装python:
    apt-get update
    apt-get install python
    
    就这样,完成了python在docker启动的ubuntu容器内的安装。

2 进一步来学习一些docker启动的一些容器特性

  • 接下来,实验一些docker的特性,先退出刚启动的ubuntu bash,再回到mac的terminal,运行命令:
    docker images
    
    此时,会显示出刚刚创建的容器列表:
    Macintoshsong-2:~ song$ docker images
    REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
    ubuntu                 latest              bd3d4369aebc        9 days ago          126.6 MB
    
    非常吃惊的是size无比小,大小才126.6MB,至于为何如此小,这是docker的核心竞争力之一,之后会仔细深入探讨。
  • 如何再次进入刚才的容器,如果使用刚才的命令,docker会报错,是因为该镜像在本地已经创建,所以接下来要进入该镜像需要使用以下命令:
    docker run -ti bd3d4369aebc /bin/bash
    
    其中bd3d4369aebc为image的id,在上面一条命令中得到
    
  • 在再次进入bash后,执行命令python,会发现python木有了,刚才安装的python再次丢了,所以在镜像内执行的全部操作,在退出或杀死镜像后,不会直接在镜像中保存。为了保存容器中更改内容,可以采用
    Macintoshsong-2:myworks song$ docker ps
    CONTAINER ID        IMAGE                      COMMAND                 CREATED             STATUS              PORTS               NAMES
    254c67dc4bbe        bd3d4369aebc               "/bin/bash"             9 minutes ago       Up 9 minutes                            nostalgic_poincare
    
    获取到container id(注意,container id和image id是不同的)
    接着使用命令:
    
    Macintoshsong-2:myworks song$  docker commit -m "Added json gem" -a "Kate Smith" 254c67dc4bbe example/new_ubuntu:v2
    获取一个新的docker镜像,在该镜像中,会有一个默认安装好的python(或任何你在原有ubuntu镜像中所作出的修改)
    
  • how to learn more :

3 本篇总结

  • 初学者如何理解docker,我建议先不要急着了解原理或容器概念,对于用户来说,先看如何使用,一些好的特性,可以先记录,再做原理探讨
  • 初学者如何安装docker,以及如何启动一个交互式的ubuntu docker容器
  • docker的特性,如image比传统虚拟化技术小,以及如何保存一个更改后的image(保存在本地)
  • 容器内的更改如何保存,如何创建自己的容器并递交到公有的docker hub

相关学习资料移步: