0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文帶你讀懂Docker容器 2

jf_78858299 ? 來源:碳峰博客 ? 作者:Tanyongfeng ? 2023-02-03 15:33 ? 次閱讀

四、Docker網(wǎng)絡(luò)

當 Docker 啟動時,會自動在主機上創(chuàng)建一個 docker0 虛擬網(wǎng)橋,實際上是 Linux 的一個 bridge,可以理解為一個軟件交換機。它會在掛載到它的網(wǎng)口之間進行轉(zhuǎn)發(fā)。

同時,Docker 隨機分配一個本地未占用的私有網(wǎng)段中的一個地址給 docker0 接口。它在內(nèi)核層連通了其他的物理或虛擬網(wǎng)卡,這就將所有容器和本地主機都放到同一個物理網(wǎng)絡(luò)。比如典型的 172.17.42.1,掩碼為 255.255.0.0。此后啟動的容器內(nèi)的網(wǎng)口也會自動分配一個同一網(wǎng)段(172.17.0.0/16)的地址。這里,我們可以在主機上執(zhí)行ip addr查看主機ip配置:

圖片

image-20220617211231789

進入某一容器,容器內(nèi)部查看發(fā)現(xiàn)容器IP:發(fā)現(xiàn)其也屬于172.17網(wǎng)段,因此驗證上述的文檔解釋。

圖片

image-20220617212110416

圖片

dockerhost

除bridge方式,Docker還支持host、container、none三種網(wǎng)絡(luò)通信方式,使用其它通信方式,只要在Docker啟動時,指定–net參數(shù)即可。

  • host方式可以讓容器無需創(chuàng)建自己的網(wǎng)絡(luò)協(xié)議棧,而直接訪問宿主機的網(wǎng)絡(luò)接口,在容器中執(zhí)行ip addr會發(fā)現(xiàn)與宿主機的網(wǎng)絡(luò)配置是一樣的,host方式讓容器直接使用宿主機的網(wǎng)絡(luò)接口,傳輸數(shù)據(jù)的效率會更加高效,避免bridge方式帶來的額外開銷,但是這種方式也可以讓容器訪問宿主機的隱私服務(wù),可能會帶來意想不到的安全問題,因此應(yīng)謹慎使用host方式;
  • container方式可以讓容器共享一個已經(jīng)存在容易的網(wǎng)絡(luò)配置;
  • none方式不會對容器的網(wǎng)絡(luò)做任務(wù)配置,需要用戶自己去定制。

外部訪問容器

容器允許外部訪問,可以在 docker run 時候通過 -p-P 參數(shù)來啟用。不管用那種辦法,其實也是在本地的 iptable 的 nat 表中添加相應(yīng)的規(guī)則。

docker run IMAGE_ID -p 8080:8081 #將container的8081端口開放給宿主機的8080端口,通過訪問主機的8080端口就可訪問到container的8081端口

容器訪問外部

容器所有到外部網(wǎng)絡(luò)的連接,源地址都會被 NAT 成本地系統(tǒng)的 IP 地址。這是使用 iptables 的源地址偽裝操作實現(xiàn)的。

從下圖可以看到,對172.18.0.0/16局域網(wǎng)下所有設(shè)備需要訪問外部網(wǎng)絡(luò)的時候,會經(jīng)過NAT地址轉(zhuǎn)換

圖片

image-20220617213113673

五、Docker鏡像構(gòu)建

1. Commit命令

docker commit支持擴展現(xiàn)有鏡像,創(chuàng)建新的鏡像,通常來說,commit命令就是提交容器副本使之成為一個新的鏡像

docker commit -m="提交的描述信息"  -a="作者" 容器ID 要創(chuàng)建的目標鏡像名:[標簽名]

2. Dockerfile構(gòu)建

Dockerfile也是生成Docker鏡像的一種重要手段,也是常用的手段。它是一個文本文件,其中包含我們需要運行以構(gòu)建 Docker 映像的所有命令。

Docker commit是通過增強原有鏡像基礎(chǔ)上,重新安裝新功能。

Dockerfile, 本鏡像需要一次性添加所有所需的依賴鏡像

  1. 編寫Dockerfile文件
  2. 執(zhí)行Docker build構(gòu)建鏡像
  3. docker run啟動鏡像

構(gòu)建流程

  1. docker從基礎(chǔ)鏡像運行一個容器
  2. 執(zhí)行一條指令并對容器做出修改
  3. 執(zhí)行類似docker commit的操作提交一個新的鏡像層
  4. docker再基于剛提交的鏡像運行一個新容器
  5. 執(zhí)行dockerfile中的下一條指令直到所有指令都執(zhí)行完成

生動概括:dockerfile(中藥單子)–> images(中藥) —> docker container(藥湯)

六、Docker數(shù)據(jù)管理

Docker分層,聯(lián)合文件系統(tǒng)。Docker由于是基于Linux上運行的,因此 底層直接使用Host的kernel ,自己需要提供rootfs就可以了。不同的發(fā)行版本由于bootfs基本上是一致的,但是rootfs會有差別,因此不同的發(fā)行版可以公用bootfs。

1. 文件卷的作用

將Docker容器中的數(shù)據(jù)保存進宿主機中磁盤系統(tǒng)。也就是對數(shù)據(jù)的要求是持久化的。如果容器實例刪除之后,容器內(nèi)的數(shù)據(jù)自然就沒有了。

因此Docker容器內(nèi)部的數(shù)據(jù)可以備份+持久化到本地主機目錄

