Docker學習相關視頻筆記(三)

參考視頻地址:40分鐘的Docker實戰攻略,一期視頻精通Docker。感謝作者的辛苦付出。
本文是Docker學習相關視頻筆記(一)與Docker學習相關視頻筆記(二)的后續

4、Docker命令

4.8 Docker 網絡

4.8.1 橋接模式

docker網絡默認是bridge,也就是橋接模式,所有的容器默認都連接到這個網絡,每個容器都分配了一個內部IP地址,一般是172.17開頭的,在這個內部子網里面,容器可以通過內部IP地址互相訪問,但容器網絡與宿主機的網絡是隔離的,
在這里插入圖片描述
我們可以使用docker network create創建出子網,默認情況下創建出來的子網,也是屬于橋接模式的一種,然后可以指定容器加入不同的子網,同一個子網的容器可以互相通信,而跨子網則不可以通信。
在這里插入圖片描述

創建子網,還有一個好處是,同一個子網的容器,可以使用容器的名字互相訪問,而不必使用內部IP地址。
在這里插入圖片描述
我們來試一下,首先第一個命令創建一個叫做network1的子網,第二個命令創建并且運行一個MONGODB的容器,我們看到這里使用–network指定它加入子網一,啟動MONGODB的時候,沒有使用-p參數進行端口映射,也就是使用宿主機是沒法訪問到這個MONGODB的,我們先把它啟動起來,
在這里插入圖片描述
接下來啟動一個叫做mongo express的容器,這個容器就是MONGODB的網頁客戶端,同樣的把它加入到子網一里面,因為跟MONGODB屬于同一個子網,所以它們之間是可以互相訪問的,mongo express上面做了端口映射,我們注意到這里傳了一個環境變量,這里沒有傳數據庫容器在子網的IP地址,而是直接把名字告訴了他。
在這里插入圖片描述
在瀏覽器輸入服務器的IP地址,端口8081,
在這里插入圖片描述
第一次訪問的時候要登錄一下,
在這里插入圖片描述
這樣成功登錄進來,
在這里插入圖片描述
我們可以創建數據庫,數據庫里面可以做查詢,可以做新增等等等等的功能。
我們來看一下網絡的拓撲結構,兩個容器分配在同一個子網里面,它們可以互相通信,這里注意到我啟動第二個容器mongo express的時候,沒有告訴第二個容器,關于第一個容器在子網里面的IP地址,而是僅僅告訴了他第一個容器的名字,借助于docker內部的DNS機制,通過名字就可以在子網內進行互相的訪問。
在這里插入圖片描述
在這里插入圖片描述
我們來看一下它的效果,這里我進入到第二個容器mongo express里面,然后在容器里面執行這個命令,ping后面接的是第一個容器的名字,我們看到這里打印出來了第一個容器的IP地址,換句話說,docker子網內部有一個DNS機制,可以把名字轉換成IP地址。
在這里插入圖片描述
接下來我又做了一個端口映射,讓瀏覽器可以訪問到mongo express,然后mongo express又可以通過內部子網訪問到MONGODB,這樣達成最終的效果,這樣我們就看到了默認的橋接模式,還有創建子網的橋接模式。
在這里插入圖片描述

4.8.2 host模式

接下來我們看另外一種網絡模式,另外一種常見的網絡是host模式,docker容器直接共享宿主機的網絡,容器直接使用宿主機的IP地址,而且無需-p參數進行端口映射,容器內的服務直接運行在宿主機的端口上,通過宿主機的IP和端口就能訪問到容器,host模式可以解決一些非常棘手的網絡問題。
在這里插入圖片描述
我們來使用host模式啟動一個nginx,這里在啟動參數加上–network,后面host,我們沒有進行端口映射
在這里插入圖片描述
在瀏覽器直接訪問服務器的IP地址,加端口80就可以訪問到Nginx,
在這里插入圖片描述
我們進入容器內看一下它的IP地址,在容器內部查看IP地址,
在這里插入圖片描述
我們需要裝一些工具,首先apt update,然后裝這個工具,apt install ip router2,然后就可以查IP地址了,ip addr show,
在這里插入圖片描述
我們看到容器內顯示的IP地址,主要是這個內網IP地址,跟我在云服務器的控制面板上看的內網IP地址,是一模一樣的。從這個例子可以看出,docker容器使用host模式,它直接共享了宿主機的網絡空間。

4.8.2 host模式

最后一種docker網絡是None模式,也就是不聯網,
在這里插入圖片描述
docker network list展示出所有docker網絡,首先有默認的橋接模式,host模式,還有None模式,最后一個是我們剛才創建的子網,當然這個子網也是屬于橋接網絡的一種,這三種默認網絡是不能刪除的,我們可以使用命令docker network remove命令,刪除自定義的子網,比如把它刪除掉,再使用list命令就看不到剛才的子網了。
在這里插入圖片描述

4.9 Docker compose

有些時候,一個完整的應用可能是很多部分組成的,比如前端后端數據庫等等,這時候怎么用docker把它們容器化呢,我們可以很自然的想到,把這些模塊都打包在一起,做成一個巨大的容器。但這樣只要有一個模塊發生了故障,比如后端出現了內存泄漏,整個容器都有可能崩潰,并且可伸縮性差。如果想給系統擴容,只能把整個大容器再復制一份,而做不到針對某和模塊的精準性擴容,多應用的最佳實踐是,把每一個模塊都打包成一個獨立的容器,不過這樣使用多容器增加了很多的使用成本,因為我們想創建多個容器,就得多次執行docker run,還得把它們之間的網絡配置好,嘗試管理這些容器的時候,很多地方都會出錯,這時候一個容器編排技術就很有用,也就是docker compose。
docker compose使用YML文件管理多個容器,里面列出了容器之間是如何創建,以及如何協同工作的,我們可以簡單的把docker compose文件理解成,一個或者多個的docker run命令,按照特定的格式列到了一個文件里面。
在這里插入圖片描述
這是剛才視頻里面展示的,使用docker命令創建MONGOD,比喻mongo express的例子,我們先創建一個子網,然后創建mongo dB和mongo express兩個容器,并且把它們加入子網,右側展示出的是對應的docker compose文件的寫法,左右兩邊有非常工整的對應關系。
右側最頂級的是services元素,每個服務也就是一個service都對應一個容器,左側的杠杠內幕,也就是容器名在右側就變成了service名,左側的鏡像名在右側寫在了image后面,也表示鏡像名,接下來左邊的杠E參數對應右邊的environment,都是環境變量的意思,左側的杠V對應右側的volume,也就是掛載卷,左側的杠P對應右邊的pose,也就是端口映射,左右兩邊唯一一點區別,就是左邊自定義了一個子網network1而右邊沒有,因為docker會為每一個compose文件,都自動創建一個子網,同一個compose文件里面,定義的所有容器都會自動加入同一個子網,不用我們操心。
docker compose 還有一個額外功能是,可以自定義容器的啟動順序,比如我們可以在mongo express下面加上depend on,他的意思是這個mongo express容器依賴數據庫,所以程序會先把mongo dB的容器啟動起來,再去啟動mongo express的容器。
在這里插入圖片描述
在AI時代也不用我們寫docker compose文件了,我們只需要把想要執行的docker命令告訴AI,然后讓它生成一個等價的docker compose文件就可以了。
在這里插入圖片描述
我們來實戰一下,首先使用vi命令,在服務器上創建一個docker compose文件,
在這里插入圖片描述
把文件內容粘貼過來保存一下,
在這里插入圖片描述
然后我們執行docker compose up,這樣就是啟動這個文件里面定義的所有容器,同樣的我們可以在后面接杠D讓它在后臺運行,我們看到這個命令做了兩件事,首先他創建了一個子網,然后創建了兩個容器,這個容器的名字跟我們在compose文件里面,定義的service名字不太一樣,它在前面加了一個前綴,還加了一個編號,用來更加方便的管理,我們執行docker PS命令,可以看到正在運行的容器.
在這里插入圖片描述
在瀏覽器訪問服務器的IP地址加端口8081。看到mongo express就在正常運行了,我們可以新增數據庫等等做各種操作。
在這里插入圖片描述
剛才我們看了compose up命令,與它相反的就是compose down,這個命令會停止并且刪除容器,
在這里插入圖片描述
我們使用docker ps -a看到容器不但被停止了,也被刪除了。如果我們只想停止,但是不想刪除容器,我們可以執行docker compose stop命令,這個命令只停止不刪除,然后我們執行docker compose start命令,就可以把剛才stop命令停止的容器再啟動起來。
在這里插入圖片描述
如果容器已經在運行了,我們重復執行compose up命令,并不會啟動新的容器,它沒有任何的效果,我們執行docker compose命令的時候,它會自動識別當前目錄,下面嚴格叫做docker compose的這個文件,如果我們把這個文件改一個名字,讓它變成一個非標準的文件名,這樣再使用docker compose命令,它就識別不到了,對于這種非標準的文件名,我們可以在docker compose后面接一個杠F,杠F指的是file,也就是指定文件名,接下來我們把非標準的文件名指定給它,當然這個文件名也可以在其他的目錄下面,使用杠F命令就可以識別到對應的文件好,docker compose的內容就這么多,還是非常容易掌握的。
在這里插入圖片描述
docker compose是一個輕量級的容器編排技術,它適合個人使用單機運行,對于企業級服務器集群大規模的容器編排需求,那就需要另外一個軟件Kubernetes登場,Kubernetes的功能非常的復雜,這個有機會我們再聊。

