1. 程式人生 > >一文帶你認識Docker

一文帶你認識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、登陸阿里雲獲取映象加速器地址

https://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,一個喜歡健身的程式設計師。

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

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