Docker 容許經過外部訪問容器或容器互聯的方式來提供網絡服務。python
- 端口映射容許外部訪問容器
- --link 容器互聯
- 容器橋接網絡
1.經過--link容器通訊,給test2添加一個hosts解析記錄 docker run -d --name test2 --link test1 busybox /bin/sh -c "while true;do sleep 3600;done" test2能夠ping通test1,反之不能夠
可是--link是不推薦使用的,而是更強大的自定義docker網絡連接容器web
1.新建一個docker網絡 docker network create -d bridge my-net -d 參數指定 Docker 網絡類型,有 bridge overlay 2.鏈接容器 運行一個容器並鏈接到新建的 my-net 網絡 $ docker run -it --rm --name busybox1 --network my-net busybox sh 打開新的終端,再運行一個容器並加入到 my-net 網絡 $ docker run -it --rm --name busybox2 --network my-net busybox sh 再打開一個新的終端查看容器信息 $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b47060aca56b busybox "sh" 11 minutes ago Up 11 minutes busybox2 8720575823ec busybox "sh" 16 minutes ago Up 16 minutes busybox1 下面經過 ping 來證實 busybox1 容器和 busybox2 容器創建了互聯關係。 在 busybox1 容器輸入如下命令 / # ping busybox2 PING busybox2 (172.19.0.3): 56 data bytes 64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.072 ms 64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.118 ms 用 ping 來測試鏈接 busybox2 容器,它會解析成 172.19.0.3。 同理在 busybox2 容器執行 ping busybox1,也會成功鏈接到。 / # ping busybox1 PING busybox1 (172.19.0.2): 56 data bytes 64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.064 ms 64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.143 ms 這樣,busybox1 容器和 busybox2 容器創建了互聯關係。
外部訪問容器
容器中能夠運行網絡應用,可是要讓外部也能夠訪問這些應用,能夠經過-p或-P參數指定端口映射。docker
-P 參數會隨機映射端口到容器開放的網絡端口
[root@oldboy_python ~ 16:31:37]#docker run -d -P training/webapp python app.py
檢查映射的端口安全
#宿主機ip:32768 映射容器的5000端口
[root@oldboy_python ~ 16:34:02]#docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cfd632821d7a training/webapp "python app.py" 21 seconds ago Up 20 seconds 0.0.0.0:32768->5000/tcp brave_fermi
查看容器日誌信息服務器
#不間斷顯示log
docker logs -f cfd
也能夠經過-p參數指定映射端口網絡
#指定服務器的9000端口,映射到容器內的5000端口
[root@oldboy_python ~ 16:46:13]#docker run -d -p 9000:5000 training/webapp python app.py c0b5a6278d0f4f2e9b9eba8680451111d8b911b61de0c37ea64cb337aefb854e
訪問服務器的9000端口app
(若是訪問失敗的話,檢查本身的防火牆,以及雲服務器的安全組)webapp
查看指定容器的端口映射
[root@oldboy_python ~ 16:49:01]#docker port c0b 5000/tcp -> 0.0.0.0:9000
查看容器內的進程tcp
[root@oldboy_python ~ 16:49:05]#docker top c0b UID PID PPID C STIME TTY TIME CMD root 3926 3912 0 16:46 ? 00:00:00 python app.py