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

     

  • 相关阅读:
    关于等价类测试的简单实践 20150322
    对软件测试的理解 20150314
    pthread_wrap.h
    libuv 错误号UV_ECANCELED 的处理
    简单的后台日志组件
    Windows NTService 后台框架封装
    检查程序进程是否存在/强制杀掉程序进程
    析构函数结束线程测试
    移动天线
    猜数字游戏的Java小程序
  • 原文地址:https://www.cnblogs.com/Zioyi/p/11181145.html
Copyright © 2020-2023  润新知