Docker容器互相连接三种实现方法详解
docker容器间的互连通信有三种方法:
- docker内部网络:不够灵活强大,不推荐
- docker networking:1.9或更新版本,推荐使用
- docker链接:1.9之前版本适用。
1.docker内部网络
涉及docker自己的网络栈。
安装docker后,系统会创建一个新的网络接口,名字是docker0,用于连接容器和宿主机,IP范围是172.16-172.30,
每个docker容器都会在这个接口上分配一个IP地址。
docker每创建一个容器就会创建一组互联的网络接口,一端是容器里的eth0接口,另一端则在宿主机以veth开头命名,
通过把每个veth接口绑定到docker0网桥,docker创建了一个虚拟子网,这个子网由宿主机和所有的docker容器共享,
实现容器和宿主机的通信连接,注意只有容器运行时veth接口才存在。
用内部网络实现容连互联的弊端:
- 要在容器的应用程序里对另一个容器的IP地址做硬编码;
- 容器重启后,IP地址可能会改变;
- 不够方便和灵活。
2.docker networking
容器之间的连接用网络创建。
允许用户创建自己的网络,容器通过这个网络互相通信;
可以跨越不同的宿主机来通信,网络配置也更灵活;
可以在无需更新连接的情况下,停止、启动或者重启容器;
不必事先创建容器再去连接它,也不必关心容器的运行顺序,可以在网络内部获得容器名解析和发现;
和docker compose以及swarm进行了集成;
在docker网络内部启动的容器,会感知到所有在这个网络下运行的容器,
并通过/etc/hosts文件将这些容器的地址保存到本地DNS中,
网络内的任何主机都可以使用hostname或hostname.netname的形式来被解析访问,
如果任何一个容器重启了,其IP地址会自动在/etc/hosts文件中更新,
测试中发现/etc/hosts文件中好像没有新增其他容器的地址,但也能互相ping通;
一个容器可以同时加入多个网络,所以可以创建非常复杂的网络模型;
- docker network create 创建一个网络
- docker network inspect 查看网络的详细信息
- docker network ls 列出当前系统中的所有网络
- docker network connect 将已有容器连接到一个网络
- docker network disconnect 从网络中断开一个容器
- docker network rm 删除一个或多个网络
- docker network prune 删除所有未使用的网络
3.docker链接
在链接过程中要引用到容器的名字,且只能工作于同一台宿主机中。
在docker run启动容器时用参数 --link 创建两个容器间的 客户-服务 链接,
需要两个参数,一个是链接容器的名字,一个是链接的别名,即 --link redis:db,
被链接的容器是服务,链接让服务容器能够和客户容器通信,
客户容器可直接访问服务容器的任意公开端口,所以服务容器的端口不需要对本地宿主机公开,相对更加安全;
可以把多个客户容器链接到同一个服务容器,也可通过指定多次--link来链接到多个服务容器,
docker在容器的/etc/hosts文件和包含链接信息的环境变量里写入链接信息;
无论采用哪种方式,都可以创建一个Web应用程序栈,包含以下组件:
- 一个Web服务器容器
- 一个Redis数据库容器
- 两个容器间的一个安全链接
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
详解通过Docker搭建Mysql容器+Tomcat容器连接环境
1.实验目的:web容器能访问部署在另外容器中的MySQL 2.步骤1:拉取mysql镜像,拉取命令如下: docker pull mysql//官网的最新mysql进行 3.步骤2:拉取tomcat镜像,拉取命令如下: docker pull tomcat --name xuguokun/jdk-tomcat 4.步骤3:创建mysql的一个容器,容器的名字是mymysql,创建命令如下: 复制代码 代码如下: docker run --name mymysql -p 3306:3306 -
-
详解Docker创建Mysql容器并通过命令行连接到容器
拉取网易蜂巢的mysql-server:5.6 docker pull hub.c.163.com/nce2/mysql:5.6 创建mysql5.6容器 1master+3个slave docker run --name mysql-master -d -P hub.c.163.com/nce2/mysql:5.6 docker run --name mysql-slave1 -d -P hub.c.163.com/nce2/mysql:5.6 docker run --name mysql-
-
Docker容器端口映射后突然无法连接的排查过程
一.背景 一般需要对外提供服务的Docker容器,我们在启动时后使用-p命令将对外访问端口暴露给外部,例如启动Docker Registry,我们将5000端口映射出来供外部访问: docker run -d -p 5000:5000 registry 但最近碰到一个非常奇怪的情况:研发组里一个CentOS 7测试环境里部署有Docker Registry,并对外暴露了端口.启动容器后一段时间内都是可以正常工作的,但在不定时间间隔后,外部主机就会出现无法从仓库中拉取镜像的情况,提示TimeOut
-
Docker使用Link在容器之间建立连接
在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务.比如这么一种情况:我们需要一个容器来提供mysql的数据库服务,而另外两个容器作为客户端来连接使用mysql数据库服务.下面我们就来看看Docker是怎样通过Link来实现这种功能的. 1. 这里我们首先创建两个容器image,一个用来模拟mysql数据库,另外一个使用mysql的client来模拟一些使用mysql服务的应用,这种应用可以是任何php,python,java
-
Docker如何使用link建立容器之间的连接
我们在使用Docker的时候,经常可能需要连接到其他的容器,比如:web服务需要连接数据库.按照往常的做法,需要先启动数据库的容器,映射出端口来,然后配置好客户端的容器,再去访问.其实针对这种场景,Docker提供了--link 参数来满足. 这里使用数据库服务器和客户端的例子来介绍下--link的用法. 一 创建容器 这里需要创建MySQL服务端和客户端的容器 MySQL 服务端的Dockerfile: FROM centos:centos6 MAINTAINER David "xx@xx.c
-
Docker多容器连接(以Tomcat+Mysql为例)
Docker提供了多个容器直接访问的方法,最简单的方式是直接使用端口映射-p参数指定映射的端口或者-P映射所有端口,多个容器直接通过网络端口进行访问. 但网络端口映射方式并不是Docker中连接多个容器的唯一方式,更安全的方法是可以使用Docker的连接系统(--link)连接多个容器,当容器连接到一起时,接受者容器就可以看到源容器的信息. 以Tomcat + Mysql为例,建立容器之间的连接 在容器直接建立连接要使用--link选项 --link <name or id>:alias 这里
-
详解docker 允许主机ssh连接到docker容器中
在docker容器中,安装好ssh: 1)替换掉容器中的安装源为163源 2)安装ssh服务 apt-get update apt-get install openssh-server 3)添加目录,修改ssh配置文件 mkdir -p /var/run/sshd vim /etc/pam.d/sshd 找到 session required pam_loginuid.so 这一行,将它注释掉 4)添加要链接过来的主机公钥 将公钥放到/root/.ssh/authorized_ke
-
docker连接spring boot和mysql容器方法介绍
在之前使用docker部署运行了Spring Boot的小例子,但是没有使用数据库.在这一篇中,介绍docker如何启动mysql容器,以及如何将Spring Boot容器与mysql容器连接起来运行. docker基本命令 首先熟悉一下在操作过程中常用的docker基本命令: docker images:列出所有docker镜像 docker ps:列出所有运行中的容器,-a参数可以列出所有容器,包括停止的 docker stop container_id:停止容器 docker start
-
Docker容器互相连接三种实现方法详解
docker容器间的互连通信有三种方法: docker内部网络:不够灵活强大,不推荐 docker networking:1.9或更新版本,推荐使用 docker链接:1.9之前版本适用. 1.docker内部网络 涉及docker自己的网络栈. 安装docker后,系统会创建一个新的网络接口,名字是docker0,用于连接容器和宿主机,IP范围是172.16-172.30, 每个docker容器都会在这个接口上分配一个IP地址. docker每创建一个容器就会创建一组互联的网络接口,一端是容器
-
Java线程三种命名方法详解
这篇文章主要介绍了Java线程三种命名方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.实例化一个线程对象 Thread t = new Thread(); t.setName("甲"); 2.实例化一个线程对象的同时,通过构造方法对线程进行命名 Thread(Runnable r, String name) Thread t = new Thread(() -> {}, "甲"); 3.使用自定义
-
Vue屏幕自适应三种实现方法详解
目录 使用 scale-box 组件 设置设备像素比例(设备像素比) 通过JS设置zoom属性调整缩放比例 使用 scale-box 组件 属性: width宽度 默认1920 height高度 默认1080 bgc背景颜色 默认"transparent" delay自适应缩放防抖延迟时间(ms) 默认100 vue2版本:vue2大屏适配缩放组件(vue2-scale-box - npm) npm install vue2-scale-box 或者 yarn add vue2-sca
-
java中关于Map的三种遍历方法详解
map的三种遍历方法!集合的一个很重要的操作---遍历,学习了三种遍历方法,三种方法各有优缺点~~ 复制代码 代码如下: /* * To change this template, choose Tools | Templates * and open the template in the editor. */package cn.tsp2c.liubao;import java.util.Collection;import java.util.HashMap;import java.util
-
PHP终止脚本运行三种实现方法详解
PHP中,终止脚本运行有三种方式:主脚本程序中使用return.脚本中使用exit().die(),三者所在的脚本文件他们之后的代码都不会执行. 1.die( ) 和 exit( ) 在PHP中,die() 和 exit()的用法和作用是一样的. 这两个函数可以有参数,如果参数是一个字符串,则该函数会在中止脚本运行前输出字符串. 如果参数是一个整数,这个值被用做退出状态.值的范围在0到254之间. 退出状态255由PHP保留,不会被使用:状态0用于成功地终止程序. 注:PHP版本号大于4.2.0
-
Docker容器互访的三种方法
我们都知道docker容器之间是互相隔离的,不能互相访问,但如果有些依赖关系的服务要怎么办呢.下面介绍三种方法解决容器互访问题. 方式一.虚拟ip访问 安装docker时,docker会默认创建一个内部的桥接网络docker0,每创建一个容器分配一个虚拟网卡,容器之间可以根据ip互相访问. [root@33fcf82ab4dd /]# [root@CentOS ~]# ifconfig ...... docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICA
-
Java spring的三种注入方式详解流程
目录 设置Spring的作用域 自动注入 @Primary Qualifier @ComponentScan不同的配置对性能的影响 懒加载 三种注入方式 字段注入(IDEA 会提示不推荐) 字段注入的bean类外部不可见 循环依赖问题 构造器注入(官方推荐) set方法注入 设置Spring的作用域 或者使用枚举值设置 单例和多里使用场景 自动注入 @Primary 一个接口有多个实现被spring管理吗,在依赖注入式,spring会不知道注入哪个实现类就会抛出NoUniqueBeanDefin
-
Spring中Bean的三种实例化方式详解
目录 一.环境准备 二.构造方法实例化 三.分析Spring的错误信息 四.静态工厂实例化 4.1 工厂方式创建bean 4.2 静态工厂实例化 五.实例工厂与FactoryBean 5.1 环境准备 5.2 实例工厂实例化 5.3 FactoryBean的使用 六.bean实例化小结 一.环境准备 准备开发环境 创建一个Maven项目 pom.xml添加依赖 resources下添加spring的配置文件applicationContext.xml 最终项目的结构如下: 二.构造方法实例化 在
-
Python selenium 三种等待方式详解(必会)
很多人在群里问,这个下拉框定位不到.那个弹出框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,就好比闪电侠和凹凸曼约好去打怪兽,然后闪电侠打完回来之后问凹凸曼你为啥还在穿鞋没出门?凹凸曼分分中内心一万只羊驼飞过,欺负哥速度慢,哥不跟你玩了,抛个异常撂挑子了. 那么怎么才能照顾到凹凸曼缓慢的加载速度呢?只有一个办法,那就是等喽.说到等,又有三种等法,且听博主一一道来: 1. 强制等待
-
Android 打包三种方式实例详解
Android 打包三种方式实例详解 前言: 现在市场上很多app应用存在于各个不同的渠道,大大小小几百个,当我们想要在发布应用之后统计各个渠道的用户下载量,我们就要进行多渠道打包. 01.应用的打包签名什么是打包? 打包就是根据签名和其他标识生成安装包. 签名是什么? 1.在android应用文件(apk)中保存的一个特别字符串 2.用来标识不同的应用开发者:开发者A,开发者B 3.一个应用开发者开发的多款应用使用同一个签名 就好比是一个人写文章,签名就相当于作者的署名. 如果两个应用都是一
随机推荐
- iOS、Mac OS X系统中编程实现汉字转拼音的方法(超级简单)
- 一道优雅面试题分析js中fn()和return fn()的区别
- ASP.NET Core 1.0实现邮件发送功能
- 双冒号 ::在PHP中的使用情况
- 结合FSO操作和Aspjpeg组件写的Class
- vue.js指令和组件详细介绍及实例
- PowerShell小技巧之调用CloudFlare的SDK查询网站统计信息
- 使用PyCharm配合部署Python的Django框架的配置纪实
- Jquery插件写法笔记整理
- JS实现根据用户输入分钟进行倒计时功能
- MSXML2.XMLHTTP 800401F3 错误的解决方法
- C++中const的实现机制深入分析
- Java Socket使用加密协议进行传输对象的方法
- Python解决鸡兔同笼问题的方法
- Android实现3D推拉门式滑动菜单源码解析
- 微信小程序使用progress组件实现显示进度功能【附源码下载】
- vue项目中mock.js的使用及基本用法
- Ubuntu无法联网的解决方法
- 使用TensorFlow实现SVM
- 浅谈python中get pass用法