Docker入門手冊

codeHi發表於2020-10-08

20.Docker

20.1 Docker的起源

   2010年,幾個搞IT的年輕人,在美國舊金山成立了一家名叫“dotCloud”的公司,這家公司主要提供基於PaaS的雲端計算技術服務。
   具體來說,是和LXC [ LXC,就是Linux容器虛擬技術(Linux container) ]有關的容器技術。後來,dotCloud公司將自己的容器技術進行了簡化和標準化,並命名為 Docker 。
   後來公司在競爭之下快堅持不下去時,他們就想到了把Docker給開源出去,讓世界更多的人一起參與進來,貢獻程式碼和意見。
   不開則已,一開驚人,越來越多的IT工程師發現了Docker的優點,然後蜂擁而至,加入Docker開源社群。之後Docker隨之火爆流行全球。

20.2 Docker是什麼

Docker和容器技術為什麼會這麼火爆?說白了,就是因為它“輕量級”。

在容器技術之前,業界的主流的虛擬化技術是虛擬機器。虛擬機器技術的代表,是VMWare和OpenStack。相信很多人都用過虛擬機器。虛擬機器,就是在你的作業系統裡面,裝一個軟體,然後通過這個軟體,再模擬一臺甚至多臺“子電腦”出來,在“子電腦”裡,你可以和正常電腦一樣執行程式,例如開QQ。如果你願意,你可以變出好幾個“子電腦”,裡面都開上QQ。“子電腦”和“子電腦”之間,是相互隔離的,互不影響。
虛擬機器屬於虛擬化技術。而Docker這樣的容器技術,也是虛擬化技術,屬於輕量級的虛擬化,虛擬機器雖然可以隔離出很多“子電腦”,但佔用空間更大,啟動更慢,虛擬機器軟體可能還要花錢購買啟用碼。

