8/26/2014
2:56:00 PM 0

Docker

Docker 是一個開源的軟體容器(software containers), 利用 Linux kernel 中的隔離(isolation)特性, 實現了OS level virtualization
  • 目前常見虛擬化技術類型(Virtualization Types)
    1. PV(paravirtualization), 透過修改OS核心,植入Hypercall,讓原本無法被虛擬化的指令,可以經過 Hyper interface 直接向硬體提出請求
      http://en.wikipedia.org/wiki/Paravirtualization
    2. HVM(hardware virtual machine)
      http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html
    3. Application level virtualization - JVM, CLR
    4. OS level virtualization - docker
  • Hypervisor 有兩種類型
    1. Type 1 (Bare-Metal hypervisor) - 又稱為 Native VM, hypervisor 直接安裝於機器上,直接掌控硬體資源,硬碟無須事先安裝OS,例如 VMware ESXi, 在 Xen 第一個建立 domain 稱之為 Dom0 它可以管理並且針對硬體做設定,還可以建立 DomU
    2. Type 2 (Hosted hypervisor)- 又稱為 Hosted VM,須先安裝 OS 才可使用,例如 VMware Player
  • docker 優點
    1. 輕量級虛擬化:啟動 Container 速度快,Container 重新啟動後,回復原本乾淨的環境
    2. 自動建構:使用 Dockerfile 可自動建構環境
    3. 版本控制
    4. Docker hub
  • docker 安裝 - Ubuntu 14.04, 可參考 http://docs.docker.com/installation/ubuntulinux/
    $ sudo apt-get update
    $ sudo apt-get install docker.io
    $ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
    $ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
    
  • docker 指令
    $ sudo docker pull centos (取得 image)
    $ sudo docker images (安裝的 image 列表)
    $ sudo docker run centos yum install redhat-lsb -y (安裝 redhat-lsb)
    $ sudo docker commit containerID newImgName (commit 成新的 image)
    $ sudo docker run newImgName lsb_release -d (顯示 linux 版本)
    $ sudo docker run ubuntu ifconfig (顯示 ip)
    $ sudo docker run -i -t ubuntu /bin/bash (互動模式)
    $ sudo docker ps (顯示正在 run 的 process)
    $ sudo docker ps -l  <-- last
    $ sudo docker ps -a -s 
    (-a makes sure you see already closed containers,-s gives you the container file size as well)
    $ sudo docker run -p 9999:8080 imgName command
    (port forwarding,前面是實體 linux 的 port,後面為 container 的 port)
    $ sudo docker run -d -p 9999:8080 imgName command (Daemonize)
    $ sudo docker run -d -p 27017:27017 -p 28017:28017 -v /path/to/data/db/:/data/db myhubpath/mongodb
    (mounts the current working directory into the container)
    $ sudo docker kill containerID (kill 正在 run 的 process)
    
  • Dockerfile
    $ sudo docker build –t imgName .
    

0 comments:

Post a Comment