欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

項目訪問使用docker bridge網(wǎng)絡(luò)模式(端口映射)配置過程

 更新時間:2025年03月21日 09:31:13   作者:java阿杜  
這篇文章主要介紹了項目訪問使用docker bridge網(wǎng)絡(luò)模式(端口映射)配置過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

在平常的開發(fā)工作中,我們經(jīng)常需要部署項目。比如部署測試環(huán)境、生產(chǎn)環(huán)境等,使用 docker 方式部署很便捷,可以有效的減少同樣的代碼換環(huán)境運(yùn)行的問題。docker 常見的網(wǎng)絡(luò)模式有 host、bridge 等。host 模式直接共享宿主機(jī)的網(wǎng)絡(luò)棧,容器之間沒有進(jìn)行網(wǎng)絡(luò)隔離,容器內(nèi)的應(yīng)用監(jiān)聽的端口會直接映射到主機(jī)的端口上,無需進(jìn)行端口映射,網(wǎng)絡(luò)安全性相對較差。bridge 是 docker 默認(rèn)的網(wǎng)絡(luò)模式 ,docker 守護(hù)進(jìn)程會建立 docker0 的虛擬網(wǎng)橋,容器會連接到這個網(wǎng)橋上,并獲得一個獨(dú)立的 IP 地址,容器之間及容器與外部網(wǎng)絡(luò)之間都通過 docker0 網(wǎng)橋進(jìn)行通信,需要進(jìn)行網(wǎng)絡(luò)地址轉(zhuǎn)換 (NAT)。今天,我們總結(jié)下 bridge 橋接模式的用法。

一:概述

bridge 模式為 docker 默認(rèn)的網(wǎng)絡(luò)模式,docker 會創(chuàng)建一個 docker0 的虛擬網(wǎng)橋。主要用于連接宿主機(jī)和容器之間的網(wǎng)絡(luò)通信。通過創(chuàng)建虛擬的橋接設(shè)備,將物理網(wǎng)絡(luò)接口與虛擬網(wǎng)絡(luò)網(wǎng)絡(luò)接口連接起來,進(jìn)行網(wǎng)絡(luò)隔離,使得容器的訪問更加的安全。

在同一 bridge 網(wǎng)絡(luò)中,容器可以通過 IP 地址或者容器名互相訪問,每個容器有獨(dú)立的 IP 地址,網(wǎng)絡(luò)內(nèi)部有 DNS 解析服務(wù),將容器名解析到對應(yīng)的 IP 地址,實現(xiàn)通過容器名訪問。

二:docker 網(wǎng)絡(luò)命令

1:查看所有的網(wǎng)絡(luò):

docker network ls

2:創(chuàng)建網(wǎng)絡(luò):

docker network create my_network

3:刪除網(wǎng)絡(luò):

docker network rm my_network

4:查看網(wǎng)絡(luò)詳細(xì)信息:

docker network inspect my_network

5:將容器連接到網(wǎng)絡(luò):

docker network connect my_network my_container

6:將容器與某個網(wǎng)絡(luò)的連接斷開:

docker network disconnect my_network my_container

7:刪除未使用的網(wǎng)絡(luò):docker network prune

三:nginx 端口映射

在 docker-compose.yml 文件中進(jìn)行端口映射,配置使用 my_network 自定義網(wǎng)絡(luò),如下:

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

# 如果定義了多個服務(wù),自定義網(wǎng)絡(luò)一定要放在配置文件末尾
networks:
  my_network:
    external: true
    drive: bridge

ports 端口相關(guān)配置命令解釋:

指將容器的端口映射到宿主機(jī)端口上,格式為:宿主機(jī)端口:容器端口,80 端口映射為 http 方式訪問默認(rèn)端口,443 端口為 https 方式訪問默認(rèn)端口。

8090 一般為自定義的端口映射。通過 ports 端口映射,瀏覽器等可以通過宿主機(jī)的 IP 和端口訪問容器內(nèi)的服務(wù)。如果沒有 ports 映射,容器內(nèi)的服務(wù)只能在 Docker 網(wǎng)絡(luò)內(nèi)部訪問,外部網(wǎng)絡(luò)無法訪問。通過 ports 端口映射,可以靈活便捷的管理端口。

瀏覽器能訪問的端口必須在 ports 中定義,否則外部網(wǎng)絡(luò)無法訪問容器內(nèi)的服務(wù)。如果不需要外部網(wǎng)絡(luò)訪問,僅容器之間互相通信,可以不配置 ports,使用 Docker 內(nèi)部網(wǎng)絡(luò)即可。

