Docker基礎 從一臉懵到入門

2021-10-22 06:41:26 字數 4286 閱讀 3350

虛擬化技術是一種計算機資源管理技術,是將計算機的各種實體資源,如伺服器、網路、記憶體及儲存等,予以抽象、轉換後呈現出來。虛擬化技術打破了計算機實體結構間的,不可切割的障礙。使使用者可以比原本的組態更好的方式,來應用這些資源。

虛擬化技術主要作用:

高效能的物理硬體產能過剩和老的舊的硬體產能過低的重組重用,透明化底層物理硬體

軟體跨環境遷移問題(**的水土不服)

docker通俗的講是伺服器中高效能的虛擬機器,可以將一台物理機虛擬n多台虛擬機器的機器,互相之間隔離,互不影響。

第一句,是「build, ship and run」。也就是,「搭建、傳送、執行」,三板斧。

第二句口號就是:「build once,run anywhere(搭建一次,到處能用)」。

docker 是乙個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到乙個可移植的容器中,然後發布到任何流行的linux機器或windows 機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。

docker 和傳統虛擬化方式的不同之處,可見docker是在作業系統層面上實現虛擬

化,直接復用本地主機的作業系統,而傳統方式則是在硬體層面實現。

圖示幫助理解:

docker 的幾個核心概念如下,也可結合圖示理解

宿主機:安裝docker守護程序的linux伺服器,稱之為宿主機;

映象(image):docker 映象,就相當於是乙個 root 檔案系統。除了提供容器執行時所需的程式、庫、資源、配置等檔案外,還包含了一些為執行時準備的一些配置引數。

容器(container):映象執行之後的實體,映象和容器的關係,就像是物件導向程式設計中的類和物件一樣,映象是靜態的定義,容器是映象執行時的實體。容器可以被建立、啟動、停止、刪除、暫停等。

倉庫(repository):倉庫可看成乙個映象控制中心,用來儲存映象。

容器和映象的區別?

要點:容器 = 映象 + 可讀層。並且容器的定義並沒有提及是否要執行容器

總結:可以理解映象是檔案,容器是程序。容器是基於映象建立的,即容器中的程序依賴於映象中的檔案(映象就是容器的系統檔案),這裡的檔案包括程序執行所需要的可執行檔案,依賴軟體,庫檔案,配置檔案等等。也可以將容器看做是映象執行的乙個例項,或者是檔案與程序的關係。

每執行乙個容器,都會在映象上加乙個可寫層,但這一層並不會改變映象本身,這也就是為什麼,有時候你如果同乙個映象,啟動多個容器,裡面的內容不會變,但是如果將可寫層持久化,就要通過commit命令來把可寫層寫到磁碟,即生成新的映象。

(1)檢視電腦上已經已經安裝docker

yum list installed | grep docker

(2)安裝docker

yum -y install docker

(3)安裝後檢視docker版本

docker -v

(4)systemctl命令是系統服務管理器指令

啟動docker:systemctl start docker

停止docker:systemctl stop docker

重啟docker:systemctl restart docker

檢視docker狀態:docker info

開機啟動:systemctl enable docker

檢視docker幫助文件:docker --help

方案一:中科大

中國科學技術大學(ustc)是老牌的linux映象服務提供者了,還在遙遠的ubuntu 5.04版本的時候就在用。ustc的docker映象加速器速度很快。ustc docker mirror的優勢之一就是不需要註冊,是真正的公共服務。

編輯該檔案:   

vi  /etc/docker/daemon.json

在該檔案中輸入如下內容

方案二:阿里雲

如果中科大映象載入速度很慢,建議配置阿里雲映象加速,這個映象倉庫如果不好使,可以自己從阿里雲上申請!

必須要註冊,每個人分配乙個免費的docker映象加速位址,速度極快

配置完成記得重新整理配置

sudo systemctl daemon-reload

sudo systemctl restart docker

檢視映象 docker images

搜尋映象 docker search imagename

拉取映象 docker pull imagename:version

刪除映象 docker rmi imageid rmi-->remove image

檢視容器

檢視正在執行的容器:docker ps

