【卷】: 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資料夾...