四:后端服務(wù)端口配置

1:Dockerfile 配置

# 使用OpenJDK 17基礎(chǔ)鏡像
FROM openjdk:17
RUN mkdir -p /ruoyi/logs
# 切換工作目錄
WORKDIR /ruoyi
# 配置環(huán)境變量
ENV SERVER_PORT=9016 \
    LC_ALL=C.UTF-8 \
    JAVA_OPTS=""
# 暴露應(yīng)用端口
EXPOSE 9016
# 添加應(yīng)用Jar包到容器中
ADD ruoyi-admin.jar ./app.jar
# 設(shè)置容器的啟動命令,支持暴露兩個端口
ENTRYPOINT ["java", \
           "-Dserver.port=${SERVER_PORT}", \
           "-jar", "app.jar"]

端口配置相關(guān)命令解釋:

ENV SERVER_PORT=9016:如果項目中是動態(tài)獲取監(jiān)聽端口,那么需要在 Dockerfile 中進(jìn)行配置是必要的,如果在應(yīng)用程序中已經(jīng)硬編碼了監(jiān)聽端口,那么在 Dockerfile 中 ENV SERVER_PORT=9016 設(shè)置就沒有實際意義。

EXPOST 端口1 端口2:這個暴露的端口其實是一種指導(dǎo)作用,EXPOSE 并不會真正的將端口暴露給外部網(wǎng)絡(luò),容器內(nèi)的應(yīng)用程序是否監(jiān)聽該端口,宿主機(jī)能否訪問該端口,要通過其他配置實現(xiàn),實際是指導(dǎo)告訴鏡像的使用人員應(yīng)用程序可能監(jiān)聽了這些端口。一般為了使用清晰和方便端口管理,建議EXPOSE 的端口和應(yīng)用程序監(jiān)聽的端口保持一致。使用時注意,防止端口沖突。

2:后端項目 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

3:nginx.conf 配置

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    server {
        listen 8090;
        server_name localhost;

	    charset utf-8;

        location / {
           # 容器之間通過 IP 互相訪問
           proxy_pass http://172.24.0.2:9016;
           # 容器之間通過 容器名稱 互相訪問
           proxy_pass http://ruoyi-admin:9016;
           index index.html index.htm;
        }
    }
}

注意:

在自定義 docker 網(wǎng)絡(luò)中,每個容器之間網(wǎng)絡(luò)是隔離的。localhost 在每個容器中都指向容器自身的網(wǎng)絡(luò)接口。當(dāng)用 localhost 轉(zhuǎn)發(fā)時,會轉(zhuǎn)發(fā)到 nginx 容器自身,而不是后端服務(wù)。在這種情況下,應(yīng)該使用容器在 docker 內(nèi)的 IP 地址或者 容器名稱進(jìn)行互相通信。

當(dāng)網(wǎng)絡(luò)模式為 host 模式時,共享主機(jī)的網(wǎng)絡(luò)棧,容器和宿主機(jī)共享相同的 IP 地址和端口。容器內(nèi)的 localhost 即 宿主機(jī)的 localhost。那么在 nginx 文件中配置 http://localhost:端口號 時,就可以轉(zhuǎn)發(fā)到對應(yīng)的后端服務(wù)。nginx 容器和后端服務(wù)都在同一網(wǎng)絡(luò)環(huán)境下,localhost 能夠指向宿主機(jī)上的對應(yīng)端口。

五:測試

啟動 nginx、啟動 java 項目,輸入 nginx 監(jiān)聽的端口或者 后端服務(wù)docker-compose.yml 中定義的端口映射,訪問成功,頁面如下:

六:總結(jié)

如果是開發(fā)環(huán)境,可以直接使用 host 網(wǎng)絡(luò)模式,直接共享宿主機(jī)的網(wǎng)絡(luò)棧,使用起來更加的方便,減少端口管理問題。

如果是測試環(huán)境或者生產(chǎn)環(huán)境,建議使用自定義網(wǎng)絡(luò)模式,不同的容器在不同的網(wǎng)絡(luò)模式中,可以保證容器訪問的安全,與外部網(wǎng)絡(luò)互相隔離。容器內(nèi)部之間可以通過 docker 內(nèi)部網(wǎng)絡(luò) IP 地址或者容器名稱進(jìn)行互相通信。使用自定義網(wǎng)絡(luò)模式,一定要注意端口映射,端口管理相對復(fù)雜。

