首页 > 其他分享 >Docker多容器和通信搭建(二)

Docker多容器和通信搭建(二)

时间:2024-03-05 15:22:25浏览次数:231  
标签:容器 network 80 nginx Docker docker 搭建

前言

  前面介绍了Docker容器的基础服务搭建,对于Docker容器来说一般都是多个容器项目运行在服务器上。所以这篇主要讲述多容器之间的交互,以及宿主与容器之间的交互问题。

一、部署多容器

  接着以Nginx为例,部署多个Nginx容器进行测试。

~]# docker run -d --name nginx -p 80:80 nginx:1.23 #若创建nginx容器,-d后台运行,-p映射 本地端口:容器端口,指定版本1.23
~]# docker run -d --name nginx2 -p 82:80 nginx:1.23
~]# docker run -d --name nginx3 -p 83:80 nginx:1.23

  部署了3个Nginx容器,然后使用docker ps进行查看。这里可以看到CONTAINER ID和NAMES一般都是唯一,STATUS是状态,UP 42 hours是存活时间,

  PORTS端口映射,前面0.0.0.0:84->80/tcp 是宿主端口对应容器端口,后面:::84->80/tcp是IPv6的映射。

~]# docker ps 
~]# docker ps -a #全部的容器,包括未运行容器

 

二、通信配置

  一般Nginx为负载均衡,反向代理等功能,所以会访问其他容器内的项目。但是Docker默认通信是存在不确定性,主要IP是根据哪个容器先启动先分配,而且每次IP都可能不一样。

~]# docker inspect nginx #查看nginx的信息

  找到下面的信息,因为Docker容器默认的Networks是bridge桥接方式,它是独立一个虚拟桥接网络,所以需要端口映射。

  IPAddress地址也是动态分配的,所以当将nginx2跟nginx3启动顺序调换,这会使双方IP调换。但是容器之间是使用IP进行访问,若需要访问172.17.0.5时,下一次启动变了,则需要重新更改配置。

   为了处理这种情况,目前了解到有两种方式:

  一、将bridge改成host模式,host网络模式是将容器网络完全暴露在宿主网络中,与其共享同一个网络。这也使容器潜在的风险加大,而且host模式只存在Linux环境下,bridge能适应任何Docker支持的环境中。(不推荐)

  二、使用Docker的network通信,创建一个新的虚拟网络,然后将需要通信的容器加入到新的虚拟网络中。(推荐)

三、Docker network通信

  下面介绍docker network的使用,先创建一个network网络。

~]# docker network create –-driver bridge  my_network   #--driver bridge指定了网络驱动类型为桥接模式(这是默认类型,通常可以省略)。

  接着创建Nginx容器,并且接入到my_custom_network

~]# docker run -d --name my_nginx --network my_network -p 80:80 nginx  

  或者连接已经存在的Nginx容器

~]# docker network connect my_network nginx 
~]# docker network connect my_network nginx1 nginx2 #多容器连接
~]# docker network disconnect my_network nginx1 #断开连接

  在Nginx容器中可以进行,代理转发的配置。Docker network使用容器名称进行访问,这样就避免IP变动问题。

例如nginx中可以配置 proxy_pass   http://nginx2:80; 这里的80端口是容器内部的端口,而不是映射到宿主的82端口

   使用docker network ls 查看网络的列表。

~]# docker network ls

  还有两个删除命令。

~]# docker prune #删除未使用的网络
~]# docker rm my_network #删除指定的网络,可多个

 

  以上介绍了多容器部署管理,及容器之间的交互。

 

标签:容器,network,80,nginx,Docker,docker,搭建
From: https://www.cnblogs.com/zrl66/p/18054101

