1. 程式人生 > 實用技巧 >Day-2 Java基礎語法

Day-2 Java基礎語法

目錄

是什麼?

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

UnionFS(聯合檔案系統)

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

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

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, /proc, /bin, /etc 等標準目錄和檔案。rootfs就是各種不同的作業系統發行版,比如Ubuntu,Centos等等。

平時我們安裝進虛擬機器的CentOS都是好幾個G,為什麼docker這裡才200M??

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

分層的映象

以我們的pull為例,在下載的過程中我們可以看到docker的映象好像是在一層一層的在下載

為什麼 Docker 映象要採用這種分層結構呢

最大的一個好處就是 - 共享資源

比如:有多個映象都從相同的 base 映象構建而來,那麼宿主機只需在磁碟上儲存一份base映象,
同時記憶體中也只需載入一份 base 映象,就可以為所有容器服務了。而且映象的每一層都可以被共享。

特點

  • Docker映象都是隻讀的
  • 當容器啟動時,一個新的可寫層被載入到映象的頂部。
  • 這一層通常被稱作“容器層”,“容器層”之下的都叫“映象層”。

Docker映象commit操作補充

  • docker commit提交容器副本使之成為一個新的映象

  • docker commit -m=“提交的描述資訊” -a=“作者” 容器ID 要建立的目標映象名:[標籤名]

  • 案例演示:

  1. 從Hub上下載tomcat映象到本地併成功執行
docker run -it -p 8080:8080 tomcat

-p 主機埠:docker容器埠
-P 隨機分配埠
i:互動
t:終端


也可以是自定義不同的埠,前提是這個埠是放行的狀態:

docker run -it -p 8888:8080 tomcat


  • 隨機埠測試:
docker run -it -P tomcat

這個時候按 ctrl+p+q(容器不停止退出),docker ps 隨機分配的埠號是多少:


這個時候如果開啟了上面的埠號就可以訪問到tomcat主頁了

  1. 故意刪除上一步映象生產tomcat容器的文件(我這裡把docs移到上一個tomcat資料夾中)
docker ps
docker exec -it 8bd38f662a41 /bin/bash
mv docs/ /usr/local/tomcat/


此時再訪問埠8888,tomcat文件沒有了


3. 也即當前的tomcat執行例項是一個沒有文件內容的容器,以它為模板commit一個沒有doc的tomcat新映象atguigu/tomcat02atguigu為名稱空間

docker search 查詢映象時前面有空間名

docker search tomcat 

  • 案例:把tomcat8.5映象中移動docx,重新提交一個沒有docx的tomcat映象,並且命名為xdr/tomcat8.5:1.0,版本標籤為1.0 ,作者為xdr630
docker commit -a="xdr630" -m="mv tomcat docx" 52992cd8b22b xdr630/tomcat8.5:1.0


把正在執行的容器全部刪除:

docker rm -f $(docker ps -q)


啟動剛才自己命名的tomcat的新的映象

docker run -it -p 8888:8080 xdr630/tomcat8.5:1.0

這裡注意的是啟動時必須帶標籤,不寫標籤就是預設的latest版本。
訪問8888埠,開啟docx文件還是不存在

  1. 啟動我們的新映象並和原來的對比
  • 啟動atguigu/tomcat02,它沒有docs

    新啟動原來的tomcat,它有docs
  • 案例:從阿里雲pull一個新的tomcat映象,這個時候沒有帶TAG標籤,表示tomcat版本是latest,所以本地沒有又去阿里雲上pull一個新的tomcat映象
docker run -it -p 8888:8080 tomcat


這個時候訪問Tomcat時出現404錯誤,可以訪問我另外一篇怎麼解決:https://blog.csdn.net/qq_41684621/article/details/105640581
這裡也說明一下解決的辦法:

接著就可以正常訪問了:

這個時候在訪問下docx文件


這個案例說明本地的映象可以通過修改成一個新的映象,就可以自定義屬於自己的映象了

docker images

  • tomcat以後臺啟動的方式啟動

-d 引數是讓tomcat容器在後臺執行

docker run -d -p 7777:8080 tomcat


這個時候訪問7777埠還是跟 docker run -it 映象名或ID 啟動時結果一樣的