標籤:

如何系統地學習 Docker?

如題,樓主看好Docker的發展前景,想了解一下Docker的學習路徑,從入門到實操,系統地學習。

知乎上其實有一些相關問題:學習Docker哪本書最好? - Docker,但個人覺得回答還是偏理論,請問國內有哪幾家雲廠商支持Docker?具體實操如何進行?


Docker 也是雲計算技術中較為熱門的一種,以下這幾篇文章,涵蓋了從基礎操作到Docker部署等一系列內容,能夠助你深入淺出地了解 Docker 技術。

快速上手

Docker快速入門以及安裝使用

摘要:docker通過內核虛擬化技術(namespace及cgroups等)來提供容器的資源隔離與安全保障等,由於docker通過操作系統層的虛擬化實現隔離,所以docker容器在運行時,不需要類似虛擬機額外的操作系統開銷,提供資源利用率。本文介紹了許多Docker的基礎操作。

Docker快速入門以及安裝使用
Docker 使用指南 (一)—— 基本操作
Docker 使用指南 (二)—— 搭建本地倉庫
Docker 使用指南 (三)—— 網路配置
Docker 使用指南 (四)—— 數據卷的使用
Docker 使用指南 (五)—— Dockerfile 詳解
Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器棧

讀完這六篇,相信你會對Docker有一個非常全面的了解。

在騰訊雲上使用Docker

目前,騰訊雲平台支持 Docker ,以下是在騰訊雲生產環境中體驗、使用Docker的教程,可以讓你更好地理解Docker的不同使用場景。

在騰訊雲伺服器上體驗Docker
利用 Docker 快速搭建 git 倉庫 Gitlab 與代碼審閱 Gerrit 平台
在 CVM 上使用騰訊雲 Docker 鏡像加速構建
Docker 部署dotnetcore

此外,騰訊雲還推出了容器服務CCS,可以在託管的雲伺服器實例集群上輕鬆運行應用程序。使用該服務,您將無需安裝、運維、擴展您的集群管理基礎設施,只需進行簡單的API調用,便可啟動和停止Docker應用程序,查詢集群的完整狀態,以及使用各種雲服務。
希望以上的內容對你有所幫助!


推薦一本Docker入門學習的書籍:《自己動手寫Docker》。

本書在詳細分析Docker所依賴的技術棧的基礎上,一步一步地通過代碼實例,讓讀者可以自己循序漸進地用Go語言構建出一個容器的引擎。不同於其他Docker原理介紹或代碼剖析的書籍,《自己動手寫Docker》旨在提供給讀者一條動手路線,一步一步地實現Docker的隔離性,構建Docker的鏡像、容器的生命周期及Docker的網路等。

作者簡介

(點擊作者姓名可查看個人主頁)

陳顯鷺(花名:遙鷺)-阿里雲高級研發工程師

對Docker有深入研究,是Docker多個項目的Contributor,專註於容器技術的編排與基礎環境研究。愛好折騰源代碼,熱愛開源文化並積极參与社區開源項目的研發。

王炳燊(花名:溪恆)-阿里雲研發工程師

具有豐富的Linux開發經驗,對Docker有深入研究,多次提交Docker Patch。目前從事阿里雲容器服務網路方案的設計與實現,專註於容器技術的基礎環境研究。

秦妤嘉(花名:嫀嫀)-阿里雲高級研發工程師

DevOps工程師,有豐富的容器化持續集成和持續交付開發實戰經驗,進行過Jenkins源碼分析改造和Jenkins插件開發。目前從事阿里雲容器服務持續集成和持續交付方案的設計和實現。

為什麼要寫這本書

Docker 技術可謂是近年最火熱的技術之一,鋪天蓋地的技術論壇和各種講座,大家都在分享關於如何容器化及如何使用Docker優化自己運維和開發流程的經驗。隨著Docker技術的逐漸普及,使用Docker已經不再是一個難題。現在更加重要的是生產環境容器化的最佳實踐,另外就是容器的編排框架之爭。但是,對於技術人員來說,除去Docker 外表的繁華外,什麼是容器,容器到底是怎麼創建的,容器底層的技術探秘也是非常重要的。

