docker學習之network:初識網絡配置


起因

我的開發環境需要一個python代碼運行環境、reids服務和mysql服務。

由於以前,我的開發環境是mac,而CI和線上運行環境是centos,偶爾會出項本地單元測試跑不過,而CI可以過。這多半都是環境不一致導致的。

所以搭建完全相同的線上環境是很必要的。

 

這里要准備3個鏡像:mysql:5.6、redis和pymicro(python 運行環境)。

1.使用host網絡模式啟動mysql容器和redis容器

  docker run --net=host -p 3306:3306 -d --name mysql_5_6 -e MYSQL_ROOT_PASSWORD=toor333666 --restart=always mysql:5.7

  docker run --net=host -p 6379:6379 -d --name redis --restart=always redis

  注意:host網絡模式,端口映射必須宿主機和容器端口號相同。

 

2.使用host網絡模式啟動pymicro容器

  docker run --net=host -d --name dev_env_1 -it -v /Users/zioyi/code:/usr/code/ /pymicro /bin/bash

  -v參數用於把宿主機文件掛載到容器中,這樣才能在容器里跑單元測試。

 

正題

docker drivers

這樣就完成了,是不是很簡單,但是為什么容器【dev_env_1】能夠訪問容器【mysql】和【redis】?host網絡模式又是什么?

我們來研究一下docker的網絡配置(https://docs.docker.com/network/

docker的多種網絡模式是通過修改宿主機的iptables規則來實現。

docker提供了六種網絡驅動來滿足不同場景下的網絡需求:

  bridge:默認的網絡驅動。常用於獨立的容器群中內部通信,容器和宿主機的網絡是隔離的。

  host:移除了宿主機和容器群間的網絡隔離。

  overlay:提供多個docker守護進程管理的容器間的通信能力,包括swarm服務之間、swarm服務和獨立容器群之間以及獨立容器之間。

  macvlan:允許你給容器分配一個MAC地址,讓它作為一個物理網路裝置。

  none:無網絡狀態。

  Network plugins:用戶可自己安裝第三方的docker網絡插件。

 

總結

使用docker就好比達積木,每個容器都是形狀各異的積木塊,網絡驅動是用來連接積木塊的。

docker提供諸多網絡驅動,使得其容器間的關聯變得更加靈活,我們也要根據它的官方文檔,學習不同網路驅動之間的特性以搭建出我們想要的docker城堡。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM