【Docker】容器數據持久化及容器互聯

容器數據持久化及容器互聯

  • 一、Docker容器的數據管理
    • 1.1、什么是數據卷
    • 1.2、數據卷特點
    • 1.3、數據卷使用
  • 二、Docker的數據卷容器
    • 2.1、什么是數據卷容器
    • 2.2、掛載數據卷容器方法
  • 三、Docker數據卷的備份和還原
    • 3.1、數據備份方法
    • 3.2、數據還原方法
  • 四、Docker容器互聯
    • 4.1、docker 容器的網絡基礎
    • 4.2、docker 容器的互聯
  • 五、Docker容器的網絡模式
    • 5.1、None模式
    • 5.2、Container模式
    • 5.3、Bridge模式
    • 5.4、Host模式

一、Docker容器的數據管理

1.1、什么是數據卷

  • 數據卷是經過特殊設計的目錄,可以繞過聯合文件系統(UFS),為一個或者多個容器提供訪問,數據卷設計的目的,在于數據的永久存儲,它完全獨立于容器的生存周期。
  • 因此,docker不會在容器刪除時刪除其掛載的數據卷,也不會存在類似的垃圾收集機制,對容器引用的數據卷進行處理,同一個數據卷可以只支持多個容器的訪問。

1.2、數據卷特點

  • 數據卷在容器啟動時初始化,如果容器使用的鏡像在掛載點包含了數據,這些數據會被拷貝到新初始化的數據卷中
  • 數據卷可以在容器之間共享和重用
  • 可以對數據卷里的內容直接進行修改
  • 數據卷的變化不會影像鏡像的更新
  • 卷會一直存在,即使掛載數據卷的容器已經被刪除

1.3、數據卷使用

【1】為容器添加數據卷

docker run -v 宿主機目錄:/容器目錄 -it centos /bin/bash  # 目錄沒有會自動創建
# Eg:
docker run -v /datavolume:/data -it centos /bin/bash
docker run --name volume1 -v ~/datavolume1:/data:ro -itd centos  /bin/bash
# 添加只讀權限之后在docker容器的/data目錄下就不能在創建文件了,為只讀權限;在宿主機下的/datavolume1下可以創建東西

【2】使用dockerfile構建包含數據卷的鏡像

# dockerfile指令:volume[“/data”]cat  dockerfile
FROM centos
VOLUME ["/datavolume3","/datavolume6"]
CMD /bin/bash# 使用如下構建鏡像
docker build -t="volume" .# 啟動容器
docker run --name volume-dubble -it volume
# 會看到這個容器下有兩個目錄,/datavolume3和/datavolume6

二、Docker的數據卷容器

2.1、什么是數據卷容器

命名的容器掛載數據卷,其他容器通過掛載這個容器實現數據共享,掛載數據卷的容器,就叫做數據卷容器

2.2、掛載數據卷容器方法

docker run --volumes-from [container name]
# 舉例:
# 1、運行容器(volume這個鏡像是上面創建的帶兩個數據卷/datavolume3和/ddatavolume6的鏡像)
docker run --name data-volume -itd volume
# 2、進入容器,創建文件后退出容器
docker exec -it data-volume /bin/bash #(進入到容器中)
touch /datavolume6/lucky.txt
# 3、創建一個新容器掛載剛才data-volume這個容器創建的數據卷
docker run --name data-volume2 --volumes-from  data-volume -itd centos /bin/bash
# 4、進入到新創建的容器
docker exec -it data-volume2 /bin/bash
# 5、查看容器的/datavolume6目錄下是否新創建了lucky.txt文件
cd /datavolume6

三、Docker數據卷的備份和還原

3.1、數據備份方法

docker run  --volumes-from [container name] -v $(pwd):/backup centos tar czvf /backup/backup.tar [container data volume]

舉例:

docker run --volumes-from data-volume2  \
-v  /root/backup:/backup \  
--name datavolume-copy centos \
tar zcvf /backup/data-volume2.tar.gz /datavolume6  
# 將容器中的/datavolume6 備份到/backup下,命名為data-volume2.tar.gz

3.2、數據還原方法

docker run --volumes-from [container name] -v $(pwd):/backup centos tar xzvf /backup/backup.tar.gz [container data volume]

舉例:

