问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Docker Bridge网络模式配置详解:从基础概念到实战应用

创作时间:
作者:
@小白创作中心

Docker Bridge网络模式配置详解:从基础概念到实战应用

引用
CSDN
1.
https://m.blog.csdn.net/qq_36833673/article/details/145821813

在Docker容器化部署中,网络配置是一个关键环节。本文将详细介绍Docker的bridge网络模式,包括其工作原理、常用网络命令、端口映射配置以及实际应用中的注意事项。

一、Bridge模式概述

Bridge模式是Docker默认的网络模式。在这种模式下,Docker守护进程会创建一个名为docker0的虚拟网桥,容器连接到这个网桥上并获得独立的IP地址。容器之间以及容器与外部网络之间的通信都通过docker0网桥进行,需要进行网络地址转换(NAT)。

这种模式的主要优点是提供了网络隔离,每个容器都有独立的IP地址,并且桥接网络内部有DNS解析服务,可以将容器名解析为对应的IP地址,实现通过容器名访问。

二、Docker网络命令

以下是常用的Docker网络管理命令:

  1. 查看所有网络:docker network ls
  2. 创建网络:docker network create my_network
  3. 删除网络:docker network rm my_network
  4. 查看网络详细信息:docker network inspect my_network
  5. 将容器连接到网络:docker network connect my_network my_container
  6. 将容器与某个网络的连接断开:docker network disconnect my_network my_container
  7. 删除未使用的网络:docker network prune

三、Nginx端口映射配置

docker-compose.yml文件中进行端口映射配置,使用自定义的my_network网络:

services:
  nginx:
    image: nginx:latest
    container_name: nginx
    environment:
      TZ: Asia/Shanghai
    ports:
- "80:80"
- "443:443"
- "8090:8090"
    volumes:
- /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /usr/local/docker:/usr/share/nginx/html
    privileged: true
    networks: 
- my_network
networks:
  my_network:
    external: true
    driver: bridge

ports配置用于将容器的端口映射到宿主机端口,格式为宿主机端口:容器端口。如果没有进行端口映射,容器内的服务只能在Docker网络内部访问,外部网络无法访问。

四、后端服务端口配置

Dockerfile配置

在Dockerfile中配置端口:

FROM openjdk:17
RUN mkdir -p /ruoyi/logs
WORKDIR /ruoyi
ENV SERVER_PORT=9016 \
    LC_ALL=C.UTF-8 \
    JAVA_OPTS=""
EXPOSE 9016
ADD ruoyi-admin.jar ./app.jar
ENTRYPOINT ["java", \
           "-Dserver.port=${SERVER_PORT}", \
           "-jar", "app.jar"]

EXPOSE指令主要用于指导镜像使用者该容器监听的端口,实际的端口映射需要在运行时通过-p参数或docker-compose.yml中的ports配置实现。

docker-compose.yml配置

services:
  ruoyi-admin:
    image: ruoyi-admin:v1.0
    container_name: ruoyi-admin
    ports:
- "9016:9016"
    environment:
- SERVER_PORT=9016
- TZ=Asia/Shanghai
    restart: always
    networks:
- my_network
networks:
  my_network:
    external: true

Nginx配置

在Nginx配置文件中,需要使用容器的IP地址或容器名称进行反向代理:

server {
    listen 8090;
    server_name localhost;
    charset utf-8;
    location / {
        proxy_pass http://172.24.0.2:9016;
        # 或者使用容器名称
        # proxy_pass http://ruoyi-admin:9016;
        index index.html index.htm;
    }
}

注意:在自定义Docker网络中,每个容器的localhost都指向容器自身的网络接口。因此,当需要容器间通信时,应使用容器的IP地址或容器名称,而不是localhost

五、测试

启动Nginx和Java项目后,可以通过访问Nginx监听的端口或后端服务映射的端口来验证配置是否成功。

六、总结

  • 开发环境建议使用host网络模式,因为它更简单,不需要管理端口映射。
  • 测试和生产环境建议使用自定义网络模式,以实现更好的网络隔离。
  • 使用自定义网络时,需要特别注意端口映射和容器间的通信方式。
  • network_modenetworks都是Docker网络配置相关,但功能有所不同:network_mode用于指定网络模式,而networks用于配置自定义网络。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号