學習 Docker - 入門


Docker簡介

一種虛擬容器技術。

  • 一種虛擬化分方案;
  • 操做系統級別的虛擬化;
  • 只能運行相同或類似內核的操做系統;
  • 依賴與linux內核特性:Namespace和Cgroups(Control Group)

虛擬機技術和容器技術最大的區別就是對資源的佔用。linux

Docker目標

  • 提供簡單輕量的建模方式
  • 職責的邏輯分離
  • 快速高效的開發生命週期
  • 鼓勵使用面向服務的架構

Docker使用場景

  • 使用Docker容器開發、測試、部署服務
  • 建立隔離的運行環境
  • 搭建測試環境
  • 構建多用戶的平臺即服務(PaaS)基礎設施
  • 提供軟件即服務(SaaS)應用程序
  • 高性能、超大規模的宿主機部署

Docker的基本組成

  • Docker Client 客戶端
  • Docker Daemon 守護進程
  • Docker Image 鏡像
  • Docker Container 容器
  • Docker Registry 倉庫

Docker Client 客戶端

  • C/S架構
  • 本地/遠程調用

Docker客戶端向服務器端發出請求,也就是守護進程。守護進程處理完全部工做將結果返回給客戶端。Docker客戶端對服務器端的訪問既能夠在本地也能夠在遠程。git

客戶端訪問守護進程

Docker Image 鏡像

  • 容器的基石
  • 層疊的只讀文件系統

Docker鏡像是容器的基石,保存了啓動容器的條件,容器基於鏡像啓動和運行。 Docker鏡像是一個層疊的只讀文件系統,他的最底端是一個引導文件系統及bootfs。 Docker用戶幾乎永遠都不會和引導文件系統有交互,實際上當一個容器啓動後,bootfs會被移到內存中,引導文件將被卸載。github

Docker鏡像的第二層是rootfs(root文件系統),位於引導文件系統之上,能夠有多種操做系統。 在傳統的linux系統中root文件系統最早會以只讀的方式加載,當引導和啓動完成後他纔會被切換成讀寫模式。 可是在Docker裏,root文件系統永遠只能是隻讀,而且Docker會用聯合加載系統在rootfs之上加載更多的只讀文件系統。 聯合加載只得是一次加載多個文件系統。可是在外面開來只有一個文件系統。聯合加載會將各層文件系統加載到一塊兒, 這樣最終的文件系統會包含全部的文件及目錄。Docker將這樣的文件系統稱爲鏡像。 一個鏡像能夠放到另外一個鏡像頂部,位於下面的鏡像稱爲父鏡像。以此類推,直到鏡像棧的最底部。最底部的鏡像稱爲基礎鏡像。 也就是bootfs文件系統。docker

Docker Container 容器

  • 容器經過鏡像來啓動
  • 啓動和執行階段
  • 寫時複製(copy on write)

learn_docker_img_006

一個容器中能夠運行用戶的一個或多個進程。當一個容器啓動時,Docker會在鏡像的最頂層增長一個讀寫文件系統,咱們在Docker中運行的程序就是在這個層運行並執行的。第一次啓動Docker時,讀寫層是空的,當文件發生變化後都會應用到這一層。好比修改一個文件,先將該文件從只讀層複製到讀寫層,而後隱藏只讀層,這就是Docker的寫時複製。shell

當建立一個容器時,Docker會建立一個鏡像棧,在棧的最頂層增長讀寫層,這個讀寫層和下面的鏡像層以及一些配置數據就構成了一個容器。 容器的這個特色及鏡像分層,可讓咱們快速的構建鏡像,並運行包含咱們本身的應用程序和服務的容器。編程

Docker Registry 倉庫

  • 共有
    • Docker Hub
  • 私有

Docker用倉庫來保存用戶構建的鏡像。ubuntu

learn_docker_img_002

從上圖能夠看出,Docker客戶端調用守護進程從而操做Docker的容器,而容器是經過鏡像來建立的,而鏡像又保存在倉庫中。bash


Docker容器的相關技術

Docker依賴的Linux內核特性

  • Namespaces 命名空間
  • Control groups(cgroups)控制組

Namespaces 命名空間

  • PID(Process ID) 進程隔離
  • NET(Network) 管理網絡接口
  • IPC(Inter Process Communication) 管理跨進程通訊的訪問
  • MNT(Mount) 管理掛載點
  • UTS(Unix Timeshring System) 隔離內核和版本標識

編程語言中命名空間實現封裝,即代碼隔離。 操做系統中命名空間實現系統資源的隔離,進程、網絡、文件系統...服務器

各類隔離的資源時如何管理起來的,這就用到了Cgroups。網絡

Control groups(cgroups)控制組

  • 資源限制
  • 優先級設定
  • 資源計量
  • 資源控制