檢視所有容器(檢視正在執行的和已經停止執行的) docker ps -a    或者docker ps -all

檢視最後一次執行的容器: docker ps -l

檢視停止的容器:docker ps -f status=exited

建立容器:互動式、守護式

互動式: docker run -it --name=容器名稱 映象名稱:標籤 /bin/bash

守護式: docker run -di --name=容器名稱 映象名稱(或映象id):標籤 /bin/bash

登入容器/進入容器的目錄:

docker exec -it 容器名稱 (或者容器id) /bin/bash

啟動容器: docker start 容器名稱(或者容器id)

停止容器: docker stop 容器名稱(或者容器id)

刪除容器docker rm 容器名稱(或者容器id)

資料卷是宿主機中的乙個目錄或檔案,當容器目錄和資料卷目錄繫結後,對方的修改會立即同步。乙個資料卷可以被多個容器同時掛載,乙個容器也可以被掛載多個資料卷。簡單來說資料卷本質其實是共享資料夾,是宿主機與容器間資料共享的橋梁。

容器資料持久化。

外部機器和容器間接通訊。

容器之間資料交換。

(1)1個容器掛載1個資料卷

注意事項:

1. 目錄必須是絕對路徑

2. 如果宿主機目錄不存在,會自動建立

3. 可以掛載多個資料卷

案例:#拉取centos映象

docker pull centos:7

#安裝啟動容器並掛載

docker run -di --name=c1 -v /root/host_data1:/root/c1_data centos:7 /bin/bash

(2)檢視容器已掛載的資料卷

docker inspect 容器名稱(容器id)

(3).1個容器掛載多個資料卷

可以通過以下命令,掛載多個資料卷

docker run -di --name=c1 -v /root/host_data1:/root/c1_data1 -v

/root/host_data2:/root/c1_data2 centos:7 /bin/bash

(4).多個容器掛載1個資料卷

多個容器掛載1個資料卷,實現資料共享

docker run -di --name=c2  -v /root/host_data_common:/root/c2_data centos:7

docker run -di --name=c3  -v /root/host_data_common:/root/c3_data centos:7

多個容器掛載1個容器(這個容器掛載1個資料卷)

##建立啟動c3資料卷容器,使用 –v 引數 設定資料卷

docker run -di --name=c3 -v /root/host_data_common:/root/c3_data centos:7

/bin/bash

##建立啟動 c1 c2 容器,使用 –-volumes-from 引數 設定資料卷

docker run -di --name=c1 --volumes-from c3 centos:7 /bin/bash

docker run -di --name=c2 --volumes-from c3 centos:7 /bin/bash

寫在最後:接下來幾個系列將會講解

docker中安裝mysql

elasticsearch,kibana環境搭建

kafka 環境搭建

一臉懵逼的Socket http對比

標籤 空格分隔 http tcp 今天整理一下已經懵逼好久的socket,http。想要弄清出他們的區別,首先要弄清一下tcp ip協議。每一抽象層建立在低一層提供的服務上,並且為高一層提供服務,看起來大概是這樣子的每一抽象層建立在低一層提供的服務上,並且為高一層提供服務,看起來大概是這樣子的 這樣...

redux中介軟體原理 從一臉懵逼到恍然大悟

前言react已經出來很久了,其生態圈之龐大,一鍋燉不下!各種react xx,已讓我們不堪重負,github上隨便乙個demo,引入的模組至少都是五指之數 看著頭疼,嚼之無味 在此建議新學者,可以從基礎的核心模組學起,前期不要考慮那些數量繁多的馬仔小弟,邊學邊寫,個人感覺前期核心要學的流程大致如下...

機器學習一臉懵筆記 04 線性代數

第01天 機器學習的線性代數 第02天 線性代數 第03天 向量 第04天 矩陣 第05天 矩陣型別和運算 第06天 矩陣分解 第07天 奇值分解 2020.01.28 機器學習實踐者應該加深對線性代數理解!理由如下 你需要學習線性代數符號 你需要能夠讀寫向量和矩陣符號。在書籍 和 上都用向量和矩陣...