# 進入容器,刪除文件
docker exec -it data-volume2 /bin/bash
cd /datavolume6
rm -rf lucky.txt
# 創建容器,將之前備份的文件拷貝解壓到/datavolume6
docker run --volumes-from data-volume2 \
-v /root/backup/:/backup \
centos tar zxvf /backup/data-volume2.tar.gz -C /datavolume6
# 可以看到還原后的數據
docker exec -it data-volum2 /bin/bash
cd /datavolum6

四、Docker容器互聯

4.1、docker 容器的網絡基礎

1】、docker0:
安裝docker的時候,會生成一個docker0的虛擬網橋

2】、Linux虛擬網橋的特點:
可以設置ip地址
相當于擁有一個隱藏的虛擬網卡

docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:28:ae:c0:42 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft forever
inet6 fe80::42:28ff:feae:c042/64 scope link

每運行一個docker容器都會生成一個veth設備對,這個veth一個接口在容器里,一個接口在物理機上。

3】、安裝網橋管理工具:

yum install bridge-utils -y

brctl show 可以查看到有一個docker0的網橋設備,下面有很多接口,每個接口都表示一個啟動的docker容器,因為我在docker上啟動了很多容器,所以interfaces較多,如下所示:
在這里插入圖片描述

4.2、docker 容器的互聯

下面用到的鏡像的dockerfile文件如下:

cd dockerfile/inter-image
vim dockerfile
FROM centos
RUN rm -rf /etc/yum.repos.d/*
COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/
RUN yum install wget -y
RUN yum install nginx -y
RUN sed -i "7s/^/#/g" /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD /bin/bash[root@xianchaomaster1]# docker build -t="inter-image" .

允許所有容器間互聯(也就是訪問)

第一種方法:

#(1)基于上面的inter-image鏡像啟動第一個容器test1
docker run --name test1 -itd inter-image
#進入到容器里面啟動nginx:
/usr/sbin/ngnx#(2)基于上面的inter-image鏡像啟動第二個容器test2
docker run --name test2 -itd inter-image#(3)進入到test1容器和test2容器,可以看兩個容器的ip,分別是172.17.0.20和172.17.0.21
docker exec -it test2 /bin/bash
ping 172.17.0.20 # 可以看見能ping同test1容器的ipcurl http://172.17.0.20 # 可以訪問到test1容器的內容

上述方法假如test1容器重啟,那么在啟動就會重新分配ip地址,所以為了使ip地址變了也可以訪問可以采用下面的方法

第二種方法: docker link設置網絡別名
可以給容器起一個代號,這樣可以直接以代號訪問,避免了容器重啟ip變化帶來的問題

docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE][COMMAND]

# 1.啟動一個test3容器
docker run --name test3 -itd inter-image /bin/bash# 2.啟動一個test5容器,--link做鏈接,那么當我們重新啟動test3容器時,就算ip變了,也沒關系,我們可以在test5上ping別名webtest
docker run --name test5 -itd --link=test3:webtest inter-image /bin/bash# 3.test3和test5的ip分別是172.17.0.22和172.17.0.24# 4.重啟test3容器
docker restart test3 # 發現ip變成了172.17.0.25# 5.進入到test5容器 
docker exec -it test5 /bin/bashping test3容器的ip別名webtest可以ping通,盡管test3容器的ip變了也可以通

五、Docker容器的網絡模式

docker run創建Docker容器時,可以用–net選項指定容器的網絡模式,Docker有以下4種網絡模式:
? bridge模式:使–net =bridge指定,默認設置;
? host模式:使–net =host指定;
? none模式:使–net =none指定;
? container模式:使用–net =container:NAME orID指定。

5.1、None模式

Docker網絡none模式是指創建的容器沒有網絡地址,只有lo網卡。

--privileged=true 開啟容器特權模式

[root@xianchaomaster1 ~]# docker run -itd  --name none --net=none --privileged=true centos  
[root@xianchaomaster1 ~]# docker exec -it none /bin/bash
[root@05dbf3f2daaf /]# ip addr
# 只有本地lo地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever# 可以自己分配ip,而不是動態分配ip

5.2、Container模式

Docker網絡container模式是指,創建新容器的時候,通過–net container參數,指定其和已經存在的某個容器共享一個 Network Namespace。如下圖所示,右方黃色新創建的container,其網卡共享左邊容器。因此就不會擁有自己獨立的 IP,而是共享左邊容器的 IP 172.17.0.2,端口范圍等網絡資源,兩個容器的進程通過 lo 網卡設備通信。

在這里插入圖片描述

#和已經存在的none容器共享網絡
[root@xianchaomaster1 ~]# docker run --name container2 --net=container:none  -it --privileged=true centos[root@05dbf3f2daaf /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever

5.3、Bridge模式

默認選擇bridge的情況下,容器啟動后會通過DHCP獲取一個地址

#創建橋接網絡
[root@xianchaomaster1~]# docker run --name bridge -it  --privileged=true centos  bash[root@a131580fb605 /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
64: eth0@if65: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:0d brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.17.0.13/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever

5.4、Host模式

Docker網絡host模式是指共享宿主機的網絡

#共享宿主機網絡
[root@xianchaomaster1~]# docker run --name host -it --net=host --privileged=true centos  bash

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

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

相關文章

數據寶庫:深入探討數據隱私與安全的要義

寫在開頭 隨著數字時代的蓬勃發展&#xff0c;數據已成為當今社會的新型燃料。然而&#xff0c;正如能源需要保護和管理一樣&#xff0c;我們的數據同樣需要被妥善對待。本文將深入討論數據隱私和安全的不可忽視的重要性&#xff0c;并為您提供一些實用的基本措施和方法&#…

xcode ——Instrumets(網絡連接調試)使用

環境&#xff1a; instruments 使用只能在真機調試時使用&#xff0c;且真機系統必須ios15 點擊debug 按鈕——Network——Profile in Instruments 然后就可以看到如下面板 展開運行的項目&#xff0c;點擊session下的域名&#xff0c;下方回出現該域名下的網絡請求。點擊Deve…

管理類聯考——數學——真題篇——按題型分類——充分性判斷題——秒殺

題型結構 問題求解&#xff1a;通過計算求解&#xff0c;從五個選項中選出一個正確答案。條件充分性判斷&#xff1a;問所給的條件&#xff08;1&#xff09;&#xff08;2&#xff09;能否推出題設的結論&#xff0c;共有五個選項&#xff0c;從中選出正確的一個。&#xff0…

車聯網安全學習路標

1. 汽車和物聯網基礎知識 首先&#xff0c;你需要全面了解汽車和物聯網的基礎知識&#xff0c;包括汽車電子體系結構、車載通信技術&#xff08;如CAN、LIN、FlexRay、Ethernet&#xff09;以及物聯網的架構和通信協議&#xff08;如MQTT、CoAP&#xff09;。 2. 汽車網絡安全…

LCR 090. 打家劫舍 II(leetcode)動態規劃

文章目錄 前言一、題目分析二、算法原理1.狀態表示2.狀態轉移方程3.初始化4.填表順序5.返回值是什么 三、代碼實現總結 前言 在本文章中&#xff0c;我們將要詳細介紹一下LeetcodeLCR 090. 打家劫舍 II。采用動態規劃解決&#xff0c;這是一道經典的多狀態dp問題 一、題目分析…

人工智能從 DeepMind 到 ChatGPT ,從 2012 - 2024

本心、輸入輸出、結果 文章目錄 人工智能從 DeepMind 到 ChatGPT &#xff0c;從 2012 - 2024前言2010年&#xff1a;DeepMind誕生2012&#xff5e;2013年&#xff1a;谷歌重視AI發展&#xff0c;“拿下”Hinton2013&#xff5e;2014年&#xff1a;谷歌收購DeepMind2013年&…

stm32一種步進電機查表法驅動

文章目錄 一、定時器基礎頻率二、驅動原理三、關鍵代碼 對于stm32芯片來說&#xff0c;步進電機的驅動由于要在中斷中不斷計算下一次脈沖的時間而極其消耗算力&#xff0c;使用計算的方法對于芯片的算法消耗更高&#xff0c;特別是在f1這種算力比較低的芯片上&#xff0c;這時候…

Pipenv環境配置+Pytest運行

環境配置 使用Pipenv進行虛擬環境管理&#xff0c;Pipfile為依賴模塊管理文件。 安裝pipenv&#xff1a;brew install pipenv根項目根目錄下執行命令創建虛擬環境&#xff1a; pipenv install在Pycharm中指定項目運行的虛擬環境 &#xff1a;File->Settings->Project:-…

一文2500字使用Python進行GRPC和Dubbo協議的高級測試

01、GRPC測試 GRPC&#xff08;Google Remote Procedure Call&#xff09;是一種高性能、開源的遠程過程調用&#xff08;RPC&#xff09;框架&#xff0c;由 Google開發并基于Protocol Buffers&#xff08;protobuf&#xff09;進行通信。它使用了HTTP/2協議作為傳輸層&#…

C++11條件變量condition_variable

文章目錄 前言正文等待通知注意事項 結尾 前言 條件變量用于多線程中&#xff0c;其作用是在多線程間實現線程的等待、喚醒和通知機制&#xff0c;常配合互斥鎖&#xff08;std::mutex&#xff09;一起使用。它主要用于解決數據競爭問題>。 正文 條件變量只有五個函數&am…

PyQt6 QCalendarWidget日歷控件

?鋒哥原創的PyQt6視頻教程&#xff1a; 2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~共計39條視頻&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面開發 視頻教程(無廢話…

快速實現入門HarmonyOS開發

本文檔適用于HarmonyOS應用開發的初學者。編寫兩個簡單的頁面&#xff0c;實現在第一個頁面點擊按鈕跳轉到第二個頁面。開始前&#xff0c;請參考下載與安裝軟件、配置開發環境和運行HelloWorld&#xff0c;完成開發工具的安裝和開發環境的配置。 開發Ability 概述&#xff1…

Python 日期時間模塊詳解(datetime)

文章目錄 1 概述1.1 datetime 類圖1.2 類描述 2 常用方法2.1 獲取當前日期時間&#xff1a;now()、today()、time()2.2 日期時間格式化&#xff1a;strftime()2.3 日期時間大小比較&#xff1a;>、、<2.4 日期時間間隔&#xff1a;- 3 擴展3.1 Python 中日期時間格式化符…

混合預編碼(Hybrid Precoding)的全連接結構與子連接結構

A Survey on Hybrid Beamforming Techniques in 5G: Architecture and System Model Perspectives 全連接結構的混合預編碼 子連接結構的混合預編碼 Alternating Minimization Algorithms for HybridPrecoding in Millimeter Wave MIMO Systems

UE Websocket筆記

參考鏈接 [UE4 C入門到進階]12.Websocket網絡通信 - 嗶哩嗶哩 包含怎么用Nodejs 寫測試服務器 UE4_使用WebSocket和Json&#xff08;上&#xff09; - 知乎 包含Python寫測試服務器 UE4_使用WebSocket和Json&#xff08;下&#xff09; - 知乎 示例代碼 xxx.Build.cs"W…

【React】使用react hooks實現評論示例

實現功能 1、渲染評論列表 2、刪除評論 3、渲染導航欄和高亮 4、評論列表排序功能 5、獲取評論 6、點擊發布按鈕發布評論 7、清空輸入框 8、重新聚焦 實現代碼 1、需要引入 import React, { useRef, useState } from react import avatar from "../logo.png" //頭…

[動態規劃及遞歸記憶搜索法]2.插入乘號

插入乘號 題目描述 給定一個非負整數&#xff0c;用k個乘號將其分割&#xff0c;使得乘積最大。 例如&#xff1a;在整數12345中插入兩個乘號&#xff0c;有以下插入法&#xff1a; 1*2*345 1*23*45 1*234*5 12*3*45 12*34*5 123*4*5 其中最大值是123*4*5 2460 關于輸入 一…

前端小技巧: 面向切面編程在前端代碼中的應用

面向切面編程 面向切面編程在java中提出這類概念但是在js沒有束縛和約定&#xff0c;只需要按編程思想來實現原理在js中使用function或class實現面向切面編程 面向切面概念 AOP (Aspect Oriented Programming) 面向切面編程主要實現目的是針對業務處理過程中的切面進行提取&…

第18章:隨堂復習與企業真題(JDK8-17新特性)

第18章&#xff1a;隨堂復習與企業真題&#xff08;JDK8-17新特性&#xff09; 一、隨堂復習 1. JDK新特性的概述 幾個重要的版本 jdk 5.0 / jdk 8.0 &#xff1a;里程碑式的版本jdk9.0 開始每6個月發布一個新的版本LTS : jdk8 、 jdk 11 、 jdk 17 如何學習新特性 > 角…

Android安全學習路標

1. Android操作系統基礎知識 首先&#xff0c;你需要建立堅實的Android操作系統基礎知識&#xff0c;包括Android架構、進程和內存管理、應用組件和權限模型等基本概念。 2. 安全防范理論 學習關于安全防范理論的基礎知識&#xff0c;包括常見的威脅模型、攻擊類型和安全風險…