Docker容器的能力

  • 文件系統隔離:每一個容器都有本身的root文件系統
  • 進程隔離:每一個容器都運行在本身的進程環境中
  • 網絡隔離:容器間的虛擬網絡接口和IP地址都是分開的
  • 資源隔離和分組:使用Cgroups將CPU和內存等資源獨立分配給每一個Docker容器

在 Ubuntu 中安裝 Docker

安裝前的檢查

  • 內核版本

    $ uname -a
  • 檢查Device Mapper

    $ ls -l /sys/class/misc/device-mapper

Ubuntu中安裝Docker的方式

  • 安裝Ubuntu維護的版本

    $ sudo apt-get install -y docker.io
      $ source /etc/bash_completion.d/docker.io
  • 安裝Docker維護的版本

    1. 檢查APT對HTTPS的支持,查看/usr/lib/apt/methods/https文件是否存在。若是不存在,運行安裝命令。

      $ apt-get update
        $ apt-get install -y apt-transport-https
    2. 添加Docker的APT倉庫

      $ echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list
    3. 添加倉庫的key

      $ apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
    4. 安裝

      $ apt-get update
        $ apt-get install -y lxc-docker
  • 安裝Docker維護的版本(簡易步驟,使用Docker提供的sh腳本)

    $ sudo apt-get install -y curl
      $ curl -sSL https://get.docker.io/ubuntu/ | sudo sh

    啓動docker若出現下面錯誤:

    FATA[0000] Error loading docker apparmor profile: fork/exec /sbin/apparmor_parser: no such file or directory ()

    請安裝apparmor軟件便可

    $ sudo apt-get install apparmor

使用非root用戶運行Docker

通常安裝完Docker運行時須要加sudo來操做,其實能夠增長用戶歸屬的用戶組來實現不用root權限運行Docker。

  1. 添加名字爲docker的用戶組

    $ sudo groupadd docker
  2. 將當前用戶添加到當前用戶組中

    $ sudo gpasswd -a ${user} dokcer
  3. 從新啓動docker服務

    $ sudo service docker restart

針對當前用戶不會立馬生效,須要註銷後從新登陸以獲取用戶組權限。


在 Windows 中安裝 Docker

使用虛擬機實現,守護進程在虛擬機中。

learn_docker_img_003


在 OS X 中安裝 Docker

learn_docker_img_004

在OS X 上Docker的運行環境

在OS X上安裝Docker前咱們先看一下Docker的運行要求.

  • Linux容器技術
  • 操做系統級別的虛擬化
  • 依賴於linux內核的Namespaces和Cgroups

Boot2Docker

OS X的內核是Unix,並且通常root用戶蘋果是不給用戶的。因此要運行Docker在OS X上和在Windows上同樣,須要藉助虛擬機來實現。

  • 輕量級的Linux發行版,爲Docker定製
  • Virtualbox VM
  • Docker客戶端
  • 管理工具

安裝前的檢查

  • 系統要求:OS X 10.6 "Snow Leopard"以上版本

安裝步驟

  • 訪問github上的Boot2Docker

    https://github.com/boot2docker/boot2docker
  • 下載Boot2Docker-1.7.0.pkg
  • 安裝Boot2Docker-1.7.0.pkg

Boot2Docker的啓動過程

  • 打開命令行窗口
  • 建立 $HOME/.boot2docker/目錄
  • 建立VirtualBox ISO
  • 啓動虛擬機並運行Docker守護進程

Boot2Docker的啓動命令

  • $ mkdir -p ~/.boot2docker
  • $ if [ ! -f ~/.boot2docker/boot2docker.iso ]; then cp /usr/local/share/boot2docker/boot2docker.iso ~/.boot2docker/ ; fi
  • $ /usr/local/bin/boot2docker init
  • $ /usr/local/bin/boot2docker up
  • $ /usr/local/bin/boot2docker shellinit
  • $ docker version

learn_docker_img_005

驗證Boot2Docker及Docker安裝成功

  • 運行命令 $ docker run ubuntu echo hello world 若是打印以下日誌,說明安裝成功

    bash-3.2$ docker run ubuntu echo hello world
      Unable to find image 'ubuntu:latest' locally
      latest: Pulling from ubuntu
      428b411c28f0: Pull complete 
      435050075b3f: Pull complete 
      9fd3c8c9af32: Pull complete 
      6d4946999d4f: Already exists 
      ubuntu:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
      Digest: sha256:45e42b43f2ff4850dcf52960ee89c21cda79ec657302d36faaaa07d880215dd9
      Status: Downloaded newer image for ubuntu:latest
      hello world
      bash-3.2$

 


參考:

mac安裝docker指南: http://docs.docker.com/installation/mac/#command-line-docker-with-boot2docker

極客學院視頻: http://www.jikexueyuan.com/path/docker/

doker入門指南: http://my.oschina.net/dlpinghailinfeng/blog/384803

 

pdf文件下載地址: http://pan.baidu.com/s/1c1corG8

相關文章
相關標籤/搜索