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 DaemonDocker最核心的后臺行程,運行于主機上,處理服務請求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 的軟體或服務,
本文由傳智教育博學谷 - 狂野架構師教研團隊發布
如果本文對您有幫助,歡迎關注和點贊;如果您有任何建議也可留言評論或私信,您的支持是我堅持創作的動力
轉載請注明出處!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/502444.html
標籤:其他
