Docker——自定义网络实现

本文介绍了Docker的四种网络模式,并详细讲解了如何创建和使用自定义网络实现容器间的互联。通过`docker network create`命令配置桥接模式网络,并在该网络下启动多个容器,实现了容器之间的互相通信。此外,还演示了如何使用`docker network connect`命令将已有容器连接到自定义网络,从而实现网络连通。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker——自定义网络实现

1、自定义网络实现容器互联

四类网络模式,使用docker network ls查看docker网络模式

Docker网络模式配置说明
host模式–net=host容器和宿主机共享Network namespace。
container模式–net=container:NAME_or_ID容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace。
none模式–net=none容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。
bridge模式–net=bridge桥接模式(默认为该模式)

–net=bridge 这个是默认值,连接到默认的网桥。

–net=host 告诉 Docker 不要将容器网络放到隔离的名字空间中,即不要容器化容器内的网络。此时容器使用本地主机的网络,它拥有完全的本地主机接口访问权限。容器进程可以跟主机其它 root 进程一样可以打开低范围的端口,可以访问本地网络服务比如 D-bus,还可以让容器做一些影响整个主机系统的事情,比如重启主机。因此使用这个选项的时候要非常小心。如果进一步的使用 --privileged=true,容器会被允许直接配置主机的网络堆栈。

–net=container:NAME_or_ID 让 Docker 将新建容器的进程放到一个已存在容器的网络栈中,新容器进程有自己的文件系统、进程列表和资源限制,但会和已存在的容器共享 IP 地址和端口等网络资源,两者进程可以直接通过 lo 环回接口通信。

–net=none 让 Docker 将新容器放到隔离的网络栈中,但是不进行网络配置。之后,用户可以自己进行配置。

自定义网络

# --driver bridge 桥接模式
# --subnet 192.168.0.0/16 子网络网段
# --gateway 192.168.0.1 网关
# mynet 网络名
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

在这里插入图片描述

查看自定义的网络信息:

docker network inspect mynet

在这里插入图片描述

在自定义的网路中创建容器

docker run -d -P --name tomcat01-net-01 --net mynet tomcat
docker run -d -P --name tomcat01-net-02 --net mynet tomcat

在这里插入图片描述

再次查看自定义的网络信息:发现新创建的两个容器添加进网络中了。

在这里插入图片描述

使用容器名互相进行ping测试

tomcat01-net-01 ping tomcat01-net-02:

在这里插入图片描述

tomcat01-net-02ping tomcat01-net-01:

在这里插入图片描述

现在不使用 --link 容器间也可以互相 ping 通了,容器间可以互相通信。

2、网络连通

需求分析图

在这里插入图片描述

创建tomcat01和tomcat02两个容器:

docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat02 tomcat

在这里插入图片描述

很明显,直接ping通是不可能的,需要先把tomcat01容器和mynet网络连通。

docker network connect

docker network connect 命令是用于将 docker 容器连接到某个网络中,可以使用容器名或者容器ID。

用法:

docker network connect [OPTIONS] NETWORK CONTAINER

把tomcat01容器连接到mynet网络上:

docker network connect mynet tomcat01

查看mynet的网络信息:docker inspect mynet

在这里插入图片描述

tomcat01已经连接到mynet网络上,像tomcat01-net-tomcat01和tomcat01-net-tomcat02一样。

此时,tomcat01已经和mynet网络中的两个容器连接起来,因为这三个容器处于同一网络中,当然可以互相通信:

在这里插入图片描述

一个容器两个网络:

查看tomcat01的元数据:docker inspect tomcat01

在这里插入图片描述

tomcat01连接到自定义的mynet网络后,就有两个网络了。

### 使用 Docker 部署基于 Java 的 CRMDB 应用 #### 准备工作 为了成功部署基于 Java 的 CRMDB 应用程序,需先安装并配置好 DockerDocker Compose 工具。确保环境满足最低硬件需求以及网络连接正常。 #### 构建镜像 构建自定义Docker 镜像是第一步。假设已有一个 Maven 或 Gradle 项目结构的应用源码,可以编写 `Dockerfile` 来描述如何打包应用程序到容器中: ```dockerfile FROM openjdk:17-jdk-alpine WORKDIR /app COPY target/my-app.jar my-app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app/my-app.jar"] ``` 此脚本指定了基础镜像为 OpenJDK 版本 17,并将编译后的 JAR 文件复制进去作为入口点运行[^1]。 #### 编写 docker-compose.yml 文件 对于多服务架构下的应用(比如包含数据库),可以通过 `docker-compose.yml` 文件来简化管理多个关联的服务实例的过程。下面是一个简单的例子用于说明如何设置 Web 应用及其对应的 MySQL 数据库服务: ```yaml version: '3' services: crmdb-web: build: . ports: - "8080:8080" environment: SPRING_DATASOURCE_URL: jdbc:mysql://crmdb-db:3306/crm?useSSL=false&serverTimezone=UTC SPRING_JPA_HIBERNATE_DDL_AUTO: update depends_on: - crmdb-db crmdb-db: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: crm volumes: - db-data:/var/lib/mysql volumes: db-data: ``` 这段 YAML 文档定义了一个名为 `crmd-web` 的前端服务和一个名为 `crmdb-db` 后端数据存储节点之间的关系。通过指定依赖项 (`depends_on`) 可以控制启动顺序;而持久化卷则用来保存重要的数据库状态信息防止丢失[^4]。 #### 运行与测试 完成上述准备工作之后,在终端执行如下指令即可一键拉起整个系统: ```bash $ docker-compose up --build ``` 这会自动下载所需的镜像资源、建立必要的网络链接并将所有组件按照设定的方式组合起来共同运作。访问 http://localhost:8080 即可查看正在工作的 CRMDB 应用了。 如果遇到任何问题,如“No DataSource set”,可能是因为 Spring Boot 应用未能正确初始化其数据源连接池。此时建议进入具体的服务容器内部进一步排查错误日志或调整参数配置[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万里顾—程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值