一文帶你認識Docker

Docker是一個容器技術的應用,而底層是由於Linux容器實現的,Docker只是實現層。

一、Linux容器

1、隔離與共享

一台服務器運行着多個邏輯隔離的服務器進程,誰的運行環境都不希望影響到誰,也就是一個物理機需要虛擬出多個環境或容器,Linux提供一種創建和進入容器的方式,操作系統讓應用程序就像在獨立的機器上運行一樣,但又能共享很多底層的資源。

 

2、實現基礎

Linux容器功能是基於cgroups和Namespace實現的。

(1)cgroups(control groups 控制組)

cgroups是將進程分組管理的內核功能,通過cgroups可以隔離進程,同時還可以隔離進程的資源佔用(cpu,內存等)情況,在操作系統底層限制物理資源,起到container的作用,進程可用的cpu資源由cpuset指定。

(2)Namespace

 

Namespace讓每個進程擁有獨立的PID、IPC和網絡空間。Namespace是通過clone系統調用來實現的。clone系統調用的第三個參數flags就是通過設置Namespace來劃分資源的。

 

Linux一共構建了6種不同的Namespace,用於不同場景下的隔離

  1. Mount – 隔離文件系統掛載點
  2. UTS – 隔離主機名和域名
  3. IPC – 隔離進程間通信資源
  4. PID – 隔離PID空間
  5. Network – 隔離網絡接口
  6. User – 隔離用戶/用戶組空間

 

二、Docker簡介

 

1、是什麼

Docker是一個開源的應用容器引擎,可以輕鬆的為任何應用創建一個輕量級的、可移植的、自給自足的容器。開發者在本地編譯通過的容器可以批量的在生產環境上部署。

Docker類似於集裝箱,各式各樣的貨物,經過集裝箱的標準化進行託管,而集裝箱與集裝箱之前沒有影響。Docker是一個開放平台,使開發人員和管理員可以在稱為容器的鬆散隔離的環境中構建鏡像、交互和運行分佈式應用程序,以便在開發、QA和生產環境之間進行高效的應用程序生命周期管理。

 

2、Docker三個重要組件

 

(1)鏡像(images)

一個特殊的文件系統。操作系統分為內核和用戶空間,對於Linux來說,內核啟動後會掛載root文件系統為其提供用戶控件的支持。而Docker鏡像,就相當於是一個root文件系統。

除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含一些為運行時準備的配置參數。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。

鏡像實際是由多層文件系統聯合組成。鏡像構建時,會一層一層構建,前一層是後一層的基礎。每一層構建完就不會再改變,後一層上的任何改變只發生在當前層。比如:刪除前一層文件的操作,實際不是真的刪除前一層的文件,而是僅把當前層標記為該文件已刪除。

分層存儲的特徵還使得鏡像的復用、定製變的更為容易。甚至可以用之前構建好的鏡像作為基礎層,然後進一步添加新的層,以定製自己所需的內容,構建新的鏡像。

 

(2)容器(Container)

鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的類和實例,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、暫停、停止、刪除等。

容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行與屬於自己獨立的命名空間,容器也是分層存儲。

容器存儲層的生命周期跟容器一樣,容器消亡時,容器存儲層也會消亡,任何保存於容器存儲層的信息都會丟失。

容器不應該向其存儲層內寫入任何數據,容器存儲層也要保持無狀態化。所有的文件寫入操作,都應該使用數據卷、或者綁定宿主目錄,在這些位置的讀寫會跳過存儲層,直接對宿主發生讀寫,其性能和穩定性更高。容器消亡後數據卷的數據不會丟失。

容器在整個應用程序生命周期工作流中提供以下優點:隔離性、可移植性、靈活性、可伸縮性和可控性。 最重要的優點是可在開發和運營之間提供隔離。

 

(3)倉庫(Registry)

Docker Registry是一個集中存儲、分發鏡像的服務。

一個Registry可以包含多個倉庫(Repository),每個倉庫只包含一種軟件,但可以包含多個標籤(tag,也就是版本),每個標籤對應一個鏡像。

 

這三個組件的關係如下圖,比如有兩個倉庫,分別是Redis和MySQL

 

3、docker持續開發工作流

 

二、Docker安裝、卸載

環境:Centos7

1、安裝

Centos有配置docker社區版的yum包,所以安裝比較方便。

1、先更新yum安裝包
sudo yum update
2、安裝docker
yum install docker-ce
3、安裝之後查看docker版本,也可以用docker info
docker version
4、如果出現Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
   啟動docker
service docker start
5、配置開機啟動
sudo systemctl enable docker

  

 

docker默認是docker官方的下載源,下載速度會比較慢,所以一般是配置國內的下載源,這裡介紹阿里的下載源。

1、登陸阿里雲獲取鏡像加速器地址

//cr.console.aliyun.com/undefined/instances/mirrors

 

上圖中就有針對各種服務器的配置詳情。

2、卸載

(1)首先查看安裝的Docker yum包

yum list installed | grep docker

  

(2)依次卸載yum包

yum -y remove 包名

  

(3)卸載掉之後,依次刪除目錄

rm -rf /etc/docker
rm -rf /run/docker
rm -rf /var/lib/dockershim
rm -rf /var/lib/docker

  

如果出現如下錯誤:

rm: cannot remove 『/var/lib/docker/containers』: Device or resource busy

  

執行如下命令:
cat /proc/mounts|grep containers
umount /var/lib/docker/containers/

  


===============================

我是Liusy,一個喜歡健身的程序員。

獲取更多乾貨以及最新消息,請關注公眾號:上古偽神

如果對您有幫助,點個關注就是對我最大的支持!!!

Tags: