zoukankan      html  css  js  c++  java
  • 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城堡。

     

  • 相关阅读:
    七种程序设计模式
    理清JavaScript正则表达式
    采用管道处理HTTP请求
    AngularJS之Service4
    Net Core-Razor
    中间件(Middleware)
    Redis集群明细文档(转)
    nginx 301跳转到带www域名方法rewrite(转)
    Redis启动多端口,运行多实例(转)
    web框架之Spring-MVC环境搭建(转)
  • 原文地址:https://www.cnblogs.com/Zioyi/p/11181145.html
Copyright © 2011-2022 走看看