Docker筆記(一):什麼是Docker

原文地址: http://blog.jboost.cn/docker-1.html html

1. 前言

接觸Docker也有兩年多了,斷斷續續玩過一些應用場景,如安裝一些經常使用工具服務,部署業務項目,基於gitlab+jenkins pipeline+docker的CI/CD實現等。瞭解其基本知識與操做,但不能說深度掌握,故藉此系列進行梳理與學習,也但願對有意學習Docker的人提供參考。mysql

2. Docker簡介

Docker最初是dotCloud公司(後來也更名爲Docker)的一個內部項目,於2013年3月開源。Docker使用Google推出的Go語言實現,基於Linux內核的cgroup、namespace、Union FS等技術(先不用急着瞭解這些都是啥),對進程進行隔離,是操做系統層面的虛擬化技術。相對於傳統的硬件層面的虛擬化技術(虛擬機),Docker顯得更爲輕量化。下圖爲傳統虛擬機與Docker的結構對比
vm-dockergit

由上圖可看出傳統虛擬機技術是在硬件層面虛擬出一套硬件(CPU、內存、磁盤、網卡等)後,在其上運行一個完整的操做系統,再在操做系統上運行應用進程;而Docker的應用進程是直接運行在宿主機的內核上,也不須要進行硬件虛擬,所以,Docker要比傳統虛擬機更爲輕便。web

總結Docker相對傳統虛擬化技術的優點以下:redis

  1. 更高的資源利用率:Docker不須要硬件虛擬與運行完整操做系統的開銷,因此資源利用率更高,一樣配置的主機,採用Docker每每能夠運行更多數量的應用。
  2. 更高效的使用體驗:在操做系統上安裝一些經常使用軟件,如mysql,redis等,每每須要折騰好一陣,有些還要手動安裝各類依賴,而採用Docker,可能幾行命令就可讓一個服務快速運行起來。
  3. 一致的運行環境:Docker鏡像功能能夠把程序運行須要的環境進行封裝,確保程序在開發、測試、生產環境都能保持一致性,避免因環境不一致致使程序運行異常。
  4. CI/CD支持:使用Docker能夠定製鏡像來實現持續集成、持續部署,如基於gitlab + jenkins pipeline + docker的自動化部署。
  5. 更輕鬆的維護:由於Docker保證了運行環境的一致性,所以應用的遷移或縮放將變得很容易;Docker的分層存儲與鏡像技術,也使得應用重複部分的複用變得更簡單,基於基礎鏡像能夠進一步擴展定義本身的鏡像,也能夠直接使用官方鏡像來使用。

3. Docker的基本架構

Docker的基本架構圖以下
docker-archsql

主要包括幾部分:docker

  1. Docker daemon(Docker守護進程 dockerd):Docker的執行引擎,負責監聽處理Docker客戶端請求與管理Docker相關對象,如鏡像、容器、網絡、數據卷等。一個Docker守護進程可與其它Docker守護進程進行通訊,做爲Docker服務進行管理。
  2. Docker client(Docker客戶端 docker):Docker客戶端(docker CLI命令)是大多數用戶用來與Docker守護進程交互的方式,好比你在命令行執行docker run,Docker客戶端將發送該命令請求到Docker守護進程,由守護進程執行。Docker客戶端可經過REST API, UNIX Socket或網絡接口來與Docker守護進程進行通訊,而且可與多個Docker守護進程進行通訊。
  3. Docker Registry(Docker註冊中心):用來存儲Docker鏡像的倉庫,相似於Maven的Nexus。Docker官方提供了一個公共鏡像倉庫Docker Hub( https://hub.docker.com/ ),docker相關命令默認會從Docker Hub上搜索與下載鏡像,咱們能夠配置一些國內鏡像倉庫地址來進行加速,甚至搭建本身的私有鏡像倉庫。
  4. Docker Objects:Docker管理的對象,主要包括鏡像、容器、網絡、數據卷等。

4. Docker的用途

根據第二部分Docker的優點及筆者的經驗來看,目前Docker主要用於微信

  1. 經常使用軟件服務的搭建運行,如Mysql、Redis、Nginx等
  2. 業務服務的發佈部署,尤爲是基於SpringBoot的微服務
  3. CI/CD實現,結合Gitlab的webhook,Jenkins的pipeline,實現自動化集成與部署
  4. 快速的彈性伸縮,在容器集羣化管理的場景中,如Swarm、K8s解決方案中,可基於容器對服務進行快速的彈性伸縮來應對業務量的突發狀況
  5. 執行環境封裝,如一些深度學習框架模型,打成Docker鏡像的方式進行發佈,能夠快速在不一樣的環境中運行起來

5. 總結

在微服務架構、DevOps這些概念盛行的時代,容器化技術變得愈來愈重要,幾乎成爲每一位開發人員須要掌握的技能。本系列文章是筆者基於自身實踐及相關文獻參考,對Docker相關技術進行整理,歡迎關注,共同窗習。


個人我的博客地址:http://blog.jboost.cn
個人微信公衆號:jboost-ksxy (一個不僅有技術乾貨的公衆號,歡迎關注,及時獲取更新內容)
———————————————————————————————————————————————————————————————
微信公衆號網絡

 

原文出處:https://www.cnblogs.com/spec-dog/p/11186877.html架構

相關文章
相關標籤/搜索