相关文章

  • ConfigMap挂载与Subpath在Nginx容器中的应用
    本文分享自华为云社区《nginx.conf以configmap文件形式挂载到nginx容器中以及subpath使用场景》,作者:可以交个朋友。背景nginx.conf通过configmap文件形式挂载到容器内,可以更加方便的修改nginx.conf配置方案简介将配置文件nginx.conf以configmap文件的方式挂载到容器中。为了更......
  • docker安装Rabbitmq
    搜索rabbitmq镜像dockersearchrabbitmq默认拉取最新版本镜像dockerpullrabbitmq创建并运行rabbitmq容器dockerrun-d--hostnamemy-rabbit--namemy-rabbit-p15672:15672-p5673:5672rabbitmq-d:该选项表示在后台(detachedmode)运行Docker容器,即启动一个守护......
  • 从零开始写 Docker(四)---使用 pivotRoot 切换 rootfs 实现文件系统隔离
    change-rootfs-by-pivot-root.png本文为从零开始写Docker系列第四篇,在mydockerrun基础上使用pivotRoot系统调用切换rootfs实现容器和宿主机之间的文件系统隔离。完整代码见:https://github.com/lixd/mydocker欢迎Star推荐阅读以下文章对docker基本实现有一个大......
  • 怎么使用Docker运行Python代码
    需要使用Docker镜像运行Python代码编写Dockefile文件示例如下#需要使用的镜像版本FROMpython:3.11#代码工作目录WORKDIR/code#拷贝依赖文件COPYrequirements.txtrequirements.txt#安装依赖RUNpipinstall-rrequirements.txt-ihttps://pypi.doubanio.com/......
  • Docker容器实战(00)-基础命令大全
    1容器生命周期管理1.1dockerstart启动一或多个已被停止的容器。#启动已被停止的容器myrunoobdockerstartmyrunoob1.2dockerstop停止一个运行中的容器dockerstopmyrunoob1.3dockerrestart重启容器dockerrestartmyrunoob1.4dockerrun创建一个新的容......
  • 使用 Docker 安装 Jenkins 的最佳方式
    说在前面本篇内容非常简单,讲述了如何快速在Docker上部署一个Jenkins实例,避免多采坑,浪费不必要的练习时间。本文实验环境:操作系统:Centos7.5DockerVersion:18.09.6下载镜像打开终端,输入dockersearch命令搜索DockerHub上可用的Jenkins镜像:$dockersearchjenkin......
  • 在Docker中,镜像内没有curl,kill,ipconfig等指令如何添加?
    在Docker中,如果镜像内没有curl、kill、ipconfig(在Linux中通常是ip命令)等指令,你可以通过修改Dockerfile来添加它们。下面我将详细解释如何添加这些指令:1.添加curl如果镜像基于Debian或Ubuntu等使用APT作为包管理器的系统,你可以在Dockerfile中使用apt-get来安装curl:FROMyour_ba......
  • 在Docker中,docker commit生成的镜像和dockerfile生成镜像有什么区别?
    在Docker中,dockercommit和基于Dockerfile构建镜像的过程和区别主要包括以下几个方面:1.dockercommit过程与特点:过程:启动一个容器,通常基于某个基础镜像。在容器内部执行各种操作,例如安装软件、修改配置文件等。使用dockercommit命令将容器的当前状态保存为新......
  • 在Docker中,本地的镜像文件都存放在哪里?
    在Docker中,镜像(Images)保存在本地文件系统中,具体的保存位置取决于您使用的操作系统。以下是一些常见操作系统的Docker镜像保存位置:Linux:默认情况下,Docker镜像保存在/var/lib/docker/目录下。当您使用dockerpull命令从DockerHub或私有镜像仓库中拉取镜像时,Docker会自动将镜......
  • 在Docker中,docker add copy有什么区别?
    在Docker中,ADD和COPY命令都用于将文件或目录从构建上下文复制到Docker镜像中,但它们之间存在一些重要的区别。源文件类型和处理方式:COPY命令仅支持从构建上下文中复制本地文件或目录到容器中。如果源路径是目录,它会递归复制该目录及其内容。如果源文件是归档文件(如.tar或.zip),它......