#Docker:網絡
###網絡
```
// 查看已有的網絡
docker network ls
// 查看bridge網絡的底層信息
docker network inspect bridge
// 創建一個后臺運行的容器web1 --net用來指定要使用的網絡,如果不加會默認使用bridge網絡
// 如果本機沒有nginx鏡像,系統會自動從網絡上下載
docker run -d --name web1 --net bridge nginx
// 再次查看bridge網絡的底層信息
docker network inspect bridge
// 再創建一個容器web2
docker run -d --name web2 --net bridge nginx
// 再次查看bridge網絡的底層信息,可以查看到已經有兩個容器使用bridge網絡了,在這個網絡下面的容器之間可以相互通信
docker network inspect bridge
// 登錄到web1
docker exec -it web1 bash
ping 172.17.0.3
// 可以ping通,說明web1和web2之間可以相互通信
```
###理解none網絡
```
// 創建一個容器并指定none網絡
docker run -d --name web_none --net none nginx
// 查看none網絡的底層信息,可以看到web_none容器在使用none網絡,但是并沒有一個可以使用的ip地址,也就是說這個容器跟外界是一個完全隔離的狀態,誰也沒有辦法和它通信
docker network inspect none
```

###理解host網絡
```
// 創建一個容器并指定host網絡
docker run -d --name web_host --net host nginx
// 查看host網絡的底層信息,可以看到web_host容器在使用host網絡,但是也沒有一個可以使用的ip地址,因為使用host網絡的容器的ip地址跟主機的網絡是一樣的
docker network inspect host
```
###Docker Quickstart Terminal啟動藍屏解決辦法
BIOS開啟虛擬化

###端口
```
// 如果想讓外界可以訪問到默認的birdge網絡上的容器提供的服務,需要告訴docker要使用哪一些端口
// 查看鏡像使用的端口
docker inspect nginx
// 在創建容器的時候,我們可以去指定一下主機跟容器之間的端口映射關系
// 80(主機的80端口):80(容器的80端口) 如果有人訪問主機上面的80端口的時候,這個訪問會被定向到這個容器上面的80端口
docker run -d --name web3 --publish 80:80 nginx
// 查看主機的ip地址
docker-machine inspect default
// 使用瀏覽器訪問這個ip地址,顯示的內容就是web3這個容器的nginx提供的服務
```
###端口綁定
```
// 查看容器跟主機綁定的端口
docker inspect web3
// 或者使用(顯示結果左邊是容器端口,右邊是主機端口)
docker port web3
// 刪除web3容器
docker rm web3
// 重新創建一個容器,讓它的80端口指向主機的一個隨機端口, 這次在瀏覽器訪問需要用 http://192.168.99.100:32768/去訪問
docker run -d --name web3 --publish 80 nginx
// 刪除web3容器
docker rm -f web3
// 重新創建一個容器,使用--publish-all 或者 -P 選項,使用它我們可以不需要去手工指定端口或者是端口的一個映射關系,它會自動去公布在鏡像里面設置的要公布的所有的端口
docker run -d --name web3 --publish-all nginx
docker port web3
// 在瀏覽器中訪問需要使用 http://192.168.99.100:32770/ 去訪問
```
###自定義網絡
我們可以基于某一個類型的網絡去創建一些自定義的網絡,這樣屬于這個網絡的容器就會被單獨的隔離出來,它們之間可以進行相互通信,但是其它不在這些自定義網絡上面的容器不能夠直接訪問到它們,一個容器可以屬于多個網絡,在用戶自定義網絡上面的容器,它們直接可以使用各自容器的名字來訪問到對方,因為它們會用到docker內嵌的dns服務
```
// 創建一個新的網絡
docker network create --driver bridge web
// 查看web網絡的信息
docker network inspect web
```
###把容器放到自定義網絡里
```
// 創建容器并指定網絡為自定義的web網絡
docker run -d --name web5 --net web nginx
// 查看web網絡
docker network inspect web
// 將已經存在的容器放到指定的網絡里面
docker network connect web web3
docker network inspect web
// 登錄到web3
docker exec -it web3 bash
ping web5
// 通過ip addr我們可以發現web3現在屬于兩個網絡,一個是bridge網絡,一個是web網絡
ip addr
// 將web3容器從bridge網絡中刪除
docker network disconnect bridge web3
docker network inspect bridge
```