Docker -- 系統整潔之道 -- 0

在個人小 rmbp 256G的硬盤裏,實在是裝不下100多個G的虛擬機了,因此想把一些東西遷移到這兩年很火的Docker下,Docker之前也有過一兩次,只是按着別人給的用法用的,具體的一些細節並無深刻,和git同樣,這麼牛掰的東西怎麼能很差好學一些呢?html

這裏寫圖片描述

Docker和虛擬機的區別


Docker是一種容器,虛擬機是一種管理程序虛擬機化(hypervisor virtualization,HV)。管理程序虛擬化經過中間層將一臺或者多臺獨立的機器虛擬運行在物理硬件之上,而容器(好比Docker)則是直接運行在操做系統內核之上的用戶空間。因爲容器是運行在操做系統上的,因此只能運行底層和宿主機相同或者相似的操做系統,好比說在Ubuntu下能夠在容器裏運行Centos,卻不能運行Windows。node

目前Windows上的Docker能夠跑Linux的Docker容器,是由於底下跑了Linux的VM,可是立刻就能夠支持Windows Server 2016了,如連接[Introducing the Technical Preview of Docker Engine for Windows Server 2016](http://Introducing the Technical Preview of Docker Engine for Windows Server 2016)。linux

容器的優勢:git

  1. 一次save,處處運行。
  2. 啓動速度快,消耗資源少。Docker與虛擬機性能比較

容器缺點:docker

  1. 資源隔離方面不如虛擬機。
  2. 安全性問題,「權限隔離」作的不夠好,只要有Docker的命令權限,就能夠操做全部的Docker實例。

Docker的目標


  1. 提供一個簡單、輕量的建模方式。
  2. 職責的邏輯分離,防止開發環境和部署環境不一致,致使出現「開發時一切正常,確定是運維問題」的狀況。
  3. 快速、高效的開發生命週期。

Docker的核心組件


  1. Docker客戶端和服務器shell

    Docker是一個C/S架構的程序,Docker客戶端須要向Docker服務器發出請求,服務器完成請求後返回信息。一個本地Docker客戶端能夠鏈接遠端的Docker服務器進行操做,以下圖。json

    這裏寫圖片描述

  2. Docker鏡像ubuntu

    鏡像是構建Docker世界的基石。用戶基於鏡像來維護本身的容器。Docker鏡像是Docker容器運行時的只讀模板,每個鏡像由一系列的層 (layers) 組成。Docker使用 UnionFS來將這些層聯合到單獨的鏡像中。UnionFS容許獨立文件系統中的文件和文件夾(稱之爲分支)被透明覆蓋,造成一個單獨連貫的文件系統。正由於有了這些層的存在,Docker是如此的輕量。當你改變了一個Docker鏡像,好比升級到某個程序到新的版本,一個新的層會被建立。所以,不用替換整個原先的鏡像或者從新創建(在使用虛擬機的時候你可能會這麼作),只是一個新的層被添加或升級了。如今你不用從新發布整個鏡像,只須要升級,層使得分發Docker鏡像變得簡單和快速。windows

  3. Docker倉庫(Registry)centos

    Docker使用Registry來保存用戶構建的鏡像,就像蘋果的apple store。Registry分爲私有和公有兩種,Docker公司本身運營的Registry叫作Docker Hub。

  4. Docker容器

    Docker能夠幫你構建和部署容器,用戶只須要把本身的應用程序或服務打包放進容器便可。每個Docker容器都是從Docker鏡像建立的。Docker容器能夠運行、開始、中止、移動和刪除。每個Docker容器都是獨立和安全的應用平臺,Docker容器是Docker的運行部分。

  5. Docker的技術組件

    Docker能夠被安裝在x64架構,內核3.10以上的linux系主機、win10以上windows和OS X 10.10.3且2010年之後的Mac上。在2013年Docker剛發佈的時候,它是一款基於LXC的開源容器管理引擎。把LXC複雜的容器建立與使用方式簡化爲Docker本身的一套命令體系。 隨着Docker的不斷髮展,它開始有了更爲遠大的目標,那就是反向定義容器的實現標準,將底層實現都抽象化到Libcontainer的接口。這就意味 着,底層容器的實現方式變成了一種可變的方案,不管是使用namespace、cgroups技術抑或是使用systemd等其餘方案,只要實現了 Libcontainer定義的一組接口,Docker均可以運行。

安裝


安裝方法都很簡單,值得注意的是當前Docker版本的安裝需求,好比如今Linux下安裝的需求就上x64架構,內核3.10以上。

Mac下安裝方法,直接在官網上下載docker app,安裝便可。
Linux下安裝方法,Linux下最簡單的安裝方法就是apt和yum包管理工具進行安裝了。
Windows下安裝方法

還有一個比較好用的安裝腳本,這個腳本只支持在lsb、debian、fedora、oracle、centos、redhat、os這幾個發行版中使用。

在安裝結束後,可使用docker info命令來查看Docker是否裝好了。Mac下的docker info結果:

~  docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 1.12.1
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 0
Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: null bridge host overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 4.4.20-moby
Operating System: Alpine Linux v3.4
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.952 GiB
Name: moby
ID: FSZQ:ZPKN:NEUW:55GH:Q33R:7L7M:5FLN:GW6E:CLHJ:NO66:WL4K:A3L5
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
File Descriptors: 34
Goroutines: 98
System Time: 2016-09-29T01:48:55.851895948Z
EventsListeners: 2
Registry: https://index.docker.io/v1/
Insecure Registries:
127.0.0.0/8

Mac裝好後以下圖的樣子,基本功能都已經在菜單上了。

這裏寫圖片描述

同時Mac還有一個GUI界面Kitmatic,目前仍是beta版,可是用起來仍是很不錯的。

這裏寫圖片描述

各類各樣的image看起來很好看。

使用入門


先把Docker的命令行打印出來。

~  docker --help
Usage: docker [OPTIONS] COMMAND [arg...]
      docker [ --help | -v | --version ]

A self-sufficient runtime for containers.

Options:

 --config=~/.docker Location of client config files
 -D, --debug Enable debug mode
 -H, --host=[] Daemon socket(s) to connect to
 -h, --help Print usage
 -l, --log-level=info Set the logging level
 --tls Use TLS; implied by --tlsverify
 --tlscacert=~/.docker/ca.pem Trust certs signed only by this CA
 --tlscert=~/.docker/cert.pem Path to TLS certificate file
 --tlskey=~/.docker/key.pem Path to TLS key file
 --tlsverify Use TLS and verify the remote
 -v, --version Print version information and quit

Commands:
   attach    Attach to a running container
   build     Build an image from a Dockerfile
   commit    Create a new image from a container's changes
   cp        Copy files/folders between a container and the local filesystem
   create    Create a new container
   diff      Inspect changes on a container's filesystem
   events    Get real time events from the server
   exec      Run a command in a running container
   export    Export a container's filesystem as a tar archive
   history   Show the history of an image
   images    List images
   import    Import the contents from a tarball to create a filesystem image
   info      Display system-wide information
   inspect   Return low-level information on a container, image or task
   kill      Kill one or more running containers
   load      Load an image from a tar archive or STDIN
   login     Log in to a Docker registry.
   logout    Log out from a Docker registry.
   logs      Fetch the logs of a container
   network   Manage Docker networks
   node      Manage Docker Swarm nodes
   pause     Pause all processes within one or more containers
   port      List port mappings or a specific mapping for the container
   ps        List containers
   pull      Pull an image or a repository from a registry
   push      Push an image or a repository to a registry
   rename    Rename a container
   restart   Restart a container
   rm        Remove one or more containers
   rmi       Remove one or more images
   run       Run a command in a new container
   save      Save one or more images to a tar archive (streamed to STDOUT by default)
   search    Search the Docker Hub for images
   service   Manage Docker services
   start     Start one or more stopped containers
   stats     Display a live stream of container(s) resource usage statistics
   stop      Stop one or more running containers
   swarm     Manage Docker Swarm
   tag       Tag an image into a repository
   top       Display the running processes of a container
   unpause   Unpause all processes within one or more containers
   update    Update configuration of one or more containers
   version   Show the Docker version information
   volume    Manage Docker volumes
   wait      Block until a container stops, then print its exit code

Run 'docker COMMAND --help' for more information on a command.'

我相信能用Docker都是的大神,就不翻譯了。

在安裝好之後來運行一個最簡單的hello world吧。

docker run hello-world

所見即所得,如圖。

這裏寫圖片描述

在運行docker run的時候,能夠看到打印出了Hello from Docker!,首先docker在本地去檢查了是否有一個叫作hello-world的鏡像,在這裏,咱們剛裝好的docker裏必然是沒有的,因此docker就去Docker Hub上找這個鏡像,找到之後下載下來,run。讀一下這個helloworld的輸出,能夠docker run -it ubuntu bash來運行一個ubuntu。來試一試

# -i 表明保持STDIN開啓,-t 表明爲容器分配一個tty。
docker run -it ubuntu bash

運行之後,在docker hub裏下載好ubuntu鏡像後,docker構造好容器啓動,就能夠和正常的shell同樣的進行操做了。

這裏寫圖片描述

更多內容盡在docker-learn1。

參考連接


  1. [Introducing the Technical Preview of Docker Engine for Windows Server 2016](http://Introducing the Technical Preview of Docker Engine for Windows Server 2016)
  2. Docker與虛擬機性能比較
  3. 第一本Docker書
  4. 5分鐘弄懂Docker
  5. 一次「奇幻」的Docker libcontainer代碼閱讀之旅
  6. Docker背後的容器管理—Libcontainer深度解析
  7. LXC:Linux 容器工具
  8. 阿里雲Registry加速器
  9. docker使用阿里雲Docker鏡像庫加速
  10. 很是好的一篇Docker教程,比較全面
  11. 知乎_Docker的應用場景在哪裏
  12. 一個比較詳細的命令用法

原文連接:http://dengnanyi.com/2016/09/28/docker-learn-0/

相關文章
相關標籤/搜索