2014年開始接觸 Docker的時候,經歷了從最初的新奇—感嘆竟然還有Docker 這樣的好工具,到逐漸熟悉Docker的各種功能,嘗試在生產環境中使用Docker技術的過程。但是,每每被人問到:「Docker技術到底是怎麼實現的呢?」我只能粗粗淺淺地說:「Docker是使用Linux Kernel的Namespace 和 Cgroups實現的一種容器技術。」那麼,什麼是Namespace,什麼是Cgroups,Docker是怎麼使用它們的,容器到底是怎麼一步步被創建出來的?問到這些,我就會支支吾吾地不知所以。由此可見,了解容器技術的底層技術,然後明白它們是如何工作的,尤為重要,這些才是整個容器技術的基石,掌握了這些基石才能更加容易地向上攀登。

單單講解底層的技術實現細節和源碼解讀是很枯燥的一件事,一般來說很難有耐心去一點點細讀然後揣摩其中的奧妙,這樣囫圇吞棗地過一遍技術細節,作用不大。因此,便萌生了寫一本《自己動手寫Docker》這樣的書的想法。本書不去刻意講解容器技術的細節,用到什麼講解什麼,點到為止,更加細節的內容留給讀者自己探索。通過閱讀本書,可以一步步地去了解容器技術的實現細節,更可以跟著作者一步步地用自己的代碼去實現它。本書最大的樂趣莫過於用自己最新了解到的知識去動手實現自己的容器。由此可以進一步打開你進入容器技術社區的大門。

本書的內容

本書的目的是去引導讀者通過學習容器技術的實現細節,一步步去構建一個簡單的容器。 從這個過程中,了解整個容器技術領域和實現細節。本書注重原理的講解與實踐,每一部分都 會有詳細的代碼解析,力爭用最少最精簡的代碼,幫助讀者構建自己的容器。

本書的內容主要分為「容器與開發語言」 「基礎技術」 「構造容器」 「構造鏡像」 「構造 容器進階」 「容器網路」 「高級實踐」 這7章。

  • 容器與開發語言:主要介紹 Docker 的基本功能和特點,並且對後面即將使用的 Go 語言 做一個簡單的介紹。
  • 基礎技術:主要介紹實現容器的底層技術,如Namespace、Cgroups、Union File System。 每一小節都會有文字性介紹,並且附有一個簡短的小例子程序,介紹在容器上是如何使 用這項技術的,方便讀者清晰地理解各個技術點在容器上的作用。
  • 構造容器:使用前面兩章介紹的基礎技術,構造一個最簡單的容器環境,會將整體實現 細節及代碼解析一點點展現,直接使用前面介紹的基礎技術,從而更加有實戰感。
  • 構造鏡像: 使用 2.3 節介紹的分層文件系統技術,構建一個簡單的容器鏡像,體現容器 鏡像的分層思想。
  • 構造容器進階:更加貼近真實的容器實現,在原來的基礎上,增加更豐富的功能。通過 這一章的學習,讀者可以更好地了解各種技術是如何整合在一起,去實現容器整體功能 的。
  • 容器網路: 除了實現一個容器環境之外,這一章還會講解如何使自己的容器和宿主機通 信,以及如何讓不同的容器之間進行通信,更加貼近真實環境。
  • 高級實踐: 使用自己編寫的容器,運行一些通用程序,驗證容器的可用性。此外,本章 還介紹了目前Docker 使用的容器運行引擎,以及目前容器運行態引擎的概況。

另外社區機構號也邀請到三位作者,大家對於這本書籍或者Docker學習的問題可以在原文評論中提問,點擊到原文:Docker入門必備書籍:《自己動手寫Docker》 - 知乎專欄


Docker技術及其周圍的生態一直在發展和演變,要系統的學習這門技術,個人覺得大致可以分為三個階段:

1. 基礎入門 (About Docker Engine)

a. 容器和VM的相同點與不同點。

b. 了解docker的基本概念和基本組件(Docker daemon, Docker client, registry鏡像庫, image鏡像,container容器),

c. Docker命令的實際操作,對docker以及容器有個感性的認識。(比如拉取一個nginx鏡像,並運行一個nginx伺服器)。

&> 環境準備(安裝docker,docker-compose,啟動docker服務,熟悉和修改docker服務的啟動參數等)

