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城堡。

 

原文地址:https://www.cnblogs.com/Zioyi/p/11181145.html