docker安装nginx与容器之间的互相通信

news2025/1/10 23:24:36

目录

1. docker网络模式

2. 连接容器的三种方法

3. Docker Networking

3.1 创建网络

3.2 查看宿主机中创建的网络

3.3 删除网络

3.4 如何使用网络

4.搭建Nginx

1.准备工作

1.1 拉取镜像

​编辑1.2 在宿主机中创建挂载目录

 2.准备2个tomcat 容器集群

3.准备 Nginx配置

3.1启动Nginx容器

​编辑4.测试访问是否通过 

5. 容器之间的互相通信(ping)

5.1 两个容器在同一网段

5.1.1 首先创建一个网段叫mynet

​编辑

5.1.2 在镜像images中的centos -7中创建两个同net的容器c1 和  c2,并且查看

​编辑

 5.1.3 c1 ping c2

​编辑5.2

5.1.4 c2 ping c1

5.2 两个容器在不同网段

 5.2.1 首先使用bridge(与c1和c2网段不同)创建一个c3容器,并且查看

5.2.2 然后使用c1pingc3,可想而知是不行的,因为不是属于同一个网段,那么就会出些这行提示

5.2.3 如果将c3加到mynet中就可以通过c1 ping c3了


1. docker网络模式



docker安装成功后,会自动创建三个网络,可以通过如下的方式查看:

lisen@ubuntu:~$ sudo docker network ls
[sudo] password for lisen:
NETWORK ID          NAME                DRIVER              SCOPE
8994fe397802        bridge              bridge              local
436da757b62d        host                host                local
1b2be829b666        none                null                local
lisen@ubuntu:~$


在运行容器时可以通过--net参数指定网络模式,例如:

host模式: --net=host 容器不会虚拟自己的网卡,使用宿主机的ip和端口
none模式: --net=none 该模式等同于关闭容器的网络功能,一般在不需要网络的批处理任务中才使用
bridge模式: --net=bridge 默认值,如果指定--net参数,则docker就会采用这种模式,这种模式也是最强大灵活,使用的最广的网络模式。


Docker每次创建容器都会同时创建一组互联的网络接口,你可以理解为一根管道的两端, 这组接口一端作为容器的eth0接口,另一端命名类似于veth966865c@if100这样的名字,作为宿主机的一个端口。可以将veth接口的理解为虚拟网线的一端,这个虚拟网线一端插在名为docker0的网桥上,另一端插到容器中。通过这种方式Docker创建了一个虚拟子网,这个虚拟子网被宿主机和所有的Docker容器共享。

注: 可以安装bridge-utils工具查看网桥信息

如: yum install bridge-utils

查看网桥信息: brctl show

2. 连接容器的三种方法



docker的最佳实践建议为每个服务创建单独的docker容器,比例:db,redis,应用服务等等,那么不同的服务需要连接以便于作为整体为客服提供服务,例如应用服务需要连接db,redis等。常见的容器连接方法有三种:

Docker的内部网络
Docker1.9之后,可以使用Docker Networking
Docker 链接(Docker link)
1)这三种方式如何选择呢?

Docker的内部网络,这种方式不灵活,在重启容器需要重新配置,所以不推荐使用这种方式;如果使用Docker1.9之前的版本,则应该选择Docker link的方式; 如果使用docker1.9及更高的版本,则推荐使用Docker Networking,这种方式最灵活,功能也是最强大的。

2)Docker link和Docker Networking之间有什么区别呢?

Docker Networking可以连接不同的宿主机上的容器的
Docker Networking可以在不更新连接的情况下,停止,启动,或重启容器
Docker Networking不必事先创建网络,也不关心容器的启动顺序
3)也就是说只要用的docker是1.9版本之后,就应该使用Docker Networking咯?

恭喜你,答对了。

因为我们肯定会使用docker1.9之后的版本(现在docker已到19.04版本甚至更高版本了),所以我们只讲Docker Networking方式

3. Docker Networking



容器之间连接用网络创建,这个网络被称为Docker Networking,是Docker1.9版本之后的新特性。用户可以通过Docker Networking创建自己的网络,容器可以通过这个网络进行通信。

3.1 创建网络



创建一个新的网络可以使用如下的命令:

sudo docker network create app


可以使用如下的方式来查看网络的详细信息

sudo docker network inspect app


3.2 查看宿主机中创建的网络



 

sudo docker network ls


3.3 删除网络



 

sudo docker network rm app


3.4 如何使用网络



1)启动镜像时指定--net参数

sudo docker run -it --name test --net=app imagename
2)也可以将运行中的容器加入网络

sudo docker network connect app test
app 需要加入的网络名
test 需要加入到网络的容器名
创建好容器后进行测试,测试是否可以通讯 下载一个contos镜像测试

docker pull centos:7
创建两个容器 看是否可以 ping 通

docker run -itd --name ubd centos:7


删除所有 容器

 

4.搭建Nginx



1.准备工作



1.1 拉取镜像


