Docker -- 系統(tǒng)整潔之道 -- 0

在我的小 rmbp 256G的硬盤里,實在是裝不下100多個G的虛擬機了衅枫,所以想把一些東西遷移到這兩年很火的Docker下,Docker以前也有過一兩次,只是按著別人給的用法用的致开,具體的一些細節(jié)并沒有深入,和git一樣萎馅,這么牛掰的東西怎么能不好好學(xué)一些呢双戳?

Docker Logo

Docker和虛擬機的區(qū)別


Docker是一種容器,虛擬機是一種管理程序虛擬機化(hypervisor virtualization,HV)糜芳。管理程序虛擬化通過中間層將一臺或者多臺獨立的機器虛擬運行在物理硬件之上飒货,而容器(比如Docker)則是直接運行在操作系統(tǒng)內(nèi)核之上的用戶空間魄衅。由于容器是運行在操作系統(tǒng)上的,所以只能運行底層和宿主機相同或者類似的操作系統(tǒng)膏斤,比如說在Ubuntu下可以在容器里運行Centos徐绑,卻不能運行Windows。

目前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)沮榜。

容器的優(yōu)點:

  1. 一次save盘榨,到處運行。
  2. 啟動速度快蟆融,消耗資源少草巡。Docker與虛擬機性能比較

容器缺點:

  1. 資源隔離方面不如虛擬機。
  2. 安全性問題型酥,“權(quán)限隔離”做的不夠好山憨,只要有Docker的命令權(quán)限,就可以操作所有的Docker實例弥喉。

Docker的目標


  1. 提供一個簡單郁竟、輕量的建模方式。
  2. 職責(zé)的邏輯分離由境,防止開發(fā)環(huán)境和部署環(huán)境不一致棚亩,導(dǎo)致出現(xiàn)“開發(fā)時一切正常,肯定是運維問題”的情況虏杰。
  3. 快速讥蟆、高效的開發(fā)生命周期。

Docker的核心組件


  1. Docker客戶端和服務(wù)器

    Docker是一個C/S架構(gòu)的程序纺阔,Docker客戶端需要向Docker服務(wù)器發(fā)出請求瘸彤,服務(wù)器完成請求后返回信息。一個本地Docker客戶端可以連接遠端的Docker服務(wù)器進行操作州弟,如下圖钧栖。

  1. Docker鏡像

    鏡像是構(gòu)建Docker世界的基石。用戶基于鏡像來維護自己的容器婆翔。Docker鏡像是Docker容器運行時的只讀模板拯杠,每一個鏡像由一系列的層 (layers) 組成。Docker使用 UnionFS來將這些層聯(lián)合到單獨的鏡像中啃奴。UnionFS允許獨立文件系統(tǒng)中的文件和文件夾(稱之為分支)被透明覆蓋潭陪,形成一個單獨連貫的文件系統(tǒng)。正因為有了這些層的存在,Docker是如此的輕量依溯。當你改變了一個Docker鏡像老厌,比如升級到某個程序到新的版本,一個新的層會被創(chuàng)建黎炉。因此枝秤,不用替換整個原先的鏡像或者重新建立(在使用虛擬機的時候你可能會這么做),只是一個新的層被添加或升級了】妒龋現(xiàn)在你不用重新發(fā)布整個鏡像淀弹,只需要升級,層使得分發(fā)Docker鏡像變得簡單和快速庆械。

  2. Docker倉庫(Registry)

    Docker使用Registry來保存用戶構(gòu)建的鏡像薇溃,就像蘋果的apple store。Registry分為私有和公有兩種缭乘,Docker公司自己運營的Registry叫做Docker Hub沐序。

  3. Docker容器

    Docker可以幫你構(gòu)建和部署容器,用戶只需要把自己的應(yīng)用程序或服務(wù)打包放進容器即可堕绩。每一個Docker容器都是從Docker鏡像創(chuàng)建的策幼。Docker容器可以運行、開始奴紧、停止垄惧、移動和刪除。每一個Docker容器都是獨立和安全的應(yīng)用平臺绰寞,Docker容器是Docker的運行部分。

  4. Docker的技術(shù)組件

    Docker可以被安裝在x64架構(gòu)铣口,內(nèi)核3.10以上的linux系主機滤钱、win10以上windows和OS X 10.10.3且2010年以后的Mac上。在2013年Docker剛發(fā)布的時候脑题,它是一款基于LXC的開源容器管理引擎件缸。把LXC復(fù)雜的容器創(chuàng)建與使用方式簡化為Docker自己的一套命令體系。 隨著Docker的不斷發(fā)展叔遂,它開始有了更為遠大的目標他炊,那就是反向定義容器的實現(xiàn)標準,將底層實現(xiàn)都抽象化到Libcontainer的接口已艰。這就意味 著痊末,底層容器的實現(xiàn)方式變成了一種可變的方案,無論是使用namespace哩掺、cgroups技術(shù)抑或是使用systemd等其他方案凿叠,只要實現(xiàn)了 Libcontainer定義的一組接口,Docker都可以運行。