network_mode 和 networks 都是 docker 網(wǎng)絡(luò)配置相關(guān)。network_mode 直接指定網(wǎng)絡(luò)模式,支持 bridge、host、none 等模式。只支持一種網(wǎng)絡(luò)模式。networks 支持自定義網(wǎng)絡(luò)、多網(wǎng)絡(luò)配置,支持 bridge、overlay 等驅(qū)動,支持一個容器加入多個網(wǎng)絡(luò)。

使用自定義網(wǎng)絡(luò),如果后端服務(wù)沒有暴露端口,那么要確保 nginx、后端服務(wù)等容器在同一個 docker 網(wǎng)絡(luò)中,這樣在瀏覽器中能訪問 nginx 監(jiān)聽的端口轉(zhuǎn)發(fā)到后端服務(wù)。使用自定義網(wǎng)絡(luò),就是為了網(wǎng)絡(luò)隔離,容器一般情況下不給外部暴露端口。如 mysql 服務(wù) 和 后端服務(wù)沒有在同一個自定義網(wǎng)絡(luò)中,但是ports 主要就是將容器內(nèi)的端口映射到宿主機(jī)的端口,允許外部網(wǎng)絡(luò)訪問容器內(nèi)的服務(wù)。后端項目如果沒有定義 ports,外部網(wǎng)絡(luò)無法直接訪問后端服務(wù),nginx 可以通過容器名稱訪問后端服務(wù)。nginx 定義了 ports,將宿主機(jī)的端口映射到容器的端口上,外部網(wǎng)絡(luò)可以訪問 nginx,nginx 將請求轉(zhuǎn)發(fā)到后端服務(wù)。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Docker?搭建?RabbitMQ的詳細(xì)過程

    Docker?搭建?RabbitMQ的詳細(xì)過程

    在現(xiàn)代微服務(wù)與分布式架構(gòu)中,RabbitMQ?是一款成熟的開源消息隊列中間件,提供了可靠的消息投遞、豐富的路由策略和管理插件,本文將詳細(xì)介紹Docker?搭建?RabbitMQ的過程,感興趣的朋友一起看看吧
    2025-04-04
  • docker磁盤空間清理的解決辦法

    docker磁盤空間清理的解決辦法

    前段時間遇到docker磁盤空間太少,無法寫入數(shù)據(jù)的問題。本文就來介紹一下docker磁盤空間清理的解決辦法,感興趣的可以了解一下
    2021-06-06
  • Docker部署Django的詳細(xì)指南

    Docker部署Django的詳細(xì)指南

    部署Django應(yīng)用到Docker中的詳細(xì)步驟是一個較為復(fù)雜的過程,涉及到許多技術(shù)和工具的結(jié)合使用,本文將詳細(xì)介紹如何從零開始使用Docker部署Django應(yīng)用,感興趣的小伙伴跟著小編一起來看看吧
    2024-12-12
  • Docker下利用jenkins和docker實現(xiàn)持續(xù)交付

    Docker下利用jenkins和docker實現(xiàn)持續(xù)交付

    這篇文章主要介紹了利用jenkins和docker實現(xiàn)持續(xù)交付功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • docker搭建CMS點(diǎn)播系統(tǒng)帶播放器功能

    docker搭建CMS點(diǎn)播系統(tǒng)帶播放器功能

    熟悉docker的童鞋都知道,安裝是非常的便利的,也可以在線體驗的,今天通過本文給大家介紹docker搭建CMS點(diǎn)播系統(tǒng)帶播放器功能,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • 使用Docker Compose部快速署ELK(親測有效)

    使用Docker Compose部快速署ELK(親測有效)

    這篇文章主要介紹了Docker Compose部署ELK的詳細(xì)過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Docker鏡像上傳到阿里云的步驟詳解

    Docker鏡像上傳到阿里云的步驟詳解

    本篇文章主要介紹了Docker鏡像上傳到阿里云的步驟詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 將普通用戶加入Docker組,使用docker問題

    將普通用戶加入Docker組,使用docker問題

    這篇文章主要介紹了將普通用戶加入Docker組,使用docker問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Docker Compose 容器編排的實現(xiàn)

    Docker Compose 容器編排的實現(xiàn)

    本文主要介紹了Docker Compose 容器編排的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • windows安裝Docker與docker-compose套裝的詳細(xì)教程

    windows安裝Docker與docker-compose套裝的詳細(xì)教程

    這篇文章主要介紹了windows安裝Docker與docker-compose套裝的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論