美文网首页
Docker 快速上手

Docker 快速上手

作者: 摸鱼少年 | 来源:发表于2015-11-26 00:56 被阅读0次

    Docker 是一项轻量级的操作系统虚拟化方案,是基于linux的容器(LXC)等技术、所以目前平台只能是linux,常用Ubuntu和CentOS。
    对比于虚拟机常见的10几G、Docker image只有几百M更有优势。那么为什么会出现容积上这么大的差距呢?主要原因还在于docker其实只是宿主机上用户空间的一个进程、这个进程打包了dependencies和application、共用宿主机的kernel;而虚拟机镜像则包含一个guest os、量级一下子就上去了。除此以外、秒级的启动速度和接近原生的运行速度也是Docker大行其道的重要因素。

    Docker中有几个常用的概念需要我们一一理清:daemon、image、container以及registory。

    Daemon

    Docker的运行其实是client-server模式,client发出指令、而server处理繁重的任务。这里处理各种繁重任务的便是Docker daemon、一个运行在后台的守护进程。它会处理包括create image、run container、pull or push image等等。

    而作为使用者,我们的日常则主要是在client端。image是产品dependencies和application的全拷贝,而container则是基于image的一个运行时,registory则是集中存储image的地方。
    那我们就从image开始聊起。

    Image

    image的identity是name:tag。比方说,python:2.7,python:3.5,ubuntu:12.04。在命名的时候,需要注意:name其实决定了这个image所存储的target registory。
    如一个image叫docker.lenghan.com/python:2.7,就是说这个image存在docker.lenghan.com上,为了在registory上进行分组我们还可以使用docker.lenghan.com/mydev/python:2.7,将这个image放到mydev这个group里。而tag则是image commit tree中的标志信息,类似git中的tag概念。
    而对于ubuntu:12.04这种命名,则表示image存在docker的官方registory上,也即hub.docker.com上。

    创建image,都是从一个基础镜像开始的。比如从ubuntu:12.04这个基础镜像出发,run image,进入container,进行一定的修改(如安装python2.7),然后退出。此时,我们可以commit 这个container 并加入一些信息,生成一个新的image,取名python:2.7。这点跟git的commit是类似的。

    $root: docker pull ubuntu:12.04
    
    $root: docker run -it ubuntu:12.04 bash
    
    $root@24f4w12: apt-get install python3
    
    $root@24f4w12: exit
      
    $root: docker ps -a # find pid of the container, 24f4w12
    
    $root: docker commit -m 'install python3' -a 'Leng' 24f4w12 docker.lenghan.com/python:3
    
    $root: docker images
    REPOSITORY       TAG      IMAGE ID      CREATED      VIRTUAL SIZE
    python            3       *********      *****          100MB
    ubuntu          12.04     *********      *****           99MB
    
    

    但是这种方式显然不适合安全和稳妥。更为正确的方式是用Dockerfile的setting文件来创建。

    # comment: content in Dockerfile
    FROM ubuntu:12.04
    MAINTAINER Leng <lenghan1991@gmail.com>
    RUN apt-get install python3
    

    然后通过下面的命令创建image。

    $root: docker build -t 'docker.lenghan.com/python:3' ~/workspace/Dockerfile
    

    上传image到registory docker push <image name:tag>即可

    $root: docker push docker.lenghan.com/python:3
    

    修改image就是创建新image

    删除image

    $root: docker rmi docker.lenghan.com/python:3
    
    # or image ID
    $root: docker rmi 2b2d5f0
    

    Container

    container就是image的运行时。一个image可以运行多个container,且互不冲突。
    创建Container

    $root: docker run -it docker.lenghan.com/python:3 bash
    
    $root@0f32ge4g: python3 # inside the container
    
    

    关于container的使用,主要是各种参数,如:

    -d:   即daemon,后台运行
    -name mycontainer:  命名这个container
    -rm:  �命令执行完就立即删除container。
    --net=host:  映射container的端口到宿主机。
    -p 2300:3200 :映射container的端口3200到宿主机的2300。
    

    停止Container

    $root: docker stop 23fd43h # container ID
    
    $root: docker stop mycontainer # container name
    

    删除Container 要先stop,才能删

    $root: docker stop 23fd43h # container ID
    
    $root: docker rm mycontainer # container name
    
    #tips: 移除所有终止的
    $root: docker rm $(docker ps -a -q)
    

    进入Container

    $root: docker exec -it 98fs23sdf234 # container ID
    
    $root@98fs23sdf234: 
    

    Registory

    就是存储image的repository,类似存储git project的github。

    Compose

    项目级别的docker管理方式,通过docker-compose.yml配置,集中式地管理docker container。

    相关文章

      网友评论

          本文标题:Docker 快速上手

          本文链接:https://www.haomeiwen.com/subject/dbrlhttx.html