1. 程式人生 > >docker網路和儲存管理

docker網路和儲存管理

Docker的通訊方式

在預設情況下,Docker使用網橋(bridge)+ NAT的通訊模型,
Docker在啟動時預設會自動建立網橋裝置Docker0,並配置IP172.18.0.1/16:

[root@VM_0_7_centos ~]# ifconfig docker0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
        ether 02:42:5c:e1:12:0b  txqueuelen 0
(Ethernet) RX packets 45260 bytes 58564444 (55.8 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 43508 bytes 9891692 (9.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@VM_0_7_centos ~]#

當Docker啟動容器時,會建立一對veth虛擬網路裝置,並將其中一個veth網路裝置附加到網橋docker0,另一個加入容器的網路名字空間(network namespace),並改名為eth0.這樣,同一個Host的容器與容器之間就可以通過docker0通訊了。

[[email protected]_0_7_centos ~]# ifconfig 
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
        ether 02:42:5c:e1:12:0b  txqueuelen 0  (Ethernet)
        RX packets 45260  bytes 58564444 (55.8 MiB)
        RX errors 0  dropped 0
overruns 0 frame 0 TX packets 43508 bytes 9891692 (9.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.7 netmask 255.255.240.0 broadcast 172.17.15.255 ether 52:54:00:2d:1d:06 txqueuelen 1000 (Ethernet) RX packets 166487137 bytes 18716862191 (17.4 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 166914495 bytes 16039972180 (14.9 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1 (Local Loopback) RX packets 48390085 bytes 2815306278 (2.6 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 48390085 bytes 2815306278 (2.6 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 veth49c3c33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether b2:4d:90:ec:32:87 txqueuelen 0 (Ethernet) RX packets 28578 bytes 7712323 (7.3 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 26083 bytes 23266735 (22.1 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

資料卷

1.建立資料卷

我們可以不指定host-dir,從而在容器內部建立一個數據卷:
如果不存在ubuntu:14:04 docker run 會建立,如果存在exec直接進入,

[[email protected]_0_7_centos ~]# docker run -it --rm -v /volume1 --name test1 ubuntu:14.04 /bin/bash
[[email protected]_0_7_centos ~]# docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                    PORTS                                                   NAMES
27a87dd06ac6        ubuntu:14.04                  "/bin/bash"              7 minutes ago       Up 7 minutes                                                                      test1
[[email protected]_0_7_centos ~]# docker exec -it 27a87dd06ac6 /bin/bash
root@27a87dd06ac6:/# df -lh
Filesystem      Size  Used Avail Use% Mounted on
overlay          50G   16G   32G  33% /
tmpfs           920M     0  920M   0% /dev
tmpfs           920M     0  920M   0% /sys/fs/cgroup
/dev/vda1        50G   16G   32G  33% /volume1
shm              64M     0   64M   0% /dev/shm
tmpfs           920M     0  920M   0% /proc/scsi
tmpfs           920M     0  920M   0% /sys/firmware
root@27a87dd06ac6:/# echo "volume1" > /volume1/test.txt
root@27a87dd06ac6:/# ls /volume1/
test.txt
root@27a87dd06ac6:/#

執行df可以看到Host的根分割槽被掛載到了容器的/volume1。
對於這種方式建立的資料卷,當容器被刪除後,如果沒有其他容器引用該資料卷,對應的Host目錄也會被刪除。所以,如果不想Host的目錄被刪除,必須指定Host的目錄。

2.掛在Host的目錄作為資料卷

除了建立資料卷外,我們還可以掛載Host的目錄到容器,作為容器的資料卷。

[root@VM_0_7_centos ~]# docker run -it --rm -v /data/volume1:/volume1 ubuntu:14.04 /bin/bash
root@c6ac6c7d2684:/# df -lh
Filesystem      Size  Used Avail Use% Mounted on
overlay          50G   16G   32G  33% /
tmpfs           920M     0  920M   0% /dev
tmpfs           920M     0  920M   0% /sys/fs/cgroup
/dev/vda1        50G   16G   32G  33% /volume1
shm              64M     0   64M   0% /dev/shm
tmpfs           920M     0  920M   0% /proc/scsi
tmpfs           920M     0  920M   0% /sys/firmware
root@c6ac6c7d2684:/# ls /volume1/
root@c6ac6c7d2684:/# echo "hello" > /volume1/hello.txt
root@c6ac6c7d2684:/# exit
exit
[root@VM_0_7_centos ~]# ls /data/volume1/
hello.txt
[root@VM_0_7_centos ~]# cat /data/volume1/hello.txt 
hello
[root@VM_0_7_centos ~]#

我們將Host上的/data/volume1掛載容器中的/volume1.通過這種方式我們可以在Host與容器之間進行資料交換。比如,容器內的應用程式可以將日誌、重要資料寫到/volume1上,這樣,即使容器被刪除,資料仍然會保留在Host上。實際上,Docker內部是通過mount –bind來實現的。

3.掛載Host的檔案作為資料卷

[root@VM_0_7_centos ~]# docker run --rm -it -v ~/.bash_history:/root/.bash_histroy ubuntu:14.04 /bin/bash
root@791f31d4d355:/# date +%z
+0000
root@791f31d4d355:/# exit
exit
[root@VM_0_7_centos ~]# date +%z
+0800
[root@VM_0_7_centos ~]#

資料卷容器

1.建立和掛載資料卷容器

建立一個dbdata的容器,通過–volumes-from在其他容器掛載/dbdata資料卷。
進入db1和db2,可以看到容器dbdata所有的資料卷(/dbdata)的內容。

[root@saltstack-node2 ~]# docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for postgres
Unable to find image 'training/postgres:latest' locally
Trying to pull repository docker.io/training/postgres ... 
latest: Pulling from docker.io/training/postgres
a3ed95caeb02: Pull complete 
6e71c809542e: Pull complete 
2978d9af87ba: Pull complete 
e1bca35b062f: Pull complete 
500b6decf741: Pull complete 
74b14ef2151f: Pull complete 
7afd5ed3826e: Pull complete 
3c69bb244f5e: Pull complete 
d86f9ec5aedf: Pull complete 
010fabf20157: Pull complete 
Digest: sha256:a945dc6dcfbc8d009c3d972931608344b76c2870ce796da00a827bd50791907e
Status: Downloaded newer image for docker.io/training/postgres:latest
8e4e3fcfbc387a4cccc2e2ae023b3d16b40784ed55f4c921133cda1fe4b20158
[root@saltstack-node2 ~]# docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
docker.io/training/postgres            latest              6fa973bb3c26        4 years ago         365 MB
[root@saltstack-node2 ~]# docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                      PORTS               NAMES
8e4e3fcfbc38        training/postgres             "echo Data-only co..."   17 seconds ago      Exited (0) 16 seconds ago                       
[root@saltstack-node2 ~]# docker run -d --volumes-from dbdata --name db1 training/postgres
12439f1fbdb2e80a9bab304d193c027c91d9d906fe535c1acdec113837632759
[root@saltstack-node2 ~]# docker run -d --volumes-from dbdata --name db2 training/postgres
a2eaf3de9e3a935bba71a4d6536c155479f77f288d205c7dce586563f6793e2f
[root@saltstack-node2 ~]# docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                     PORTS               NAMES
a2eaf3de9e3a        training/postgres             "su postgres -c '/..."   10 seconds ago      Up 8 seconds               5432/tcp            db2
12439f1fbdb2        training/postgres             "su postgres -c '/..."   27 seconds ago      Up 25 seconds              5432/tcp            db1
8e4e3fcfbc38        training/postgres             "echo Data-only co..."   3 minutes ago       Exited (0) 3 minutes ago                       dbdata
[root@saltstack-node2 ~]# docker exec -it a2eaf3de9e3a /bin/bash
root@a2eaf3de9e3a:/# cd /dbdata/
root@a2eaf3de9e3a:/dbdata# ls
root@a2eaf3de9e3a:/dbdata#

備份、恢復和遷移資料卷

1.備份資料卷
我們可以通過“–volumes-from”從資料卷掛載資料卷,然後備份資料卷中的資料,
這裡我們建立一個新的容器,將Host本地目錄掛載到/backup,然後將資料卷容器dbdata的資料卷(/dbdata)打包到/backup/backup.tar。然後在Host的當前目錄下就可以得到backup.tar。

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
e2289a4b7dd4        training/postgres   "su postgres -c '/usr"   11 minutes ago      Up 11 minutes               5432/tcp            db2
3fcec61c9501        training/postgres   "su postgres -c '/usr"   11 minutes ago      Up 11 minutes               5432/tcp            db1
25158b44ecd6        training/postgres   "echo Data-only conta"   12 minutes ago      Exited (0) 12 minutes ago                       dbdata
[root@localhost ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu              latest              d355ed3537e9        14 months ago       119.2 MB
[root@localhost ~]# docker exec -it db1 /bin/bash
root@3fcec61c9501:/# cd d                                                            
dbdata/ dev/    
root@3fcec61c9501:/# cd dbdata/
root@3fcec61c9501:/dbdata# ls
root@3fcec61c9501:/dbdata# echo "hello" > hello.txt
root@3fcec61c9501:/dbdata# ls
hello.txt
root@3fcec61c9501:/dbdata# cat hello.txt 
hello
root@3fcec61c9501:/dbdata# exit
exit
[root@localhost ~]# docker run --volumes-from dbdata -v $(pwd):/backup d355ed3537e9 tar cvf  /backup/backup.tar /dbdata
tar: Removing leading `/' from member names
/dbdata/
/dbdata/hello.txt
[[email protected] ~]# tar -xvf backup.tar 
dbdata/
dbdata/hello.txt
[[email protected] ~]# ls
]                nginx-1.10.1         Python-3.5.0             setuptools-19.6.tar.gz
anaconda-ks.cfg  nginx-1.10.1.tar.gz  Python-3.5.0.tgz         web
backup.tar       ovpn-data            readline-6.2.4.1         zhuxiaolin
dbdata           pip-8.0.2            readline-6.2.4.1.tar.gz
nginx            pip-8.0.2.tar.gz     setuptools-19.6
[[email protected] ~]# cat dbdata/hello.txt 
hello
[[email protected] ~]# 

2.恢復資料卷
建立一個需要恢復資料的容器 ,恢復資料

[root@localhost ~]# docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
[root@localhost ~]# docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
dbdata/
dbdata/hello.txt

相關推薦

docker網路儲存管理

Docker的通訊方式 在預設情況下,Docker使用網橋(bridge)+ NAT的通訊模型, Docker在啟動時預設會自動建立網橋裝置Docker0,並配置IP172.18.0.1/16: [root@VM_0_7_centos ~]# ifconf

docker容器二探—docker網路儲存Dockerfile

               docker容器二探—docker網路、儲存卷和Dockerfile ----------------------------------------------------

docker 容器映象管理

docker容器管理 最開始在學習docker的時候,亂建立了很多容器,結果檢視所有容器的時候,自己嚇了一跳。下面介紹docker容器管理相關命令。(命令可能需要使用sudo) 刪除容器 檢視所有容器 首先注意區分這兩條命令,根據docker官方文件的教

Docker網路服務發現》(下)

該小節介紹了各種技術和它們的優缺點,並提供了網上的更多資源(如果你想獲得這些技術的實踐經驗,你可以看看Adrian Mouat的書Using Docker)。ZooKeeper Apache ZooKeeper是ASF的頂級專案,基於JVM的集中式配置管理工具,提供了與G

docker入門實戰(理論+實踐)系列---docker網路配置資料卷管理

docker可以存在自身的網路配置和資料卷管理方式,首先docker容器作為一個獨立的執行單元,可以有獨立的IP地址、埠等資訊。同時,nginx是無狀態的,當docker重啟之後,容器會恢復到初始化映象狀態(即docker是無狀態的),資料卷的存在實現了宿主機和docker容器之間的資料共享,本篇文章以n

Docker容器進階--建立映象、資料管理網路儲存型別

一、Docker映象建立方法--基於已有映象、基於本地模板; 基於已有映象: 1.準備映象: 2.準備容器: 3.將容器建立成為docker映象檔案: 基於本地模板: 1.下載本地作業系統模板: https://download.open

docker入門實戰(理論+實踐)系列--docker部署映象容器管理

1、docker安裝 docker安裝需要安裝docker所需要的yum源,國內來說,阿里雲的yum源推薦首選,docker-ce的yum源地址:wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 採用yum安裝d

C儲存類、連結記憶體管理--動態分配記憶體及型別限定詞

文章目錄 儲存類說明符 儲存類和函式 動態分配記憶體 `malloc`函式 `free`函式 `calloc`函式 動態分配記憶體的缺點 C型別限定關鍵字

Docker容器資料視覺化管理工具Flocker

Flocker 可輕鬆實現 Docker 容器及其資料的管理。這是一個數據卷管理器和多主機的 Docker 叢集管理工具,你可以通過它來控制資料。可用來在 Docker 中執行你的資料庫、查詢和 K/V 儲存,並在應用中輕鬆使用這些服務。 Flocker 同時也提供了 API 和命令列工具來進行功能的操

Docker網路管理(容器的四種網路模式)

下面,我們來學習Docker的網路管理。 Docker 在啟動時會建立一個虛擬網橋 docker0,預設地址為 172.17.0.1/16,容器啟動後都會被橋接到 docker0 上,並自動分配到一個 IP 地址 . docker0預設地址 網橋 容器橋接

2.6 Linux儲存管理-物理頁面的使用週轉

說明一些概念: 虛擬頁面:指虛擬空間中,一段固定大小、邊界與頁面大小對齊的區間及其內容。 物理頁面:虛擬頁面對映到的介質上,可以在記憶體上( 記憶體頁面),也可以在磁碟上( 盤上頁面)。 頁面的換進換出指的是頁面內容

s5 Docker的持久化儲存資料共享

資料庫容器的資料如何才能不會丟失?Docker的持久化儲存技術。Docker的資料共享技術能極大提高開發人員的開發效率,邊寫程式碼,邊看執行結果。 資料持久化之Data Volume   Docker持久化資料的方案 ·基於本地檔案系統的Volume。可以在執行Docker create

005.Docker儲存管理

一 Docker volume形態 因為Docker 採用 AFUS 分層檔案系統時,檔案系統的改動都是發生在最上面的容器層,在容器的生命週期內,它是持續的,包括容器在被停止後。但是,當容器被刪除後,該資料層也隨之被刪除了。因此,Docker 採用 volume (卷)的形式來向容器提供持久化儲存。D

Docker學習筆記 ---儲存管理

儲存管理 為了適應不同平臺不同場景的儲存需求,Docker提供了各種基於不同檔案系統實現的儲存驅動來管理實際的映象檔案   元資料管理 映象在設計上將元資料和檔案儲存完全隔離。Docker管理元資料採用的也正是從上至下repository、image、layer是3個層次。 所以reposi

pytorch框架網路引數儲存過載torch.save,torch.load,Unet

首先,定義NET,然後訓練,然後儲存: import torch import torchvision import torchvision.transforms as transforms import matplotlib.pyplot as plt import numpy as n

docker設定不同網路遷移到指定網路

Libnetwork官方示例 我們初步瞭解了libnetwork中各個元件和驅動後,為了能深入的理解libnetwork中的CNM模型和熟悉docker network子命令的使用,我們來通過libnetwork官方github上的示例進行驗證一下,如下圖所示: 在上圖示例中,使用Docker 預設的br

儲存類別、連結記憶體管理

  C變數作用域:塊作用域、函式作用域、函式原型作用域、檔案作用域。   C變數的3種連結屬性:外部連結、內部連結、無連結。前三種作用域變數都是無連結(僅在作用域內被使用);檔案作用域變數根據定義形式來看,如果是static則為內部連結(僅在本檔案內被使用),否則為外部連結(能被多個檔案共享)。   儲存期:

網路作業系統 第二章:使用者管理

1、Windows Server 2008中的使用者有哪些型別?系統預設的使用者有哪些?  答:Windows server 2008的使用者型別分為使用者、InetOrgPerson、聯絡人和預設使用者賬戶幾種型別; 系統的預設使用者有Administrator和Gue

網路作業系統 第二章丶使用者管理

1、Windows Server 2008中的使用者有哪些型別?系統預設的使用者有哪些?  答:Windows server 2008的使用者型別分為使用者、InetOrgPerson、聯絡人和預設使用者賬戶幾種型別; 系統的預設使用者有Administrator和Guest。

javaweb:會話管理儲存會話資料的兩種技術(Cookie、Session)

會話: 什麼是會話? •會話可簡單理解為:使用者開一個瀏覽器,點選多個超連結,訪問伺服器多個web資源,然後關閉瀏覽器,整個過程稱之為一個會話。 會話過程中要解決的一些問題? •每個使用者與伺服器進行互動的過程中,各自會有一些資料,程式要想辦法儲存每個使用者的