Docker网络相关
生活随笔
收集整理的這篇文章主要介紹了
Docker网络相关
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Docker中網絡功能相關Docker是允許通過外部訪問容器或者容器互聯的方式來提供網絡服務。外部訪問容器:通過-P或者-p參數指定端口映射,-P是隨機;-p是指定。-P?:?Docker會隨機映射一個端口到內部容器開放的網絡端口。用docker?run?-d?-P?training/webapp?python?app.py?創建啟動一個容器。然后再用docker?container?ls?-l?(或者docker?ps)看下
容器內5000被映隨機射到了本地的32768。(看下下面的測試)
刷新幾次上面的網址,然后看下log??(docker?logs?1db63003b6b1)
我本地windows電腦的ip是103,虛擬機(宿主機器)ip?104,容器是172.17.0.2?。-p:?則可以指定要映射的端口,并且,在一個端口上只可以綁定一個容器。支持的格式:ip:hostPort:containerPort?|?ip::containerPort?|?hostPort:containerPort端口一對一映射(所有ip)docker?run?-d?-p?5000:5000?training/webapp?python?app.py?端口一對一映射,指定ipdocker?run?-d?-p?127.0.0.1:5000:5000?training/webapp?python?app.py?映射到指定地址的任意端口(我的docker是19.03.5版本,下面的這個命令失效,會隨機映射一個端口出來)docker?run?-d?-p?127.0.0.1::5000?training/webapp?python?app.py默認是tcp端口,可以指定udp端口docker?run?-d?-p?127.0.0.1:5000:5000/udp?training/webapp?python?app.py-p標記可以多次使用來綁定多個端口docker?run?-d?-p?5000:5000?-p?3000:80?training/webapp??python?app.py可以通過docker?port?xxxx來查看端口映射情況 然后是第二個姿勢容器互聯之前docker很多都是用--link進行互聯,很多人已經建議不要這么用了,推薦是把容器加入自定義的Docker網絡來進行互聯操作。新建Docker網絡:docker?network?create?-d?bridge?my-net-d參數指定Docker網絡類型,有bridge和overlay。其中overlay用于Swarm?mode。運行一個容器并連接到新建的my-net網絡分別打開三個終端,每個終端執行下面中的一條。docker?run?-it?--rm?--name?busybox1?--network?my-net?busybox?shdocker?run?-it?--rm?--name?busybox2?--network?my-net?busybox?shdocker?container?ls?
講道理現在正在跑著的兩個容易應該是可以互聯的(在一個局域網下),分別在兩個啟動容器的終端里通過ping來確認彼此互聯
?
也能看到他們兩個的ip,一個是172.18.0.3,另一個是172.18.0.2,有一點要清楚,他們現在都是在上面我們手動創建的那個my-net網絡里。此時在宿主機上也是能ping通那兩個ip的,但是記得是直接ping?ip不是上面兩臺容器的那個操作方式。
可以ifconfig看下此時宿主機的一些信息。
如果是多個容器之間進行互聯,推薦是直接Docker?Compose,之后會整理這個相關的筆記。看到那個docker0了嗎,到這我突然記得,貌似是不創建網絡,直接默認大家是連接到docker0上的。我自己本地測試了一下,也是開啟三個終端,然后分別執行上面那些命令,但是不指定network,然后發現確實是三個終端都彼此可以ping通的。(直接ping?ip不是容器名字)配置DNS如果想要配置全部容器的DNS,直接在宿主機上??/etc/docker/daemon.json??文件中增加dns這個值{"dns"?:?["114.114.114.114","8.8.8.8"]}就行了。這樣每次啟動容器自動配置為這兩個。如果想要手動指定:--dns=IP_ADDRESS添加?DNS?服務器到容器的??/etc/resolv.conf??中。如果是改主機名可以用下面這個-h?HOSTNAME??或者??--hostname=HOSTNAME??設定容器的主機名,它會被寫到容器內的??/etc/hostname??和??/etc/hosts設定容器的搜索域--dns-search=DOMAIN??設定容器的搜索域,當設定搜索域為??.example.com時,在搜索一個名為?host?的主機時,DNS?不僅搜索?host,還會搜索host.example.com還有一種改容器DNS的方式就是直接用之前說的?文件掛載的方式直接掛載容器的/etc/resolv.conf文件出來。這個不做演示了(這個是我自己想的,感覺應該可行,就算可行,也不建議直接把容器的DNS文件和本地的DNS文件綁定在一起,這樣就會導致容器有修改宿主主機的DNS的權限了)。?
總結
以上是生活随笔為你收集整理的Docker网络相关的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker阿里云镜像存储服务
- 下一篇: Docker网络配置进阶