Docker容器實戰(zhàn)之數(shù)據(jù)持久化+網(wǎng)絡(luò)模式+資源限制
docker提供三種方式將數(shù)據(jù)從宿主機掛載到容器中: volumes: Docker管理宿主機文件系統(tǒng)的一部分(/var/lib/docker/vollumes)保存數(shù)據(jù)的最佳方式。 bind mounts: 將宿主機上的任意位置的文件或者目錄掛載到容器中。 tmpfs::掛載存儲在主機系統(tǒng)的內(nèi)存中,而不會寫入主機的文件系統(tǒng)。如果不希望將數(shù)據(jù)持久存儲在任何位置,可以使用tmpfs,同時避免寫入容器可寫層以提高容器性能。 可以看到數(shù)據(jù)目錄為_data 創(chuàng)建完容器可以完整看到剛才持久化的數(shù)據(jù)目錄信息 驗證: -net=bridge 默認的網(wǎng)絡(luò)模式,Docker啟動后創(chuàng)建一個docker0網(wǎng)橋,默認創(chuàng)建的容器也是添加到這個網(wǎng)絡(luò)中 -net=host 容器不會獲得一個獨立的netwrok namespace,而是與宿主機共用一個。這就以為這容器不會有自己的網(wǎng)卡 -net=none 獲取獨立的network namespace,但是不為容器進行任何網(wǎng)絡(luò)配置,需要我們手動配置。 -net=container:Name/ID 與指定的容器使用同一個network namespace,具有同樣配置信息,兩個容器除了網(wǎng)絡(luò),其他還是隔離的 用法: 自定義網(wǎng)絡(luò):與默認的bridge原理一樣,但是自定義網(wǎng)絡(luò)具備內(nèi)部DNS發(fā)現(xiàn),可以通過容器名或者主機名容器之間網(wǎng)絡(luò)通信。 容器網(wǎng)絡(luò)訪問原理如下圖所示 docker容器可以對資源做一些限制,防止容器消耗完宿主機的資源。對容器的安全做一些隔離 常用的資源限制選項 實例docker容器數(shù)據(jù)持久化的三種方式
docker volume create nginx_vol #使用docker自帶的volime數(shù)據(jù)持久化
ls /var/lib/docker/volumes/nginx_vol/測試實例1 (volumes方式)
docker run -d --namenginx-ceshi -p 888:80 --mount -v nginx-ceshi:/usr/share/nginx/htmlnginx
或者
docker run -d --name nginx-ceshi -p 888:80 --mount src=nginx-ceshi,dst=/usr/share/nginx/html nginx
#src:指定/var/lib/docker/volumes/下數(shù)據(jù)持久目錄名稱,dst:指定容器內(nèi)數(shù)據(jù)持久目錄
docker inspect nginx-ceshicd /var/lib/docker/volumes/nginx-ceshi/_data
echo "helllo world nginx" > index.html
http://192.168.106.100:888/ #說明持久化成功實測實例二 Bind Mounts方式
docker run -d -it --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html/ nginx
docker run -d -it --name=nginx-test -v /root/html:/usr/share/nginx/html/ nginx#兩種方式都可以, -v +絕對路徑就是bind模式 -v +文件名就是volumes模式
#Bind模式源文件必須存在,不存在無法創(chuàng)建容器
#容器被掛載的目錄如果不為空則被隱藏。docker容器之網(wǎng)絡(luò)模式
bridge
host
none
container
docker run -itd --name zd -p 99:80 busybox
docker run -itd --name nginx-zd --net container:zd nginx
curl 192.168.106.100:99 #使用container將nginx網(wǎng)絡(luò)使用zd網(wǎng)絡(luò)代替docker network create zf-100
docker容器之資源限制
-m , -memory 容器可以使用的最大內(nèi)存量
-memory-swap 允許交換到磁盤的內(nèi)存量(物理內(nèi)存-swap內(nèi)存=真實swap空間)
-oom-kill-disable 禁用OOM killer (找出最多消耗資源的進程并殺掉)
-cpus 可以使用的CPU數(shù)量
-cpuset-cpus 限制容器使用特定的CPU核心,(0-3,0,1)
-cpu-shares CPU共享(相對權(quán)重)docker run -d --name web03 --memory="500m" --memory-swap="600m" --oom-kill-disable nginx
#限制內(nèi)存使用500m,大于500時使用swap交換空間100m
docker stats --no-stream web03 #查看容器內(nèi)存使用詳細信息#限制使用一個CPU
docker run -d --name web01 --cpus="1" nginx
#允許使用最多百分之50%的CPU
docker run -d --name web01 --cpus=".5" nginx