5、總結

本期視頻我們
(1)先介紹了docker的核心概念,主要有容器鏡像,還有鏡像倉庫
(2)演示了如何在linux windows,還有Mac電腦上安裝docker,
(3)使用docker pull命令下載鏡像,以及如何配置鏡像站,解決下載鏡像的網絡問題
(4)接下來我們使用docker run命令創建并且運行了容器,介紹了docker run命令的幾個重要參數:-p端口映射,-v掛載卷,-e設置環境變量等等,
(5)接下來介紹了如何進入容器內部進行調試,然后我們還看了docker的幾種網絡,分別是bridge模式,創建子網,host模式與NN模式,
(6)我們學習了什么是docker file,如何使用docker file創建鏡像,以及如何把鏡 像推送到docker hub上面,
(7)視頻的最后,我們還介紹了一種輕量級的容器編排技術,Docker compose

這就是本期視頻的全部內容了。

參考視頻地址:40分鐘的Docker實戰攻略,一期視頻精通Docker。感謝作者的辛苦付出。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91404.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91404.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91404.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RK3568筆記九十五:基于FFmpeg和Qt實現簡易視頻播放器

若該文為原創文章,轉載請注明原文出處。 一、開發環境 1、硬件:正點原子ATK-DLRK3568 2、QT: 5.14.2 3、系統: buildroot 二、實現功能 使用ffmpeg音視頻庫軟解碼實現視頻播放器 支持打開多種本地視頻文件(如mp4,mov,avi等) 視頻播放支持實時開始,暫停,繼續播放 采…

【LLM】Kimi-K2模型架構(MuonClip 優化器等)

note Kimi K2 的預訓練階段使用 MuonClip 優化器實現萬億參數模型的穩定高效訓練,在人類高質量數據成為瓶頸的背景下,有效提高 Token 利用效率。MuonClip Optimizer優化器,解決隨著scaling up時的不穩定性。Kimi-K2 與 DeepSeek-R1 架構對比…

Vue基礎(25)_組件與Vue的內置關系(原型鏈)

了解組件與Vue的內置關系前,我們需要回顧js原型鏈基礎知識:1、構造函數構造函數是一種特殊的方法,用于創建和初始化一個新的對象。它們是使用 new 關鍵字和函數調用來創建對象的。構造函數實際上只是一個普通的函數,通常以大寫字母…

kafka中生產者的數據分發策略

