docker 摘要(入門版)

Docker

安裝

macOS或者windows

  • 下載boot2docker工具

CentOS

  • yum install docker-io -y
  • systemctl start docker

docker摘要

docker虛擬化

  • 只虛擬User space
  • 一臺機器能夠運行20-50個container
  • 啓動速度快
  • 對內核有要求(不能像VMware同樣能夠安裝mac,windows和linux)
  • 用於大數據,分佈式和集羣

container實現

  • cgroup(內核中對資源的限制機制,經過控制進程(一個container實例)來限制)
  • namespace(每個容器都是有一個本身網絡進程的獨立的虛擬環境,實現容器間的隔離
  • chroot(文件系統的隔離,有一個真實的物理文件系統(物理機上),其餘的都是虛擬的文件系統(虛擬的文件系統在內存中))
  • 以上,cgroup,namespace,chroot都是在linux中,也就是直接調用linux,後來爲了跨平臺,將上面的封裝成了libcontainer庫,讓docer依賴於它java

  • pid,容器有本身獨立的進程表和1號進程
  • net,容器有本身的network info
  • ipc,container之間的通訊
  • mnt,每一個容器都有本身惟一的目錄掛載,是真實的掛載目錄的子目錄
  • utc,有獨立的hostname和domainlinux

層次

  • server -> hostOS -> docker engine -> app1

使用aufs實現分層的文件系統管理

  • Image是一種文件系統,裏面必須有操做系統或者軟件,docker中的系統Image很小,由於只包含很好的最核心的部分,每個那麼多的外圍
  • 只讀爲Image,可寫爲container,image是java中的class,container是對象
  • Image相似一個單鏈表系統,每個image包含一個指向parent image的指針
  • 每個parent image的image是base image
    • 層次: debain image(base image) -> apache image -> container
    • 通常base image是操做系統鏡像
    • 建議:一個container幹一件事情

dockerfile(相似於makefile,是命令的集合)

  • 描述一個Image的層次,就提描述了一個依賴次序,centos -> apache -> container
  • 有了它能夠完美的重現出開發環境,方便了測試人員

docker hub(鏡像倉庫,相似於github)

C/S運行

  • client request -> server -> http server -> router -> job -> driver

使用

  • docker pull {image name}
  • docker images --no-trunc
  • docker run [OPTIONS] IMAGE[:TAG] [CMD][ARG...]
    • -name
    • -i: iteract
    • -t: tag
    • -d: detach
  • docker ps
    • 不加上-a選項顯示的正在運行的容器
    • 加上-a顯示全部的容器,包括中止的
  • docker inspect [ID]
  • docker logs
  • docker build
  • docker rm/kill/stop id, 關閉容器
    • 批量操做: docker rm/kill/stop $(docker ps -a -q)
  • docker run -t -i centos /bin/bash, -t表示是僞tty(就是給一個終端,若是每個則容器一start就stop了),-i表示iteract(在有了終端這個前提之下,若是attach到容器中,能夠執行交互式的命令,若是沒有則什麼都幹不了),-d就是在後臺運行,不會在執行了上面這個命令以後直接進入到容器中
    • 進入到了交互之界面,使用exit退出,可是也會stop容器,若是要在一次進入到該容器,須要先start容器,則attach容器,由於-i會前臺運行,使用-d則是相反的
  • docker cp id:path hostpath

本身的摘要

  • docker在某些方面和git是同樣的,不如說對於image鏡像都是經過版本控制的,咱們從dockeruhb中pull下來鏡像文件,若是咱們將其啓動爲一個容器,若是咱們在這個容器中進行了修改,docker會經過文件將其修改記錄下來,咱們可將噹噹前的容器commit成一個新的image,這就相似於git中的一個commit點
  • 在肯定一個容器的時候是使用container id
  • 在肯定一個image的時候,是經過name:tag,若是隻有name則會選中全部的tag,tag表示一個版本
  • 生成一個image(提交點)的方法有兩種,docker commit 和 docker build,在docker build中就是在一個image中執行一個命令的集合在提交成一個新的image
相關文章
相關標籤/搜索