安裝


安裝方法都很簡單盒件,值得注意的是當前Docker版本的安裝需求蹬碧,比如現(xiàn)在Linux下安裝的需求就上x64架構(gòu),內(nèi)核3.10以上炒刁。

Mac下安裝方法恩沽,直接在官網(wǎng)上下載docker app,安裝即可翔始。
Linux下安裝方法罗心,Linux下最簡單的安裝方法就是apt和yum包管理工具進行安裝了。
Windows下安裝方法

還有一個比較好用的安裝腳本绽昏,這個腳本只支持在lsb协屡、debian、fedora全谤、oracle肤晓、centos、redhat认然、os這幾個發(fā)行版中使用补憾。

在安裝結(jié)束后,可以使用docker info命令來查看Docker是否裝好了卷员。Mac下的docker info結(jié)果:

~  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裝好后如下圖的樣子盈匾,基本功能都已經(jīng)在菜單上了。

同時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構(gòu)造好容器啟動,就可以和正常的shell一樣的進行操作了惭蹂。

9.png

更多內(nèi)容盡在Docker -- 系統(tǒng)整潔之道 -- 1伞插。

參考鏈接


  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的應(yīng)用場景在哪里
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市盾碗,隨后出現(xiàn)的幾起案子媚污,更是在濱河造成了極大的恐慌,老刑警劉巖廷雅,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耗美,死亡現(xiàn)場離奇詭異撩满,居然都是意外死亡喜最,警方通過查閱死者的電腦和手機搭伤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門型将,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人曙搬,你說我怎么就攤上這事硬耍∮八” “怎么了灿巧?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵赶袄,是天一觀的道長。 經(jīng)常有香客問我抠藕,道長弃鸦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任幢痘,我火速辦了婚禮,結(jié)果婚禮上家破,老公的妹妹穿的比我還像新娘颜说。我一直安慰自己,他們只是感情好汰聋,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布门粪。 她就那樣靜靜地躺著,像睡著了一般烹困。 火紅的嫁衣襯著肌膚如雪玄妈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音拟蜻,去河邊找鬼绎签。 笑死,一個胖子當著我的面吹牛酝锅,可吹牛的內(nèi)容都是我干的诡必。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搔扁,長吁一口氣:“原來是場噩夢啊……” “哼爸舒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起稿蹲,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扭勉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后苛聘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涂炎,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年焰盗,在試婚紗的時候發(fā)現(xiàn)自己被綠了璧尸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡熬拒,死狀恐怖爷光,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情澎粟,我是刑警寧澤蛀序,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站活烙,受9級特大地震影響徐裸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜啸盏,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一重贺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧回懦,春花似錦气笙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舟茶,卻和暖如春谭期,著一層夾襖步出監(jiān)牢的瞬間堵第,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工隧出, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踏志,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓鸳劳,卻偏偏與公主長得像狰贯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赏廓,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容