1. 程式人生 > 實用技巧 >Docker的學習第四天

Docker的學習第四天

Docker映象講解

映象是什麼

映象是一種輕量級,可執行的獨立軟體包,用來打包軟體執行環境和基於執行環境開發的軟體,它包含執行某個軟體所需要 的所有內容,包含程式碼、執行時、庫、環境變數和配置檔案。

所有的應用,直接打包成為一個Docker映象,就可以直接執行起來,不需要運維支援。

如何得到映象?

1、從遠端倉庫下載

2、朋友拷貝給你

3、自己製作一個映象 DockerFile

Docker映象載入原理

UnionFS(聯眾檔案系統)

我們下載的時候看到的一層層的就是這個。

UnionFS是一種分層,輕量級並且高效能的檔案系統,它支援對檔案系統的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬檔案系統下,Union檔案系統是Docker映象的基礎,映象可以通過分層來進行繼承,基礎映象(沒有父映象),可以製作各種具體的映象。

特性:一次同時載入多個檔案系統,但從外面看起來,只能看到一個檔案系統,聯合載入會把各層檔案系統疊加起來,這樣最終檔案系統會包含所有底層的檔案和目錄 。

Docker映象載入原理

Docker的映象實際上由一層一起的檔案系統組成,這種層級的檔案系統UnionFS

bootFS(boot file system )主要包含bootloader和kernel,bootloader主要是引導載入kernel,linux剛啟動時會載入bootfs檔案系統,在docker映象的最底層是bootfs,這一層與我們典型的linux/unix系統是一樣的,包含boot載入器和核心,當boot載入完成之後,整個內容就都在記憶體了,此時記憶體的使用權已由bootfs轉交給核心,此時系統也會解除安裝bootfs。

rootfs(root file system)在bootfs之上,包含的就是典型的linux系統中的/dev ,/prod /bin,/etc等標準目錄和檔案,rootfs就是各種不同的作業系統發行版本,比如ubuntu、centos等

對於一個精簡的OS,rootfs可以很小,只需要包含最基本的命令,工具和程式庫就可以了,因為底層直接用Host的kernel,自己只需要提供rootfs就可以了,由此可見對於不同的linux發行版本。

docker映象是隻讀的,當容器啟動時,一個新的可寫層就載入到映象的頂部,這一層就是我們通常說的容器層,容器之下就叫映象層。

如何提交一個映象

docker commit 提交容器成為一個新的副本

#命令和git原理類似

docker commit -m="提交的描述資訊" -a="作者" 容器Id 目標映象名:【Tag版本】

實踐步驟:

1、啟動預設tomcat

2、發現這個預設的tomcat是沒有webapps應用,映象的原因,官方的映象預設webapps下面沒有檔案的

3、拷貝檔案到webapps裡面

4、重新生成一個映象

5、檢視映象

[root@fengfang ~]# docker images    #檢視映象
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              9.0                 b4f6a90c69a4        19 hours ago        647MB
tomcat              latest              b4f6a90c69a4        19 hours ago        647MB
[root@fengfang ~]# docker ps -a    #檢視容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@fengfang ~]# docker run -d -p 8080:8080 --name tomcat02 tomcat   #執行tomcat
485841b533c931ba0c5f65ae4c0a74035f4b2023018e482b640a04ce9d9aed1f
[root@fengfang ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
485841b533c9        tomcat              "catalina.sh run"   3 seconds ago       Up 2 seconds        0.0.0.0:8080->8080/tcp   tomcat02
[root@fengfang ~]# docker exec -it 485841b533c9 /bin/bash
root@485841b533c9:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE    NOTICE    README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@485841b533c9:/usr/local/tomcat# cd webapps
root@485841b533c9:/usr/local/tomcat/webapps# ls
root@485841b533c9:/usr/local/tomcat/webapps# cd ..
root@485841b533c9:/usr/local/tomcat# cp -r webapps.dist/* webapps    #複製檔案
root@485841b533c9:/usr/local/tomcat# cd webapps root@485841b533c9:/usr/local/tomcat/webapps# ls ROOT docs examples host-manager manager root@485841b533c9:/usr/local/tomcat/webapps# read escape sequence [root@fengfang ~]# docker commit -a="aaron" -m="webapps add files " 485841b533c9 tomcat_aaron:1.0 #打包映象 sha256:671de9f0cd4f7900842bd61ae300784089c0a9abc955926b333e4dd688b9833e [root@fengfang ~]# docker images #檢視映象 REPOSITORY TAG IMAGE ID CREATED SIZE tomcat_aaron 1.0 671de9f0cd4f 5 seconds ago 652MB #新打包的映象 tomcat 9.0 b4f6a90c69a4 19 hours ago 647MB tomcat latest b4f6a90c69a4 19 hours ago 647MB [root@fengfang ~]#