&> 熟悉基本命令操作:容器操作(run,rm,ps,stop,restart,exec...),鏡像操作(docker images/build/tag/history/pull/push/rmi ...),網路,volume,...

&> 鏡像製作及上傳下載:docker build,docker pull/push,Docker HUB,Registry,Dockerfile

&> docker run運行容器以及docker-compose製作運行容器(docker run -p 80:80 nginx)

d. 將應用Docker化。

&> docker commit將運行中容器生成鏡像

&> docker build使用Dockerfile生成鏡像, 了解Dockerfile語法

&> 理解app docker的思想和方法,將應用docker化運行。

2. docker進階

a. 了解docker生態與docker應用場景

&> DEVOPS

&> 服務註冊發現

&> 服務/容器日誌收集處理;監控告警

a. Docker 網路/存儲

&> CNI/CNM

&> Libnetworking,Pod,flannel,weave,calico,...

&> volume, volume container, other volume plugins

c. docker的編排/調度,業務的彈性伸縮

&> swarm+compose/swarmkit

&> mesos+marathon/DCOS

&> K8S

e. 業務微服務化

3. docker深入

a. docker底層技術實現(cgroup, namespace, unionFS, networking, ...)

b. docker engine源碼分析

c. docker安全 ...

現在國內有很多雲廠商都有相應的Docker服務。

阿里雲最近成為了Docker公司在中國的第一個官方合作夥伴,阿里雲也有相應的容器服務(容器服務 Container Service_容器管理)。UCLOUD也有docker相應的服務(程序應用_Docker-UCloud文檔中心),包括運行平台UDOCKER,鏡像庫服務UHUB,對官方Docker HUB的鏡像加速平台ucr.ucloud.cn。使用UCLOUD的雲主機uhost可以很方便的使用docker。

容器集群服務UDocker(UCloud - 專業雲計算服務商)是可靈活便捷使用的容器服務,資源可分布於多個可用區,具有更高容災能力。支持用戶自由創建管理,可以靈活綁定一個或多個EIP並具有獨立的內網IP及獨立的防火牆。

docker資料鏈接:

https://docs.docker.com/

yeasy/docker_practice


哎喲嗬,你們UCloud這是在自問自答啊,題主和已有倆答主都是UCloud的人,毫無違和感。這波廣告我給0分。


我在Docker 1.7.x就開始用了, 三年多的使用經驗,趟過各種坑。如下建議,認為不錯的請給個贊,有問題請私信我!

入門級:

  • linux基礎命令,例如:yum,ls,top,iptables
  • 網路基礎知識,例如:host,bridge
  • 3.git/docker常用命令:docker run/stop/ps/commit/save/exec

這個階段擼官方文檔:Docker Documentation

中級:

  • linux 內核,namespace,cgroup
  • 深入理解Docker網路原理,藉助第三工具(Flannel,Calico)搭建網路模型。
  • 深入理解Docker文件系統和存儲原理。

高級:

  • 這個階段就是能能對Docker的網路模塊,存儲模塊等模塊進行調優。要對GO有一定的基礎,嘗試對一些部件的更改。

github地址:moby/moby

應用級:

一整套編排方案,主要有涉及以下部分:

  • 配置管理(anisble,saltstack,jumperserver)
  • 持續集成和持續部署(Jenkins,git,gitlab)
  • 服務編排(k8s,swarm,mesos,rancher)
  • 網路模型(host,bridge,Flannel,Calico)
  • 服務註冊(etcd)
  • 服務發現(confd)
  • 日誌平台(ELK, loghub)
  • 監控平台(zabbix,cadvisor,prometheus,grafana)
  • 腳本開發(shell,python)

一套完整的方案可以看這裡:基於Docker持續交付平台建設的實踐


學習 Docker 的前提是你要對 Linux 有一定了解,常用指令可以熟練使用。

然後選一本好的入門書籍,如《第一本Docker書》,這本書的作者原先是 Docker 團隊的成員,現在為 Docker 團隊的顧問。把書中的實例全部自己動手運行一遍。

然後再去看一些 Docker 的基礎原理(NameSpace、Cgroup、AUFS、DeviceMapper)加深對Docker實現原理的理解,個人推薦陳皓的幾篇博客,對 Docker 的基礎知識講解的非常透徹:

