Docker 對比 VMnginx
Dokcer 經過使用 Linux 橋接提供容器之間的通訊,Docker的網絡模式有四種docker
分別是如下四種模式centos
host 模式
若是容器使用 host 模式,那麼容器將不會得到一個獨立的 Network Namespace,而是和宿主機共用一個 Network Namespace。容器將不會虛擬出本身的網卡與配置 IP 等,而是使用宿主機的 IP 和端口。就和直接跑在宿主機中同樣。可是容器的文件系統、進程列表等仍是和宿主機隔離的。bash
container 模式
這個模式指定新建立的容器和已經存在的一個容器共享一個 Network Namespace,而不是和宿主機共享。新建立的容器不會建立本身的網卡與配置 IP,而是和一個指定的容器共享 IP、端口範圍等。一樣,兩個容器除了網絡方面,其餘方面仍然是隔離的。網絡
none模式
此模式不一樣於前兩種,Docker 容器有本身的 Network Namespace,可是,Docker容器沒有任何網絡配置。而是須要咱們手動給 Docker容器添加網卡、配置 IP 等。tcp
bridge 模式
此模式是Docker默認的網絡設置,此模式會爲每個容器分配Network Namespace,並將一個主機上的Docker容器鏈接到一個虛擬網橋上。測試
[root@centos7 ~]# docker run -d -P nginx #-d啓動到後臺運行 6135db66a7d7c1237901a79974f88f1079b3d467c14ce83fc46bc6b4eb8b3240 [root@centos7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6135db66a7d7 nginx "nginx -g 'daemon off" 33 seconds ago Up 31 seconds 0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp gigantic_meitner
隨機一個端口去自動映射80centos7
參數說明spa
實例說明3d
[root@centos7 ~]# docker run -d -p 81:80 nginx 3ca9f847bebec3684952b0f2c081d31f84b9489de50b635246d9a592cc06d46c [root@centos7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3ca9f847bebe nginx "nginx -g 'daemon off" 8 seconds ago Up 6 seconds 443/tcp, 0.0.0
能夠經過指定的端口來訪問啓動的容器服務
docker管理數據的方式有兩種:
數據卷
數據卷是一個或多個容器專門指定繞過Union File System的目錄,爲持續性或共享數據提供一些有用的功能:
參數說明
實例操做
[root@centos7 ~]# docker run -it --name test-001 -v /data centos [root@4578675314b9 /]# ls -l /data/ total 0 [root@centos7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4578675314b9 centos "/bin/bash" 2 minutes ago Up 2 minutes test-001 [root@centos7 ~]# docker inspect 4578675314b9 "Mounts": [ { "Name": "ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115", "Source": "/var/lib/docker/volumes/ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115/_data", "Destination": "/data", ##能夠看出是將容器中的存儲目錄掛載到/data "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], [root@centos7 ~]# cd /var/lib/docker/volumes/ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115/_data ###這是物理機的目錄 [root@centos7 _data]# ll total 0 [root@centos7 _data]# mkdir test
容器裏查看數據
[root@4578675314b9 /]# cd /data/ ###這個是容器裏的目錄 [root@4578675314b9 data]# ll total 0 drwxr-xr-x 2 root root 6 Apr 10 08:54 test
能夠看出容器的數據目錄下一樣存在剛剛物理機建立的test目錄
一樣還可使用下面的方法掛載
docker run -it -v /data1:/mnt centos
前者是物理機目錄(掛載成功自動在物理機上建立此目錄)後者是容器目錄
[root@centos7 ~]# docker run -it -v /data1:/mnt centos [root@425569ce9eef /]# cd /mnt/ [root@425569ce9eef mnt]# ll total 0 [root@centos7 ~]# cd /data1/ [root@centos7 data1]# echo "hello">test.txt [root@centos7 data1]# ll total 4 -rw-r--r-- 1 root root 6 Apr 10 17:09 test.txt [root@centos7 data1]# cat test.txt hello
檢查容器目錄是否有文件與內容
[root@425569ce9eef mnt]# ll total 4 -rw-r--r-- 1 root root 6 Apr 10 09:09 test.txt [root@425569ce9eef mnt]# cat test.txt hello [root@425569ce9eef mnt]# pwd /mnt [root@425569ce9eef mnt]# hostname 425569ce9eef
此種方法適合開發代碼管理,代碼目錄直接掛載到容器中,修改WEB站點目錄便可訪問
docker run -it -v /data2:/opt:ro centos #指定只讀權限進行掛載 docker run -it -v /data2:/opt:rw centos #指定讀寫權限進行掛載 docker run -it -v /root/file1:file1 centos #掛載單個文件到容器目錄
容器卷的方式
--volumes-from #使用其它容器的目錄
[root@centos7 ~]# docker run -d --name mydocker -v /data centos 4f243ada709ee87d8f1e50bf13ab225c8dfd6b38f7dad97fa84ab0cb3d7d517b [root@centos7 ~]# docker run -it --name mynfs --volumes-from mydocker centos [root@82a489adb07a /]# ll /data/ total 0
此時進入mydocker容器/data目錄寫入數據進行測試
[root@centos7~]# cd /var/lib/docker/volumes/8421a48b58337a30ac4750c06748e01a3f328bdc2fa3b945d7f9737d9bc1b002/_data [root@centos7 _data]# ls [root@centos7 _data]# echo "welcome to here">file [root@centos7 _data]# ll total 4 -rw-r--r-- 1 root root 16 Apr 10 17:34 file
再查看剛剛的容器中是否有數據
[root@82a489adb07a /]# hostname 82a489adb07a [root@82a489adb07a /]# cd /data/ [root@82a489adb07a data]# ll total 4 -rw-r--r-- 1 root root 16 Apr 10 09:34 file [root@82a489adb07a data]# cat file welcome to here