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,用於不同場景下的隔離
- Mount - 隔離檔案系統掛載點
- UTS - 隔離主機名和域名
- IPC - 隔離程式間通訊資源
- PID - 隔離PID空間
- Network - 隔離網路介面
- 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,一個喜歡健身的程式設計師。
獲取更多幹貨以及最新訊息,請關注公眾號:上古偽神
如果對您有幫助,點個關注就是對我最大的支援!!!