Docker基礎技術:Linux Namespace(上) | | 酷 殼 - CoolShell

Docker基礎技術:Linux Namespace(下) | | 酷 殼 - CoolShell

Docker基礎技術:Linux CGroup | | 酷 殼 - CoolShell

Docker基礎技術:AUFS | | 酷 殼 - CoolShell

Docker基礎技術:DeviceMapper | | 酷 殼 - CoolShell

然後再去看一些源碼級講解,如孫宏亮的《Docker源碼分析》

比較重要的幾個:

Docker資源管理探秘:Docker背後的內核Cgroups機制

Resource management in Docker

Docker源碼分析(四):Docker Daemon之NewDaemon實現

Docker源碼分析(六):Docker Daemon網路

然後再去掌握一個Docker生態鏈中的工具,如 K8s , Marathon + Mesos等等,這樣才能把Docker應用到生產環境中。

相關鏈接:學習Docker哪本書最好? - 知乎用戶的回答


謝邀~

哈嘍!知乎網友們你們在哪裡?讓我看到你們!

言歸正傳,說說我們能為題主貢獻什麼吧!

我們在給大量用戶提供服務支持的過程中我們發現用戶對 Docker 技術掌握的程度參差不齊,這也增加了我們服務支持工作的難度。我們經常要一對一地教會用戶如何使用 Docker ,但是這樣效率實在太低,因此我們決定給國內的技術人員提供免費的培訓服務,我們希望培訓能夠讓技術人員擁有實際的 Docker 操作經 驗,能夠製作出好的鏡像,並能夠管理好基於 Docker 容器的集群。真正地可以將 Docker 技術能應用到工作當中。

所以我們在 2015 年 6 月的時候,推出了 Docker 實訓課堂,得到廣大攻城獅們的熱愛,報名人數蹭蹭蹭的上升,那場面叫一個鑼鼓喧天,鞭炮齊鳴,紅旗招展,人山人海.....反正就是報名的人很多,場面很熱鬧。

由於人數眾多,很多小夥伴都沒有能搶到試聽資格,所以我們將講授內容整理成視頻,供大家參考學習。教學視頻傳送門 培訓 - 希雲cSphere

主要講解內容:

  • Docker 實戰入門以及 Dockerfile
  • Docker 實戰入門Registry以及持續集成
  • Docker 實戰之監控報警以及日誌管理
  • Docker 實戰之網路管理
  • Docker 實戰之持續部署以及彈性伸縮
  • Docker實戰之存儲

以上就是小編提供給題主的絕對乾貨~希望對題主能夠所幫助!筆芯??


從docker的用途上來考慮,看docker能否解決你工作中遇到的問題。例如在實際開發過程中,經常遇到的持續集成問題,軟體開發,測試,部署,如何做成自動化的。配合github Jenkins和docker實現自動化部署,系統持續集成。

docker最重要的是編排,如何合理有效穩定的管理各個容器,調度容器。可以看看k8s,自己動手搭建跑跑看。docker本身並沒有引入新的技術,都是在linux原有的基礎上做的融合。可以關注docker源碼分析。

UCloud也支持Docker,推出了UDocker產品。

UCloud - 專業雲計算服務商


卧槽,前提是有linux 記錄,理論與實踐相結合,更要有項目目標,你希望用來做什麼,邊學邊做,應該就會很快。

Docker簡介

一種虛擬容器技術。

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

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

Docker目標

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

Docker使用場景

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

Docker的基本組成

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

Docker Client 客戶端

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

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 http://docker.io $ source /etc/bash_completion.d/http://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

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

    更多詳細的學習可以參考Docker 容器使用 - Demoso(呆萌搜)


    就不能先不打廣告然後等人多了再修改答案?!


    推薦閱讀:

    七牛的商業模式可以成功嗎?
    在青雲(QingCloud)工作是怎樣一種體驗?
    hbase和hive的差別是什麼,各自適用在什麼場景中?
    目前雲計算在醫療上應用的阻礙是什麼?如何在雲存儲里實現醫療信息的安全保障呢?目前的解決方案都是什麼呢?
    奇虎宣布360查殺率世界前五,他的技術到底可靠嗎?

    TAG:雲計算 | Docker |