天天看點

Docker

Docker

鏡像(image):

容器(container):

倉庫(repository):

環境準備

需要linux基礎

Centos7

使用軟體進行遠端連接配接

環境檢視
安裝

幫助文檔

登入阿裡雲找到容器服務

找到鏡像加速的位址

配置應用

Docker

docker是怎麼工作的?

Docker 是一個client-server 結構的系統,Docker的守護程序運作在主機上,通告Socker從用戶端通路

Dokcer server 接收到Docker-client 的指令,就會執行這個指令

Docker

Docker為什麼比虛拟機快

Docker有着比虛拟機更少的抽象層

Docker 利用的是主控端的核心,VM需要Guest OS

是以,建立一個容器的時候,Docker不需要虛拟機一樣重新加載一個作業系統的核心,避免引導。虛拟機是加載Guest OS,分鐘級别的,而docker是利用主控端的作業系統,省略了這個複雜的過程,秒級

Docker

說明:我們有了鏡像才可以建立容器,Linux,下載下傳一個centos 鏡像來測試學習

Docker
Docker

使用kibana連接配接es,思考網絡如何才能連接配接過去

Docker

portainer(先用這個)

Rancher(CI/CD再用)

什麼是portainer?

Docker圖形化界面管理工具,提供一個背景面闆供我們操作

通路測試:http://ip:8080

鏡像是一種輕量級、可執行的獨立軟體保,用來打包軟體運作環境和基于運作環境開發的軟體,他包含運作某個軟

件所需的所有内容,包括代碼、運作時庫、環境變量和配置檔案

所有的應用,直接打包docker鏡像,就可以直接跑起來

遠端倉庫下載下傳

其他人拷貝給你

自己制作一個鏡像dockerfile

UnionFs(聯合檔案系統):Union檔案系統(UnionFs)是一種分層、輕量級并且高性能的檔案系統,他支援對

檔案系統的修改作為一次送出來一層層的疊加,同時可以将不同目錄挂載到同一個虛拟檔案系統下( unite

several directories into a single virtual filesystem)。Union檔案系統是 Docker鏡像的基礎。鏡像可以通過分層

來進行繼承,基于基礎鏡像(沒有父鏡像),可以制作各種具體的應用鏡像

特性:一次同時加載多個檔案系統,但從外面看起來,隻能看到一個檔案系統,聯合加載會把各層檔案系統疊加起

來,這樣最終的檔案系統會包含所有底層的檔案和目錄

docker的鏡像實際上由一層一層的檔案系統組成,這種層級的檔案系統UnionFS。

boots(boot file system)

主要包含 bootloader和 Kernel, bootloader主要是引導加 kernel, Linux剛啟動時會加bootfs檔案系統,在 Docker鏡像的最底層是 boots。

這一層與我們典型的Linux/Unix系統是一樣的,包含boot加載器和核心。

當boot加載完成之後整個核心就都在記憶體中了,此時記憶體的使用權已由 bootfs轉交給核心,此時系統也會解除安裝bootfs。

rootfs(root file system) 在 bootfs之上。

包含的就是典型 Linux系統中的/dev,/proc,/bin,/etc等标準目錄和檔案。

rootfs就是各種不同的作業系統發行版,比如 Ubuntu, Centos等等。

Docker

對于個精簡的OS,rootfs可以很小,隻需要包合最基本的指令,工具和程式庫就可以了,因為底層直接用Host的kernel,自己隻需要提供rootfs就可以了。

由此可見對于不同的Linux發行版, boots基本是一緻的, rootfs會有差別,是以不同的發行版可以公用bootfs.

虛拟機是分鐘級别,容器是秒級!

最大的好處,我覺得莫過于資源共享了!比如有多個鏡像都從相同的Base鏡像建構而來,那麼主控端隻需在磁盤上保留一份base鏡像,同時記憶體中也隻需要加載一份base鏡像,這樣就可以為所有的容器服務了,而且鏡像的每一層都可以被共享。

所有的 Docker鏡像都起始于一個基礎鏡像層,當進行修改或培加新的内容時,就會在目前鏡像層之上,建立新的鏡像層。

Docker
Docker

實戰測試

如果想要儲存目前容器的狀态,我們可以通過commit來送出,獲得一個鏡像,類似于虛拟機的快照

docker的理念回顧

将應用和環境打包成一個鏡像

如果資料都在容器中,那麼删除容器,資料就會丢失! 需求:資料可以持久化

MySQL,容器删了,删庫跑路!需求:MySQL資料可以存儲在本地

容器之間可以有一個資料共享的技術!Docker容器中産生的資料,同步到本地!

這就是卷技術!!目錄的挂載,将我們容器内的目錄,挂載到Linux上面