docker run -it --privileged=true  -v 宿主機目錄:Docker目錄 鏡像名
  1. 數(shù)據(jù)卷可以在容器之間或者宿主機與容器之間共享數(shù)據(jù)
  2. 可以對容器里面的數(shù)據(jù)進行持久化或者備份
  3. 更好的管理文件
docker inspect 容器名 #查看容器詳情

可以看到Docker Mounts下會計到自己掛載的路徑規(guī)則

圖片

image-20220615200042582

2. 容器卷的繼承

docker run -it --privileged=true  --volumes-from 容器父類名 --name  容器名

子容器集成父容器的掛載規(guī)則,如果父容器被kill或者stop,不會影響子容器的規(guī)則。

心中無女人,編碼自然神,忘掉心上人,抬手滅紅塵

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開源軟件
    +關(guān)注

    關(guān)注

    0

    文章

    208

    瀏覽量

    15850
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3544

    瀏覽量

    93470
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    446

    瀏覽量

    11774
收藏 人收藏

    評論

    相關(guān)推薦

    帶你搞懂Docker容器的核心基石Cgroups

    可以限制、記錄任務(wù)組所使用的物理組員(比如 CPU、Memory、IO等),為容器實現(xiàn)虛擬化提供了基本保證,是構(gòu)建 Docker些列虛擬化管理工具的基石。今天我們就來詳細介紹
    發(fā)表于 11-24 09:54 ?563次閱讀

    帶你入門Docker容器

    docker不是個值得投入的領(lǐng)域,它解決的問題是Unix系統(tǒng)最初設(shè)計的個疏忽。從個不會用docker的小白,自己
    發(fā)表于 06-05 14:44 ?505次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>帶你</b>入門<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>

    如何使用 Docker容器化技術(shù)

    對于開發(fā)人員來說,Docker肯定都不陌生,今天小編帶大家重新學習Docker。 什么是 Docker 官話: Docker
    的頭像 發(fā)表于 09-30 11:24 ?1.6w次閱讀

    ARM平臺實現(xiàn)Docker容器技術(shù)

    T113-i工業(yè)核心板在支持Docker后,其性價比還將進步提升!圖2基于T113-i平臺實現(xiàn)Docker容器技術(shù) 如下為基于全志T113
    發(fā)表于 07-17 11:05

    如何在Docker中創(chuàng)建容器

    Docker個開源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建個輕量級的、可移植的、自給自足的容器。開發(fā)者在筆記本上編譯測試通過的容器可以批量地在
    發(fā)表于 01-03 15:58

    理解Docker容器并暢玩docker

    ,不要這么快就搞死它。-----------然后我們在另個命令行中執(zhí)行另個命令docker run -it --name a2 alpine另
    發(fā)表于 11-05 09:54

    讀懂什么是NEC協(xié)議

    讀懂什么是NEC協(xié)議?
    發(fā)表于 10-15 09:22

    WSL2Docker容器之間相互遷移的教程

    :上面提到的“容器”,實際上是安全的(即:虛機),WSL2內(nèi)部架構(gòu)如下:雖然 WSL Docker 很像,但它對 WSL 鏡像有應(yīng)用,就是得從 MS 的商店下載:這個就有點顯不那么顯眼了,其實你這里
    發(fā)表于 03-17 15:13

    Docker容器管理命令()

    1、Docker容器管理命令的使用方法查看當前主機本地docker鏡像:啟動容器必須依賴鏡像,所以要獲取到鏡像的唯標識
    發(fā)表于 04-20 17:55

    Docker容器管理命令(二)

    1、Docker容器管理命令的使用方法批量刪除docker 容器docker cp命令docker
    發(fā)表于 04-21 11:31

    帶你讀懂Docker容器 1

    Docker** 是個開源軟件,用于開發(fā)應(yīng)用、交付應(yīng)用、運行應(yīng)用。 Docker允許用戶將基礎(chǔ)設(shè)施中的應(yīng)用單獨分割出來,形成更小的顆粒(容器),從而提高交付軟件的速度。
    的頭像 發(fā)表于 02-03 15:33 ?706次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>帶你</b><b class='flag-5'>讀懂</b><b class='flag-5'>Docker</b><b class='flag-5'>容器</b> 1

    帶你讀懂Docker容器 3

    Docker** 是個開源軟件,用于開發(fā)應(yīng)用、交付應(yīng)用、運行應(yīng)用。 Docker允許用戶將基礎(chǔ)設(shè)施中的應(yīng)用單獨分割出來,形成更小的顆粒(容器),從而提高交付軟件的速度。
    的頭像 發(fā)表于 02-03 15:34 ?575次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>帶你</b><b class='flag-5'>讀懂</b><b class='flag-5'>Docker</b><b class='flag-5'>容器</b> 3

    讀懂,什么是BLE?

    讀懂,什么是BLE?
    的頭像 發(fā)表于 11-27 17:11 ?1996次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>讀懂</b>,什么是BLE?

    docker容器容器之間通信

    Docker種輕量級容器化技術(shù),能夠?qū)?yīng)用程序及其依賴項封裝在個獨立、可移植的容器中。而容器
    的頭像 發(fā)表于 11-23 09:36 ?1340次閱讀

    docker進入容器的方法有哪些

    Docker種流行的容器化平臺,它能夠快速構(gòu)建、交付和運行應(yīng)用程序。在使用Docker時,我們經(jīng)常需要進入容器進行調(diào)試、管理和運行命令等
    的頭像 發(fā)表于 11-23 09:45 ?9958次閱讀