而容器技術恰好沒有這些缺點。它不需要虛擬出整個作業系統,只需要虛擬一個小規模的環境(類似“沙箱”)。它啟動時間很快,幾秒鐘就能完成。而且,它對資源的利用率很高(一臺主機可以同時執行幾千個Docker容器。此外,它佔的空間很小,虛擬機器一般要幾GB到幾十GB的空間,而容器只需要MB級甚至KB級。正因為如此,容器技術受到了熱烈的歡迎和追捧,發展迅速。

大家需要注意,Docker本身並不是容器,它是建立容器的工具,是應用容器引擎。

虛擬機器,類似於“子電腦”

imgimg

20.3 Docker的優勢是什麼

“Build, Ship and Run”!

“搭建、傳送、執行”,三板斧。

舉個例子:
我來到一片空地,想建個房子,於是我搬石頭、砍木頭、畫圖紙,一頓操作,終於把這個房子蓋好了。
結果,我住了一段時間,想搬到另一片空地去。這時候,按以往的辦法,我只能再次搬石頭、砍木頭、畫圖紙、蓋房子。

但是,跑來一個老巫婆,教會我一種魔法,可以把我蓋好的房子複製一份,做成“映象”,放在我的揹包裡。
等我到了另一片空地,就用這個“映象”,複製一套房子,擺在那邊,拎包入住。

所以,Docker的第二句口號就是:“Build once,Run anywhere(搭建一次,到處能用)”。

20.4 Docker的核心概念

Docker技術的三大核心概念,分別是:

* 映象(Image)
* 容器(Container)
* 倉庫(Repository)

我剛才例子裡面,那個放在包裡的“映象”,就是Docker映象。而我的揹包,就是Docker倉庫。我在空地上,用魔法造好的房子,就是一個Docker容器。
說白了,這個Docker映象,是一個特殊的檔案系統。它除了提供容器執行時所需的程式、庫、資源、配置等檔案外,還包含了一些為執行時準備的一些配置引數(例如環境變數)。映象不包含任何動態資料,其內容在構建之後也不會被改變。

也就是說,每次變出房子,房子是一樣的,但生活用品之類的,都是不管的。誰住誰負責添置。

** 每一個映象可以變出一種房子。那麼,我可以有多個映象呀 **

也就是說,我蓋了一個歐式別墅,生成了映象。另一個哥們可能蓋了一箇中國四合院,也生成了映象。還有哥們,蓋了一個非洲茅草屋,也生成了映象。。。這麼一來,我們可以交換映象,你用我的,我用你的,豈不是很爽?

於是乎,就變成了一個大的公共倉庫。
負責對Docker映象進行管理的,是Docker Registry服務(類似倉庫管理員)。
不是任何人建的任何映象都是合法的。萬一有人蓋了一個有問題的房子呢?
所以,Docker Registry服務對映象的管理是非常嚴格的。
最常使用的Registry公開服務,是官方的Docker Hub,這也是預設的 Registry,並擁有大量的高質量的官方映象。

20.5 Docker的安裝

1.安裝依賴包
	$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 
2.設定阿里雲映象源
	$ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
3.安裝Docker-CE 
	$ sudo yum install docker-ce
4.啟動docker
	# 開機自啟
	sudo systemctl enable docker 
	# 啟動docker服務
	sudo systemctl start docker
5.映象加速配置
	#加速地址 : 阿里雲控制檯搜尋容器映象服務,進入容器映象服務,左側最下方容器映象服務中複製加速器地址
	sudo mkdir -p /etc/docker
	sudo tee /etc/docker/daemon.json <<-'EOF'
	{
  		"registry-mirrors": ["你的加速器地址"]
	}
	EOF
	# 重新載入docker配置
		sudo systemctl daemon-reload
	# 重啟docker
		sudo systemctl restart docker

20.6 Docker demo入門

1.拉去centoS:7映象
	$ sudo docker pull centos:7
2.編寫Dockerfile
   # 建立一個空資料夾
    $ sudo mkdir dockerFileStudy
   # 建立Dockerfile檔案 (注意檔名稱不要錯,必須叫Dockerfile)
    $ sudo vim Dockerfile
   # 編寫Dockerfile
    From centos:7
    ENTRYPOINT ["cd /"]
    ENTRYPOINT ["ls"]
   # 編譯Dockerfile檔案  -t 是後面的名字為打成映象名
    $ sudo docker build -t test . 
   # 啟動一個容器執行你的Dockerfile編譯的映象把
    $ sudo docker run test

20.7 下面你由你自己來翻閱資料編寫一個Dockerfile來整合Tomcat並使用docker啟動一個Tomcat吧~~~~

20.8 常見問題 :

1.安裝Docker-ce報錯 
    --> Processing Conflict: 1:docker-ce-cli-18.09.6-3.el7.x86_64 conflicts docker
    --> Processing Conflict: 1:docker-ce-cli-18.09.6-3.el7.x86_64 conflicts docker-io
    --> Processing Conflict: 3:docker-ce-18.09.6-3.el7.x86_64 conflicts docker
    --> Processing Conflict: 3:docker-ce-18.09.6-3.el7.x86_64 conflicts docker-io
    --> Finished Dependency Resolution	
    Error: docker-ce conflicts with 2:docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
    Error: docker-ce-cli conflicts with 2:docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
     You could try using --skip-broken to work around the problem
     You could try running: rpm -Va --nofiles --nodigest
# 嘗試刪除本機上的所有docker服務再次安裝
	# 1、檢視安裝過的docker:
		$ yum list installed | grep docker
			containerd.io.x86_64                 1.3.7-3.1.el7                  @docker-ce-stable
			docker-ce.x86_64                     3:19.03.13-3.el7               @docker-ce-stable
			docker-ce-cli.x86_64                 1:19.03.13-3.el7               @docker-ce-stable
	# 2、解除安裝docker:
		$ sudo yum remove -y containerd.io.x86_64 docker-ce.x86_64 docker-ce-cli.x86_64   
	# 3、刪除容器映象:
		$ sudo rm -rf /var/lib/docker
	# 4、 重新安裝docker
		$ sudo yum install docker-ce
2. 編譯Dockerfile報錯 
		unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /usr/dockerbuild/Dockerfile: no such file or directory
# 檢視Dockerfile名稱是否有誤
# 檢視Dockerfile語法是否正確 左側docker保留命令是否大寫,右側執行命令是否小寫
3. 刪除映象報錯
        Error response from daemon: conflict: unable to remove repository reference "test" (must force) - container cac0f265950c is using its referenced image 20c5428b958d
        
 # 使用 docker ps -a 檢視此映象是否有啟動過的容器 ,如果有,先使用 docker rm 容器id 刪除容器 再刪除映象 注意 docker ps - a 檢視的是無論是否啟動的容器都顯示 而 docker ps 是隻顯示啟動的容器

相關文章