docker持久化及網路概念

2021-10-09 01:33:47 字數 4216 閱讀 6295

【卷】: docker容器不儲存任何資料;重要資料使用外部卷儲存(資料持久化);容器可以掛載真實機目錄或共享儲存為卷。

【主機卷的對映】:將真實機目錄掛載到容器中提供持久化儲存;目錄不存在會自動建立,目錄存在會直接覆蓋。

命令: docker run -it -v 宿主機目錄或檔案:容器內目錄或檔案 映象:標籤

]# docker run -it -v /mnt:/yibo yibo:latest //啟動後在容器根目錄下自動建立yibo目錄
一台共享儲存伺服器可以提供給所有docker主機使用;共享儲存伺服器(nas、san、das等)

-使用nfs建立共享儲存伺服器

-客戶端掛載nfs共享,並最終對映到容器中(執行時-v選項對映磁碟到容器中)

->搭建nfs伺服器(192.168.1.100)

1.100]# yum -y install nfs-utils.x86_64

]# vim /etc/exports //設定共享目錄及許可權

/var/webhome *(rw)

]# mkdir /var/webhome //建立共享目錄

]# chmod 777 /var/webhome

]# systemctl start nfs //啟動nfs服務

]# exportfs -rv //檢視nfs共享目錄

->docker主機掛載nfs(192.168.1.21,1.22)

1.21,22]# yum -y install nfs-utils.x86_64

]# showmount -e 192.168.1.100 //檢視1.100的共享目錄

export list for 192.168.1.100:

/var/webhome *

]# mount -t nfs 192.168.1.100:/var/webhome /mnt/ //將共享目錄掛載到/mnt/

->測試nfs

1.22]# echo "hello world" > /mnt/index.html //在共享目錄儲存資料

1.21]# ls /mnt //在其他主機檢視共享內容

index.html

->node1 啟動nginx

1.21]# docker run -itd -v /mnt:/usr/share/nginx/html docker.io/nginx:latest 

//啟動nginx服務,對映/mnt到容器的/usr/share/nginx/html目錄

->node2啟動apache

//啟動apache服務,對映/mnt到容器的/var/www/html目錄->nginx和apache共享同一web目錄(訪問容器的服務)

node1 ~]# curl 172.17.0.4

hello world

node2 ~]# curl 172.17.0.2

hello world

docker使用linux橋接,在宿主機虛擬乙個docker容器網橋,docker啟動乙個容器時會根據docker網橋的網段分配給容器乙個ip位址,稱為container-ip,同時docker網橋是每個容器的預設閘道器。

docker網橋是宿主機虛擬出來的,並不是真實存在的網路裝置,外部網路是無法定址到的,外部網路無法直接通過container-ip訪問到容器。如果容器希望外部能夠訪問到,可以通過對映容器埠到宿主主機(埠對映),即docker run建立容器時候通過 -p 或 -p 引數來啟用,訪問容器的時候就通過[宿主機ip]:[容器埠]訪問容器。

檢視docker預設網路模型

]# docker network  list 或 ]# docker network  ls

]# brctl show docker0 //啟動容器會繫結該網橋

使用docker建立網橋

]# docker network  create --subnet=10.10.10.0/24 docker1 //新建docker1網橋
使用自定義網橋

->啟動容器1與容器2互通

]# docker run -itd newos:latest //容器1

]# docker inspect -f '}' bf

172.17.0.2

]# docker run -it newos:latest //容器2ip 172.17.0.3

[root@2260966c8a5e /]# ping -c1 172.17.0.2 //容器1與2互通

ping 172.17.0.2 (172.17.0.2) 56(84) bytes of data.

64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.036 ms

/]# ping -c1 192.168.1.21 //容器1,2與真機互通

ping 192.168.1.21 (192.168.1.21) 56(84) bytes of data.

64 bytes from 192.168.1.21: icmp_seq=1 ttl=64 time=0.127 ms

->啟動容器3與容器4互通

]# docker run -itd --network=docker1 newos:latest  //容器3 ip10.10.10.3

]# docker run -it --network=docker1 newos:latest //容器4 ip10.10.10.4

/]# ping -c1 10.10.10.3 //容器3,4互通

ping 10.10.10.3 (10.10.10.3) 56(84) bytes of data.

64 bytes from 10.10.10.3: icmp_seq=1 ttl=64 time=0.171 ms

/]# ping -c1 192.168.1.21 //容器3,4與真機互通

ping 192.168.1.21 (192.168.1.21) 56(84) bytes of data.

64 bytes from 192.168.1.21: icmp_seq=1 ttl=64 time=0.062 ms

->容器(1,2)與容器(3,4)不能互通

/]# ping -c1 172.17.0.3

ping 172.17.0.3 (172.17.0.3) 56(84) bytes of data.

--- 172.17.0.3 ping statistics ---

1 packets transmitted, 0 received, 100% packet loss, time 0ms

建立網橋:]# docker network create docker02 -o com.docker.network.bridge.name=docker02

刪除網橋:]# docker network rm docker02

預設容器可以訪問外網,但外部網路的主機不可以訪問容器內的資源;容器的特徵是可以把宿主機變成對應的服務

可以使用-p引數把容器埠和宿主機埠繫結

格式:-p 宿主機埠:容器埠

]# docker run -itd -p 80:80 docker.io/nginx:latest   //繫結80埠啟動nginx服務

]# curl -i 192.168.1.21 //訪問真機ip則顯示nginx服務

]# docker run -itd -p 80:80 myos:httpd //繫結80埠啟動apache服務

]# curl -i 192.168.1.21 //訪問真機ip顯示apache服務

docker持久化儲存與網路架構

docker容器不保持任何資料 可將真機目錄掛載到容器內提供持久化儲存 root docker1 docker run v data data it docker.io centos bash我們可以利用nfs建立儲存伺服器,將客戶端掛載到nfs共享中,實現同一資料對映到多台客戶端的容器中去。nfs...

docker持久化資料

1.持久化資料的兩種方式volume和bind mount docker容器在執行的時候會產生資料,為了不讓這些資料隨著容器的刪除而刪除,docker支援資料持久化。docker資料持久化主要有兩種方式 volume和bind mount。使用volume資料將持久化在docker管理的volume...

docker 資料持久化

2.一開始執行dicker命令安裝了mysql5.7 docker run name mysql v pwd mysql var lib mysql p 3306 3306 e mysql root password hogwarts d mysql 5.7 說明將檔案掛載到了 var lib資料夾...