在 Kafka 中,生產者的數據分發策略決定了消息如何分配到主題的不同分區。在 Python 中,我們通常使用 kafka-python 庫來操作 Kafka,下面詳細講解其數據分發策略及實現代碼。一、Kafka 生產者數據分發核心概念分區(Partition&#…

【動態規劃算法】斐波那契數列模型

一. (1137.)第N個泰波那契數(力扣)1.1動態規劃的算法流程 對于初學者來講學術上的概念晦澀難懂,將用通俗易懂的方式帶來感性的理解. 1.狀態表示dp表(一維或二維數組)里面的值所表示的含義 從哪獲取? 1.題目要求,如本題 2.題目沒有明確說明的情況下做題經驗的累積 3.分析問題的…

Odoo 18 PWA 全面掌握:從架構、實現到高級定制

本文旨在對 Odoo 18 中的漸進式網絡應用(Progressive Web App, PWA)技術進行一次全面而深入的剖析。本文的目標讀者為 Odoo 技術顧問、高級開發人員及解決方案架構師,旨在提供一份權威的技術參考,以指導 PWA 相關的實施項目與戰略…

Binary Classifier Optimization for Large Language Model Alignment

2025.acl-long.93.pdfhttps://aclanthology.org/2025.acl-long.93.pdf 1. 概述 在生產環境中部署大型語言模型(LLMs)時,對齊LLMs一直是一個關鍵因素,因為預訓練的LLMs容易產生不良輸出。Ouyang等人(2022)引入了基于人類反饋的強化學習(RLHF),該方法涉及基于單個提示的…

在CentOS上以源碼編譯的方式安裝PostgreSQL

下載目錄:PostgreSQL: File Browser,我使用的PostgreSQLv17.5。Linux系統:CentOS Linux release 7.9.2009 (Core) 安裝依賴包和工具鏈(必須且重要!) yum groupinstall "Development Tools" -y yu…

Baumer工業相機堡盟工業相機如何通過YoloV8深度學習模型實現沙灘小人檢測識別(C#代碼UI界面版)

Baumer工業相機堡盟工業相機如何通過YoloV8深度學習模型實現沙灘小人檢測識別(C#代碼UI界面版)工業相機使用YoloV8模型實現沙灘小人檢測識別工業相機通過YoloV8模型實現沙灘小人檢測識別的技術背景在相機SDK中獲取圖像轉換圖像的代碼分析工業相機圖像轉換…

Ubuntu服務器安裝與運維手冊——操作純享版

本手冊匯總了從硬件預配置、Ubuntu 安裝、網絡與服務配置,到 Windows/macOS 訪問共享、MySQL 初始化的完整流程,便于今后運維參考。 目錄 環境與硬件概覽BIOS/UEFI 設置制作與啟動安裝介質Ubuntu 24.04 LTS 安裝流程靜態 IP 配置(netplan&am…

【Nginx】Nginx進階指南:解鎖代理與負載均衡的多樣玩法

在Web服務的世界里,Nginx就像是一位多面手,它不僅能作為高性能的Web服務器,還能輕松勝任代理服務器、負載均衡器等多種角色。今天,我們就來深入探索Nginx的幾個常見應用場景,通過實際案例和關鍵配置解析,帶…

原創-銳能微82xx系列電能計量芯片軟件驅動開發與精度校準流程完全指南

引言 電能計量芯片的軟件驅動開發是整個計量系統的核心,它直接決定了計量精度、系統穩定性和功能完整性。銳能微82xx系列電能計量芯片憑借其強大的數字信號處理能力和豐富的功能特性,為開發者提供了靈活的軟件開發平臺。本文將詳細介紹82xx系列芯片的軟…

如何使用 Apache Ignite 作為 Spring 框架的緩存(Spring Cache)后端

這份文檔是關于 如何使用 Apache Ignite 作為 Spring 框架的緩存(Spring Cache)后端,實現方法級別的緩存功能。 這和前面我們講的 Spring Data Ignite 是兩個不同的概念。我們先明確區別,再深入理解。🔁 一、核心區別…

Android 超大圖片、長圖分割加載

在Android開發中,處理大圖片的加載是一個常見且重要的問題,尤其是在需要顯示高分辨率圖片時。大圖片如果不正確處理,可能會導致內存溢出或應用性能下降。下面是一些常用的策略和技術來優化大圖片的加載:1. 使用圖片壓縮庫a. Glide…

Linux:理解操作系統

文章目錄數據流動操作系統數據流動 軟件運行,必須先加載到內存,本質要把磁盤上的文件 加載到內存。 我們寫的算法是處理存儲器里面的數據,數據就是文件,我們自己寫的可執行文件。 圖中QQ就是軟件,加載內存后進行下一步…

【每日一錯】PostgreSQL的WAL默認段大小

文章目錄題目擴展學習WAL工作原理流程圖題目 擴展學習 WAL(Write Ahead Log)預寫日志: WAL是PostgreSQL先寫日志、后寫數據的機制,用來防止數據丟失、提升數據恢復能力。 流程: 事務先寫日志文件(WAL&…

Visual Studio Code 使用指南 (2025年版)

Visual Studio Code (VS Code) 是一款由微軟開發的免費、開源、跨平臺的現代化輕量級代碼編輯器,憑借其強大的核心功能、豐富的擴展生態系統以及高度可定制性,已成為全球數百萬開發者的首選工具。本指南旨在幫助您快速上手 VS Code,掌握其核心…

【Java】JVM虛擬機(java內存模型、GC垃圾回收)

一、Java內存模型(JMM)JMM(Java Memory Model,Java 內存模型)是 Java 虛擬機規范中定義的一種抽象概念,用于規范 Java 程序中多線程對共享內存的訪問規則,解決可見性、原子性和有序性問題&#…

二叉樹算法之【二叉樹的層序遍歷】

目錄 LeetCode-102題 LeetCode-102題 給定二叉樹的根節點root&#xff0c;返回其節點值的層序遍歷&#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 class Solution {public List<List<Integer>> levelOrder(TreeNode root) {// checkif (r…

uniapp+vue3——通知欄標題縱向滾動切換

介紹 取巧&#xff0c;使用縱向輪播實現 <!-- 通知欄 --> <view class"noticeBox" v-if"notice.length>0"><image src"/static/images/index/noticeIcon.png" mode"aspectFill"></image><swiper class&…