Docker
Docker
Docker
Docker

好處:

我們以後修改隻需要在本地修改即可,容器内自動同步!

Docker

發現,我們挂載到本地的資料卷依舊沒有丢失,這就實作了容器資料持久化功能

Docker

我們通過具名挂載可以友善的找到我們的一個卷,大多數情況在使用的是具名挂載

Dockerfile就是用來建構docker鏡像的建構檔案、指令腳本

通過這個腳本可以生成鏡像,鏡像是一層一層的,腳本一個個的指令,每個指令都是一層

Docker

這個卷和外部有一個同步的目錄

Docker

檢視一下挂載的路徑

Docker

測試一下剛才的檔案是否同步

這種方式之後使用的很多,因為 通常我們會建構自己的鏡像

假設建構鏡像的時候沒有挂載卷,要手動鏡像挂載 -v 卷名:容器内路徑

多個mysql同步資料

Docker
Docker
Docker
Docker
Docker

多個mysql實作資料共享

容器之間配置資訊的傳遞,資料卷容器的生命周期一直持續到沒有容器使用為止

但是一旦持久化到了本地,這個時候本地的資料是不會删除的

dockerfile是用來建構docker鏡像的檔案,指令參數腳本

編寫一個dockerfile檔案

docker build建構成為一個鏡像

docker run 運作鏡像

docker push 釋出鏡像(docker hub,阿裡雲鏡像倉庫)

很多官方鏡像都是基礎包,很多功能都沒有,我們通常自己搭建自己的鏡像

每個保留關鍵字(指令)都必須是大寫字母

從上到下順序執行

表示注釋(#)

每個指令都會建立送出一個新的鏡像,并送出

Docker

Dockerfile是面向開發的,以後釋出項目,做鏡像,就需要編寫dockerfile檔案

Docker鏡像逐漸成為企業傳遞的标準

Dockerfile:建構檔案,定義了一切的步驟,源代碼

Dockerimages:通告Dockerfile建構生成的鏡像,最終釋出運作的産品

Docker容器:容器就是鏡像運作起來提供服務

Docker

Docker Hub中99%鏡像都是從這個基礎鏡像過來的 FROM scratch,然後配置需要的軟體和配置來進行建構

Docker

我們可以通過 docker history+鏡像id 列出本地鏡像的變更曆史

我們平時拿到一個鏡像,可以研究一下他是怎麼做到的

釋出項目

送出的時候也是按照鏡像的層級來進行送出的

https://hub.docker.com 注冊自己的賬号

确定這個賬号可以登入

在我們伺服器上送出自己的鏡像

登入完畢之後就可以送出鏡像了,docker push

登入阿裡雲

找到容器鏡像服務

建立命名空間

Docker

建立容器鏡像

Docker

浏覽阿裡雲

Docker

阿裡雲容器鏡像的就參考官方位址

Docker
Docker

三個網絡

Docker

我們每啟動一個docker容器,docker就會給docker容器配置設定一個ip ,我們隻要安裝了docker,就會有一個網卡docker0 橋接模式,使用的技術是 evth-pair技術

再次測試ip addr

Docker

再啟動一個容器測試,發現又多了一對網卡

Docker

我們測試 tomcat01 和 tomcat02 可以ping通

Docker

結論: tomcat01 和 tomcat02 是共用的一個 docker0

所有的容器不指定網絡的情況下,都是通過docker0通信的,docker會給我們的容器配置設定一個預設的可用IP

Docker

Docker使用的是Linux的橋接,主控端中是一個Dokcer容器的網橋 docker0

Dcoker中的所有的網絡接口都是虛拟的,虛拟的轉發效率高

隻要容器删除,對應網橋一對就都沒了

Docker
場景:編寫了一個微服務,項目不重新開機,資料庫 IP 換掉了,如何用名字來進行通路容器

探究:inspect

Docker
Docker

--link 就是在我們hosts配置中增加了一個 172.18.0.3 tomcat02 312857784cd4

現在已經不建議使用 --link 了

docker0的問題:不支援容器名連接配接網絡

檢視所有的docker 網絡

Docker

網絡模式:

bridge:橋接(預設)

測試:

自定義一個網絡

Docker

自定義的網絡 docker都已經幫我們維護好了對應的關系,推薦我們平時這樣使用網絡

redis:不同的叢集使用不同 的網絡,保證叢集是安全和健康的

mysql:不同的叢集使用不同的網絡,保證叢集是安全和健康的

Docker
Docker
Docker
Docker
Docker

結論:假設要跨網絡操作别人,就需要使用docker network connect 連通

Docker
下一篇: 鏡像釋出