1.2 在宿主机中创建挂载目录


    mkdir -p /data/text/nginx/{conf,html,logs}
    mkdir -p /data/text/tomcat/{webapps/ROOT,conf,logs}


目录结构

我们在 webapps/ROOT中创建index.html

<!DOCTYPE html>
<html>
<head>
        <meta charset="utf-8"/>
        <title>Nginx+tomcat集群</title>
</head>
<body>
        <h1>Nginx+tomcat集群部署示例</h1>
</body>
<html>


 2.准备2个tomcat 容器集群



docker run -d --name tomcat1 -v /data/text/tomcat/webapps:/usr/local/tomcat/webapps tomcat:9
docker run -d --name tomcat2 -v /data/text/tomcat/webapps:/usr/local/tomcat/webapps tomcat:9

容器的IP可以通过 docker inspect tomcat1 进行查看

3.准备 Nginx配置



修改nginx 配置文件

3.1启动Nginx容器



docker run -d -p 80:80 \
 --name nginx -v /data/text/nginx/html/:/usr/share/nginx/html \
  -v /data/text/nginx/conf/nginx.conf/:/etc/nginx/nginx.conf \
  -v /data/text/nginx/logs/:/var/log/nginx nginx


4.测试访问是否通过 



通过宿主机ip 进行访问

5. 容器之间的互相通信(ping)


5.1 两个容器在同一网段


5.1.1 首先创建一个网段叫mynet


5.1.2 在镜像images中的centos -7中创建两个同net的容器c1 和  c2,并且查看


 查看

 5.1.3 c1 ping c2


5.2

5.1.4 c2 ping c1


 注:此方法需要启动才能ping,所以使用前者直接ping

5.2 两个容器在不同网段


 5.2.1 首先使用bridge(与c1和c2网段不同)创建一个c3容器,并且查看


5.2.2 然后使用c1pingc3,可想而知是不行的,因为不是属于同一个网段,那么就会出些这行提示


注:c1pingc2,与c1pingc3对比

5.2.3 如果将c3加到mynet中就可以通过c1 ping c3了


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/146358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣(LeetCode)1658. 将 x 减到 0 的最小操作数(C++/Python)

题目描述 逆向思维滑动窗口 题目分析 &#xff1a; 从数组左侧和右侧&#xff0c;取出左侧的连续数字&#xff0c;右侧的连续数字&#xff0c;使得这些数字之和等于 x&#xff0c;维护最小取数次数&#xff0c;作为答案 。 设整个数组之和 total &#xff0c;除去左侧和右侧的…

Notes 12.0.2版本新特性

大家好&#xff0c;才是真的好。 随着上周代号多瑙河的Notes/Domino 12.0.2版本正式发布&#xff0c;很多人在周末加班&#xff0c;写新特性和功能测试文档等&#xff0c;恩&#xff0c;我也是这样&#xff0c;所以今天第一时间来介绍下Notes 12.0.2客户机新特性。 从12.0.2版…

GC中的一些技术

OopMap&#xff08;ordinary object pointer map&#xff09; 记录时机 JIT编译时在特定的位置&#xff08;安全点/安全区&#xff09;记录下OopMap&#xff0c;记录了执行到该方法的某条指令的时候&#xff0c;栈上和寄存器里哪些位置是引用类加载动作完成时&#xff0c;Hot…

关于sql注入这一篇就够了

本文章根据b站迪总课程总结出来,若有不足请见谅 目录 本文章根据b站迪总课程总结出来,若有不足请见谅 存在sql注入条件 判断数据库类型 注入mysql思路 判断网站是否存在注入点 判断列名数量&#xff08;字段数&#xff09; 文件读写操作 网站路径获取方法 注入类型 按注入点数据…

Linux物理内存:伙伴系统(buddy system)

引入之前写过一篇文章将伙伴系统&#xff0c;可以参考&#xff1a;内存池算法简介从上面的虚拟机上可以看到&#xff0c;X86系统上&#xff0c;有三个物理内存区&#xff0c;DMA&#xff0c;DMA32&#xff0c;Normal&#xff0c;可以看到阶数为11。struct page {atomic_t _mapc…

J DBC相关

JDBC基础什么是JDBC入门程序功能类工具类SQL注入攻击原理PreparedStatement的介绍数据库连接池原理自定义连接池归还连接JDBC框架自定义JDBC框架JDBC基础 什么是JDBC 用于执行SQL语句的java API&#xff0c;实现不同关系型数据库的连接 入门程序 导入jar包 注册驱动 获取连…

Linux驱动开发基础__gpio子系统重要概念

目录 1 引入 2 在设备树中指定引脚 3 在驱动代码中调用GPIO子系统 4 sysfs 中的访问方法 1 引入 要操作 GPIO 引脚&#xff0c;先把所用引脚配置为 GPIO 功能&#xff0c;这通过 Pinctrl 子系统来实现。 然后就可以根据设置引脚方向(输入还是输出)、读值──获得电平状…

Windows Docker Desktop开放API端口2375用于远程调用

