Docker知识点总结及其命令的使用
Docker
- Docker簡介
- Docker與Tomcat有什么區別?
- Docker與虛擬機有什么區別?
- Docker的基本組成
- Docker的聯合文件系統
- Docker基本命令
- Docker中的幾個重要組件
- 一、容器數據卷
- 二、Dockerfile
- 三、Docker網絡
- 虛擬機共享網絡的三種方式
- Docker共享網絡的四種方式
- Docker中建立一個虛擬網絡
- Docker應用:建立一個redis集群
- 引用
Docker簡介
Docker 是一個開源的應用容器引擎,Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。傳統模式中,開發人員只需要對Web應用打包一個jar包放入linux服務器就可以,它可能需要使用很多環境(Redis,Mysql,JDK等等),這些環境會有運維人員進行配置(費時費力)。Docker就是提供一個鏡像(我們可以將jar包及其環境一同打包放入Docker倉庫),這樣我們不管是將項目由Windows部署到Linux,或者其他人員想在他們的機器上運行我們的項目只需下載這個鏡像即可。
Docker與Tomcat有什么區別?
Docker與虛擬機有什么區別?
Docker只包含項目運行的核心鏡像(jar包+依賴環境 只有幾MB),而虛擬機包含一整個系統(Centos 幾十GB);
虛擬機:
我們傳統的虛擬機需要模擬整臺機器包括硬件,每臺虛擬機都需要有自己的操作系統,虛擬機一旦被開啟,預分配給他的資源將全部被占用。每一個虛擬機包括應用,必要的二進制和庫,以及一個完整的用戶操作系統。
Docker:
容器技術是和我們的宿主機共享硬件資源及操作系統可以實現資源的動態分配。
容器包含應用和其所有的依賴包,但是與其他容器共享內核。容器在宿主機操作系統中,在用戶空間以分離的進程運行。
Docker容器代替了Hypervisor與虛擬系統,實現進程和資源的隔離
Docker的基本組成
Docker的聯合文件系統
聯合文件系統(UnionFs)是一種分層、輕量級并且高性能的文件系統,它支持對文件系統的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬文件系統下。另外,不同 Docker 容器就可以共享一些基礎的文件系統層,同時再加上自己獨有的改動層,大大提高了存儲的效率。
比如對于不同的linux發行版本Debian和BusyBox。他們都擁有兩個文件系統分別時BootFs和RootFS。BootFS 主要包含BootLoader 和Kernel, BootLoader主要是引導加載Kernel, 當Boot成功后,Kernel被加載到內存中。RootFS包含的就是典型 Linux 系統中的 /dev、/proc、/bin 等標準目錄和文件。他們的BootFS大體一致,RootFS稍有差別,所以他們可以使用聯合文件系統共享BootFS。
Linux在啟動后,首先將RootFS 置為 Readonly,進行一系列檢查后將其切換為Readwrite供用戶使用。在Docker中,也是利用該技術,然后利用Union Mount在Readonly的RootFS文件系統之上掛載Readwrite文件系統。并且向上疊加, 使得一組Readonly和一個Readwrite的結構構成一個Container的運行目錄、每一個被稱作一個文件系統Layer。
如上圖所示,兩個linux發行版本共用了底層的BootFS,并在上層添加屬于自己的獨特模塊。
所以我們可以看得出聯合文件系統的優勢:
? 多個Container可以共享父Image存儲,節省存儲空間;
? 快速部署 – 如果要部署多個Container,Base Image可以避免多次拷貝,實現快速部署。
? 因為多個Container共享Image,提高多個Container中的進程命中緩存內容的幾率。
docker中將上層命名為容器層,下層命名為鏡像層。對于我們使用pull命令下載的文件都屬于鏡像層,即我們無法對其進行修改,我們所做的修改操作(run命令)都會成為容器層添加到該層級之上。當我們使用commit命令將我們修改的文件提交時,它就合并為了一個新的鏡像層文件。
Docker基本命令
Example:使用docker部署Nginx服務器
---- docker run -d --name hello-nginx -p 8085:80
-v 外部路徑(主機):內部路徑(容器) --volume-from 容器名 nginx
即我們啟動一個名為hello-nginx的服務運行在后臺,nginx默認運行在容器內80端口,我們將其映射到外部的8085端口。并且掛載容器路徑下的對應文件夾/文件 到 外部路徑下的對應文件夾/文件,實現二者的映射,這樣,我們通過修改外部文件就可以修改容器內部的配置。最后我們將這個容器的目錄與另一個容器相互共享,這樣一來兩個容器的數據將完全同步。
Docker中的幾個重要組件
一、容器數據卷
數據卷是一個可供容器使用的特殊目錄,它將主機操作系統目錄直接映射進容器(二者的數據是同步的),類似于Linux中的mount操作。
借由數據卷技術,比如我們在使用Mysql時,我們可以保證其儲存的數據不會丟失。
我們通過建立容器時在后面加入-v命令實現掛載
匿名掛載: -v 容器內路徑
具名掛載: -v 卷名:容器內路徑 docker volume inspect 卷名 查看掛載具體信息
路徑掛載: -v 主機路徑:容器內路徑 這里最好使用全路徑避免出錯
容器間掛載: --volume-from 容器名
二、Dockerfile
Dockerfile 是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。
DockerImages是通過DockerFile的定義來生成相應的鏡像。
DockerContainer是為鏡像的運行提供運行環境。
常用Dockerfile關鍵字:
這里給出一個簡單構建Dockerfile的例子:
- 我們建立一個文件夾,里面存放要放入鏡像的內容(如readme.txt),鏡像構造文件(DockerFile)以及想要放入鏡像中的上層鏡像文件。
- 編寫一個簡單Dockerfile
- docker build 構建成為一個鏡像
docker build -f dockerfile -t 新鏡像名:版本號 . -----注意版本號可有可無以及最后要加個點 - docker run 運行鏡像
- docker push 發布鏡像
總結
Dockerfile構建全流程:
三、Docker網絡
虛擬機共享網絡的三種方式
-----如果你想利用VMWare在局域網內新建一個虛擬服務器,為局域網用戶提供網絡服務,就應該選擇橋接模式。
-----如果你想利用VMWare安裝一個新的虛擬系統,在虛擬系統中不用進行任何手工配置就能直接訪問互聯網,建議你采用NAT模式。
-----如果你想利用VMWare創建一個與網內其他機器相隔離的虛擬系統,進行某些特殊的網絡調試工作,可以選擇host-only模式。
Docker共享網絡的四種方式
Docker中建立一個虛擬網絡
docker中所有容器默認加入docker0網絡,即bridge網絡
我們通過docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 net_5yw (使用橋接模式,建立了一個192.168.0.0網段,其中包含65536個子網,同時我們將這個網段的路由設置為192.168.0.1,并為這個網絡命名為net_5yw)
之后,我們就可以通過docker run -d --name tomcatnet02 --net net_5yw 75b0d03def36 (將容器加入指定的網絡,這里如果不聲明,則會默認加入docker0)
這樣做,有助于不同容器集群之間的網絡隔離,提高隔離性與安全性,同時,同一網絡下,我們可以使用容器名直接相互ping通(docker0還是只可以ping IP,只有自己配置的才可以ping容器名),而無需使用–link進行單獨配置。
完成后,我們可以使同一網絡下的容器相互連接(ping通)。
注:tomcatnet03在docker0(172.17.0.0),存在另一網絡net_5yw(192.168.0.0)
docker exec -it tomcatnet03 ping 192.168.0.3 發現無法ping通
如果我們要實現不同網絡相互連接,我們可以通過docker network connect net_5yw tomcatnet03
docker exec -it tomcatnet03 ping 192.168.0.3 此時已經可以ping通
此時,tomcatnet03同時存在于docker0與net_5yw中,并同時擁有兩個網絡下的IP地址。所以可以和兩個網絡下其他所有的容器通信
Docker應用:建立一個redis集群
使用建立好的配置文件在docker中開啟6個redis-server
docker run -d
-p 6376:6379 -p 16376:16379 --name redis06 //配置其映射端口和名稱
-v /home/ostrich5yw/Desktop/DockerMap/Redis/node-6/data:/data //掛載數據庫以及配置文件
-v /home/ostrich5yw/Desktop/DockerMap/Redis/node-6/conf/redis.conf:/etc/redis/redis.conf
–net redisCluster --ip 172.72.0.16 redis redis-server /etc/redis/redis.conf //將其加入建立好的網絡
建立集群
redis-cli --cluster create 172.72.0.11:6379 172.72.0.12:6379 172.72.0.13:6379 172.72.0.14:6379 172.72.0.15:6379 172.72.0.16:6379 --cluster-replicas 1 //末尾參數表示以1的比例劃分主從節點
redis-cli -c //集群模式開啟客戶端
cluster info //查看集群狀態
cluster nodes //查看集群節點
引用
本文根據遇見狂神說的Docker視頻編寫。
總結
以上是生活随笔為你收集整理的Docker知识点总结及其命令的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生活小感想3
- 下一篇: 《软件测试的艺术》读后感及笔记集合