Docker安裝 卸載舊版本 較舊的 Docker 版本稱為 docker 或 docker-engine 。如果已安裝這些程式,請卸載它們以及相關的依賴項。 yum remove docker \ docker-client \ docker-client-latest \ docker-comm ...
Docker安裝
卸載舊版本
較舊的 Docker 版本稱為 docker 或 docker-engine 。如果已安裝這些程式,請卸載它們以及相關的依賴項。
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安裝Docker依賴環境
在新主機上首次安裝 Docker Engine-Community 之前,需要設置 Docker 倉庫,之後,您可以從倉庫安裝和更新 Docker。
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
設置 Docker 安裝地址
在新主機上首次安裝 Docker Engine-Community 之前,需要設置 Docker 倉庫,之後,您可以從倉庫安裝和更新 Docker,使用以下命令來設置穩定的倉庫(阿裡雲)
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安裝 Docker Engine-Community
安裝最新版本的 Docker Engine-Community 和 containerd
sudo yum install -y docker-ce docker-ce-cli containerd.io
如果提示您接受 GPG 密鑰,請選是。
Docker 安裝完預設未啟動,並且已經創建好 docker 用戶組,但該用戶組下沒有用戶。
Docker 鏡像加速
阿裡雲鏡像獲取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陸後,左側菜單選中鏡像加速器就可以看到你的專屬地址了:
配置daemon.json
您可以通過修改daemon配置文件/etc/docker/daemon.json來使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
啟動 Docker
systemctl start docker
驗證docker服務
通過運行 hello-world 映像來驗證是否正確安裝了 Docker Engine-Community 。
docker run hello-world
運行該代碼後首先會從倉庫拉取
hello-world
鏡像,然後運行該鏡像,運行後會輸出一個Hello from Docker!
開啟Docker自動補全
使用docker時無法自動補全鏡像名和其他參數,這樣使用效率大大降低,下麵是解決方法
bash-complete
yum install -y bash-completion
刷新文件
source /usr/share/bash-completion/completions/docker
source /usr/share/bash-completion/bash_completion
測試
輸入
docker p
後docker會將可選項列出來
docker p
Docker架構
Docker總體架構為c/s架構,模塊之間松耦合,包含了Client, Daemon, Registry, Graph, Driver, Libcontainer以及Docker Container
Docker的組件
Docker Client
是用戶界面,它支持用戶與Docker Daemon
之間通信Docker Daemon
Docker最核心的後臺進程,運行於主機上,處理服務請求Docker Index
是中央registry,支持擁有公有與私有訪問許可權的Docker容器鏡像的備份Docker Containers
負責應用程式的運行,包括操作系統、用戶添加的文件以及元數據Docker Images
是一個只讀模板,用來運行Docker容器DockerFile
是文件指令集,用來說明如何自動創建Docker鏡像
Docker 基本概念
Docker 包括三個基本概念:
鏡像
Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程式、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名捲、環境變數、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。
分層存儲
鏡像只是一個虛擬的概念,其實際體現並非由一個文件組成,而是由一組文件系統組成,或者說,由多層文件系統聯合組成。
Union FS
聯合文件系統是(Union FS)是linux的存儲技術,也是Docker鏡像的存儲方式, 它是分層的文件系統,將不同目錄拉到同一個虛擬目錄下,下圖展示了Docker用Union FS 搭建的分層鏡像:(比如最下層是操作系統的引導,上一層是Linux操作系統,再上一層是Tomcat,jdk,再上一層是應用代碼)
這些層是只讀的,載入完後這些文件會被看成是同一個目錄,相當於只有一個文件系統。
我們可以通過docker info查看鏡像的一些信息,可以看到存儲驅動用的並不是Union FS 而是overlay2,overlay也是一個聯合文件系統,所以上述主要介紹聯合文件系統的概念,至於這些存儲驅動的演變過程和優缺點,
鏡像構建時,會一層層構建,前一層是後一層的基礎。每一層構建完就不會再發生改變,後一層上的任何改變只發生在自己這一層。(比如,刪除前一層文件的操作,實際不是真的刪除前一層的文件,而是僅在當前層標記為該文件已刪除。在最終容器運行的時候,雖然不會看到這個文件,但是實際上該文件會一直跟隨鏡像。因此,在構建鏡像的時候,需要額外小心,每一層儘量只包含該層需要添加的東西,任何額外的東西應該在該層構建結束前清理掉。)
容器
鏡像(Image)和容器(Container)的關係,就像是面向對象程式設計中的 類 和 實例 一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。
容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於屬於自己的獨立的命名空間。因此容器可以擁有自己的root文件系統、自己的網路配置、自己的進程空間,甚至自己的用戶 ID 空間。容器內的進程是運行在一個隔離的環境里,使用起來,就好像是在一個獨立於宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全。也因為這種隔離的特性,很多人初學 Docker 時常常會混淆容器和虛擬機。
前面講過鏡像使用的是分層存儲,容器也是如此。每一個容器運行時,是以鏡像為基礎層,在其上創建一個當前容器的存儲層,我們可以稱這個為容器運行時讀寫而準備的存儲層為容器存儲層。
容器存儲層的生存周期和容器一樣,容器消亡時,容器存儲層也隨之消亡。因此,任何保存於容器存儲層的信息都會隨容器刪除而丟失。
倉庫
鏡像構建完成後,可以很容易的在當前宿主機上運行,但是,如果需要在其它伺服器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。
一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標簽(Tag);每個標簽對應一個鏡像。
通常,一個倉庫會包含同一個軟體不同版本的鏡像,而標簽就常用於對應該軟體的各個版本。我們可以通過<倉庫名>:<標簽>的格式來指定具體是這個軟體哪個版本的鏡像。如果不給出標簽,將以latest作為預設標簽。(以 Ubuntu 鏡像為例,ubuntu是倉庫的名字,其內包含有不同的版本標簽,如,14.04,16.04。我們可以通過ubuntu:14.04,或者ubuntu:16.04來具體指定所需哪個版本的鏡像。如果忽略了標簽,比如ubuntu,那將視為ubuntu:latest。)
倉庫名經常以三段式路徑形式出現,比如heima.com/nginx-proxy:tag
,前者往往意味著 Docker Registry 多用戶環境下的用戶名,後者則往往是對應的軟體名。但這並非絕對,取決於所使用的具體 Docker Registry 的軟體或服務。
本文由傳智教育博學谷 - 狂野架構師教研團隊發佈
如果本文對您有幫助,歡迎關註和點贊;如果您有任何建議也可留言評論或私信,您的支持是我堅持創作的動力
轉載請註明出處!