Windows Docker Desktop开放API端口2375用于远程调用问题解决开启IP Helper服务开启Docker配置开放2375端口端口映射找到需要暴露的IP执行端口映射命令Windows防火墙关闭防火墙添加防火墙规则测试问题 Windows Docker Desktop为了安全&#xff0c;默认设置中只有localhost:237…

入门的葡萄酒知识

葡萄酒的分类&#xff08;根据制造方法&#xff09; 静态葡萄酒 红葡萄酒 Red Wine&#xff0c;白葡萄酒 White Wine&#xff0c;玫瑰红/桃红/粉红葡萄Rose Wine。 气泡&#xff08;起泡&#xff09;葡萄酒 有气泡的葡萄酒&#xff0c;分香槟Champagne及气泡葡萄酒两类。只有在…

Servlet(上)

Servlet组件(上) 学习目标 了解Web资源的概念了解为什么需要Servlet掌握Servlet是什么掌握Servlet的HelloWorld掌握Servlet的执行原理掌握Servlet的生命周期和生命周期方法掌握ServletConfig的使用掌握Servlet的体系结构掌握Servlet的映射路径的编写方式掌握创建Servlet最常用…

机器学习简单介绍

机器学习简介 定义 机器学习是人工智能(AI)和计算机科学的一个分支&#xff0c;专注于使用数据和算法来模仿人类的学习方式&#xff0c;逐步提高其准确性。 简单来说&#xff0c;是一种运用数学公式来对问题进行最优化求解的方法 分类 一般来说将&#xff1a;机器学习分为…

睿联技术在创业板过会:收入依赖摄像机单机,计划募资11亿元

2023年1月6日&#xff0c;深圳证券交易所披露的信息显示&#xff0c;深圳市睿联技术股份有限公司&#xff08;下称“睿联技术”&#xff09;获得创业板上市委员会审议通过。据贝多财经了解&#xff0c;睿联技术的上市申请于2022年6月2日获得创业板受理。 本次冲刺创业板上市&am…

Unity 3D 地形系统概述|| Unity 3D 创建地形

在三维游戏世界中&#xff0c;通常会将丰富多彩的游戏元素融合在一起&#xff0c;比如游戏中起伏的地形、郁郁葱葱的树木、蔚蓝的天空、、凶恶的猛兽等&#xff0c;营造出身临其境的游戏沉浸感&#xff0c;让玩家置身游戏世界&#xff0c;忘记现实。 地形作为游戏场景中必不可…

Git 基本概念

一、git 官网 https://git-scm.com/ 二、git 数据传输命令 三、基本操作 1、命令整理 命令说明git init初始化 git 库git config获取和设置存储库或全局配置项git status显示工作树状态git add将文件内容添加到index(暂存区)git commit将index(暂存区)修改提交到本地仓库gi…

你知道微服务架构中的“发件箱模式”吗

前言 微服务架构如今非常的流行&#xff0c;这个架构下可能经常会遇到“双写”的场景。双写是指您的应用程序需要在两个不同的系统中更改数据的情况&#xff0c;比如它需要将数据存储在数据库中并向消息队列发送事件。您需要保证这两个操作都会成功。如果两个操作之一失败&…

数据结构与算法—稀疏数组

稀疏数组 稀疏数组与二维数组 当一个数组中大部分元素都是0&#xff0c;或者为同一个值的数组时&#xff0c;可以使用稀疏数组来保存该数组。 二维数组转成稀疏数组&#xff1a; 从图中可以看出&#xff1a; 稀疏数组的行、列、值的 &#xff08;1&#xff09;[0]行&#x…

linux下软硬链接到底是什么?

文章目录前言硬链接软链接前言 在了解软硬链接之前&#xff0c;可以先来了解一下磁盘以及inode到底是什么 Linux文件管理—磁盘上文件如何管理&#xff08;inode&#xff09; 硬链接 什么是硬链接 在Linux下&#xff0c;系统标识文件的唯一方式就是inode号&#xff0c;而对…

【初阶数据结构】——双“指针”求解数组常见问题

文章目录前言题目1&#xff1a;移除元素思路1&#xff1a;暴力求解思路2&#xff1a;时间换空间思路3&#xff1a;双指针原地删除&#xff08;解法2的再优化&#xff09;思路分析代码实现题目2&#xff1a;删除有序数组中的重复项思路&#xff1a;双指针代码实现题目3&#xff…

【JavaScript】BOM 学习总结

基础知识&#xff1a; 获取浏览器窗口的尺寸&#xff1a; innerHeight&#xff1a;获取高度 innerWidth&#xff1a;获取宽度 跳转与刷新 location.href location.reload() body><button id"btn">跳转到下一个页面</button><button id"btn…

Java实现文件操作

目录 一、文件概述 二、常见文件操作 1、获取文件路径 2、判断文件存在以及判断类型 3、文件的创建与删除 4、展示文件夹的文件 5、创建文件夹 三、用数据流来读取文件内容 1、操作字节流文件 a、读取字节流文件 b、写字节流文件 2、操作字符流对象 a、读取…