一文帶你認識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,用於不同場景下的隔離
- 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、登陸阿里雲獲取鏡像加速器地址
//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,一個喜歡健身的程式設計師。
獲取更多乾貨以及最新消息,請關注公眾號:上古偽神
如果對您有幫助,點個關注就是對我最大的支援!!!