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

Docker網(wǎng)絡(luò)配置與自定義IP容器通信

 更新時(shí)間:2024年03月06日 15:39:00   作者:????????云村小威  
IP地址是Docker容器在網(wǎng)絡(luò)中的唯一標(biāo)識(shí),每個(gè)Docker都會(huì)被分配一個(gè) IP,用于網(wǎng)絡(luò)通信,本文主要介紹了Docker網(wǎng)絡(luò)配置與自定義IP容器通信,感興趣的可以了解一下

前言

當(dāng)項(xiàng)目大規(guī)模使用 Docker 時(shí),容器通信的問題也就產(chǎn)生了。要解決容器通信問題,必須先了解很多關(guān)于網(wǎng)絡(luò)的知識(shí)。Docker 作為目前最火的輕量級(jí)容器技術(shù),有很多令人稱道的功能,如 Docker 的鏡像管理。然而,Docker 同樣有著很多不完善的地方,網(wǎng)絡(luò)方面就是 Docker 比較薄弱的部分。因此,我們有必要深入了解 Docker 的網(wǎng)絡(luò)知識(shí),以滿足更高的網(wǎng)絡(luò)需求。

互聯(lián)網(wǎng)是由許多小型網(wǎng)絡(luò)構(gòu)成的,每個(gè)網(wǎng)絡(luò)上都有許多主機(jī),這樣便構(gòu)成了一個(gè)有層次的結(jié)構(gòu)。 IP地址在設(shè)計(jì)時(shí)就考慮到地址分配的層次特點(diǎn),將每個(gè)IP地址都分割成網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)兩部分,以便于 IP地址的尋址操作。

1、子網(wǎng)掩碼

子網(wǎng)掩碼用于劃分網(wǎng)絡(luò)和主機(jī)部分。子網(wǎng)掩碼用來區(qū)分一個(gè)IP地址中的網(wǎng)絡(luò)地址和主機(jī)地址部分,幫助進(jìn)行網(wǎng)絡(luò)分割和管理。

組成規(guī)則

  • 子網(wǎng)掩碼由32位組成,通常表示為4個(gè)8位的數(shù)字(例如255.255.255.0)。
  • 在子網(wǎng)掩碼中,連續(xù)的“1”代表網(wǎng)絡(luò)部分,而連續(xù)的“0”則代表主機(jī)部分。
  • 例如,子網(wǎng)掩碼255.255.255.0表示前24位是網(wǎng)絡(luò)地址,最后8位是主機(jī)地址。

2、網(wǎng)關(guān)

網(wǎng)關(guān)通常指的是兩個(gè)網(wǎng)絡(luò)之間的接口設(shè)備,它可以在不同的網(wǎng)絡(luò)或子網(wǎng)間轉(zhuǎn)發(fā)數(shù)據(jù)。

作用

  • 網(wǎng)關(guān)可以將來自一個(gè)網(wǎng)絡(luò)的數(shù)據(jù)包轉(zhuǎn)發(fā)到另一個(gè)網(wǎng)絡(luò)。
  • 它通常用于連接本地網(wǎng)絡(luò)(LAN)和大型網(wǎng)絡(luò)(如互聯(lián)網(wǎng))。

當(dāng)一個(gè)網(wǎng)絡(luò)中的設(shè)備需要與另一個(gè)網(wǎng)絡(luò)中的設(shè)備通信時(shí),數(shù)據(jù)包首先發(fā)送到網(wǎng)關(guān)。然后,網(wǎng)關(guān)判斷如何將數(shù)據(jù)包發(fā)送到目的地。

3、子網(wǎng)掩碼和網(wǎng)關(guān)的關(guān)系

  • 子網(wǎng)掩碼用于確定網(wǎng)絡(luò)的范圍,而網(wǎng)關(guān)則用于在不同網(wǎng)絡(luò)間轉(zhuǎn)發(fā)數(shù)據(jù)。
  • 在配置網(wǎng)絡(luò)設(shè)備(如路由器、電腦等)時(shí),通常需要同時(shí)設(shè)置子網(wǎng)掩碼和網(wǎng)關(guān)地址,以確保設(shè)備能正確地與其他網(wǎng)絡(luò)通信。

計(jì)算機(jī)的IP地址是互聯(lián)網(wǎng)上每臺(tái)計(jì)算機(jī)或設(shè)備唯一的標(biāo)識(shí)符。在目前廣泛使用的兩個(gè)版本中,IPv4地址由32位組成,而IPv6地址由128位組成。下面將重點(diǎn)介紹IPv4地址,因?yàn)樗鼮槌S谩?/p>

IPv4地址:

組成:IPv4地址由32位二進(jìn)制數(shù)字組成,通常分為4個(gè)8位的部分,每部分稱為一個(gè)八位字節(jié)(或octet)。例如,一個(gè)IPv4地址在二進(jìn)制格式下可能看起來像這樣:11000000.10101000.00000001.00000001

十進(jìn)制表示:為了便于閱讀,IPv4地址通常轉(zhuǎn)換為十進(jìn)制格式,并用點(diǎn)分隔。例如,上面的二進(jìn)制地址可以轉(zhuǎn)換為十進(jìn)制表示為:192.168.1.1

地址分類:IPv4地址分為幾個(gè)類別:A、B、C、D和E類。

  • A類地址用于大型網(wǎng)絡(luò),其第一個(gè)八位字節(jié)的范圍是0-127。
  • B類地址用于中型網(wǎng)絡(luò),其第一個(gè)八位字節(jié)的范圍是128-191。
  • C類地址用于小型網(wǎng)絡(luò),其第一個(gè)八位字節(jié)的范圍是192-223。
  • D類地址用于多播,E類地址保留用于實(shí)驗(yàn)。

網(wǎng)絡(luò)地址和主機(jī)地址

在一個(gè)IP地址中,部分八位字節(jié)用來表示網(wǎng)絡(luò)地址,其余部分表示主機(jī)地址。子網(wǎng)掩碼用于區(qū)分這兩部分。例如,在子網(wǎng)掩碼255.255.255.0下,IP地址192.168.1.1的前三個(gè)八位字節(jié)表示網(wǎng)絡(luò)地址,最后一個(gè)八位字節(jié)表示主機(jī)地址。

特殊地址

某些IP地址有特殊用途,例如127.0.0.1通常用作回環(huán)地址,用于指向本機(jī)。私有地址范圍(如192.168.x.x, 10.x.x.x, 172.16.x.x - 172.31.x.x)在內(nèi)部網(wǎng)絡(luò)中使用,但不在互聯(lián)網(wǎng)上路由。

IPv6地址:

組成:IPv6地址由128位二進(jìn)制數(shù)字組成,通常分為8組,每組4個(gè)十六進(jìn)制數(shù)字。

表示方式:例如,一個(gè)IPv6地址可能看起來像這樣:2001:0db8:85a3:0000:0000:8a2e:0370:7334。

IPv6地址能夠提供比IPv4更多的地址空間,應(yīng)對(duì)互聯(lián)網(wǎng)地址耗盡的問題。

一、docker網(wǎng)絡(luò)配置

當(dāng)你安裝了docker,它會(huì)自動(dòng)創(chuàng)建3個(gè)網(wǎng)絡(luò),可以使用 docker network ls 命令來查看

  • bridge --網(wǎng)橋
  • host --主機(jī)(本地)
  • none --無網(wǎng)絡(luò)
  • container --共享

當(dāng)你運(yùn)行一個(gè)容器的時(shí)候,可以使用--network參數(shù)來指定你的容器連接到哪一個(gè)網(wǎng)絡(luò)。

查看容器網(wǎng)絡(luò)指令:

  • ip addr
  • ifconfig

1. bridge 虛擬網(wǎng)橋

為每一個(gè)容器分配、設(shè)置IP等,當(dāng)Docker進(jìn)程啟動(dòng)時(shí),會(huì)在主機(jī)上創(chuàng)建一個(gè)名為docker0的虛擬網(wǎng)橋,此主機(jī)上啟動(dòng)的Docker容器會(huì)連接到這個(gè)虛擬網(wǎng)橋上(默認(rèn)模式)。

虛擬網(wǎng)橋的工作方式和物理交換機(jī)類似,這樣主機(jī)上的所有容器就通過交換機(jī)連在了一個(gè)二層網(wǎng)絡(luò)中:

從docker0子網(wǎng)中分配一個(gè)IP給容器使用,并設(shè)置docker0的IP地址為容器的默認(rèn)網(wǎng)關(guān)。 在主機(jī)上創(chuàng)建一對(duì)虛擬網(wǎng)卡veth pair設(shè)備,Docker將veth pair設(shè)備的一端放在新創(chuàng)建的容器中,并命名 為eth0(容器的網(wǎng)卡),另一端放在主機(jī)中,以vethxxx這樣類似的名字命名,并將這個(gè)網(wǎng)絡(luò)設(shè)備加入 到docker0網(wǎng)橋中。

查看一個(gè)名為t1的容器(原tomcat)bridge網(wǎng)絡(luò)信息:

docker inspect t1

可以看到它網(wǎng)橋是172.17.0.2,它的網(wǎng)關(guān)是172.17.0.1,網(wǎng)絡(luò)模式是bridge。

 示例:

運(yùn)行一個(gè)鏡像未指定網(wǎng)絡(luò)模式(默認(rèn)bridge)

docker run -itd --name spring -p 8081:8080 spring:v1

注意:-p參數(shù)可以出現(xiàn)多次,綁定多個(gè)端口號(hào) ,就意味著外部可以通過多個(gè)端口號(hào)訪問到8080 

2. host 網(wǎng)絡(luò)模式

  • host 網(wǎng)絡(luò)模式需要在創(chuàng)建容器時(shí)通過參數(shù) --net host 或者 --network host 指定;
  • 采用 host 網(wǎng)絡(luò)模式的 Docker Container,可以直接使用宿主機(jī)的 IP 地址與外界進(jìn)行通信,若宿主機(jī)的 eth0 是一個(gè)公有 IP,那么容器也擁有這個(gè)公有 IP。同時(shí)容器內(nèi)服務(wù)的端口也可以使用宿主機(jī)的端口,無需額外進(jìn)行 NAT 轉(zhuǎn)換;
  • host 網(wǎng)絡(luò)模式可以讓容器共享宿主機(jī)網(wǎng)絡(luò)棧,這樣的好處是外部主機(jī)與容器直接通信,但是容器的網(wǎng)絡(luò)缺少隔離性。

示例:

運(yùn)行一個(gè)鏡像指定host網(wǎng)絡(luò)模式

docker run -itd --name spring2 --net=host spring:v1

這時(shí)只能通過主機(jī)端口8080才能訪問了 

3. none 網(wǎng)絡(luò)模式

  • none 網(wǎng)絡(luò)模式是指禁用網(wǎng)絡(luò)功能,只有 lo 接口 local 的簡(jiǎn)寫,代表 127.0.0.1,即 localhost 本地環(huán)回接口。在創(chuàng)建容器時(shí)通過參數(shù) --net none 或者 --network none 指定;
  • none 網(wǎng)絡(luò)模式即不為 Docker Container 創(chuàng)建任何的網(wǎng)絡(luò)環(huán)境,容器內(nèi)部就只能使用 loopback 網(wǎng)絡(luò)設(shè)備,不會(huì)再有其他的網(wǎng)絡(luò)資源??梢哉f none 模式為 Docke Container 做了極少的網(wǎng)絡(luò)設(shè)定,但是俗話說得好“少即是多”,在沒有網(wǎng)絡(luò)配置的情況下,作為 Docker 開發(fā)者,才能在這基礎(chǔ)做其他無限多可能的網(wǎng)絡(luò)定制開發(fā)。這也恰巧體現(xiàn)了 Docker 設(shè)計(jì)理念的開放。

4. 自定義container網(wǎng)絡(luò)模式

  • Container 網(wǎng)絡(luò)模式是 Docker 中一種較為特別的網(wǎng)絡(luò)的模式。在創(chuàng)建容器時(shí)通過參數(shù) --net container:已運(yùn)行的容器名稱|ID 或者 --network container:已運(yùn)行的容器名稱|ID 指定;
  • 處于這個(gè)模式下的 Docker 容器會(huì)共享一個(gè)網(wǎng)絡(luò)棧,這樣兩個(gè)容器之間可以使用 localhost 高效快速通信。

Container 網(wǎng)絡(luò)模式即新創(chuàng)建的容器不會(huì)創(chuàng)建自己的網(wǎng)卡,配置自己的 IP,而是和一個(gè)指定的容器共享 IP、端口范圍等。同樣兩個(gè)容器除了網(wǎng)絡(luò)方面相同之外,其他的如文件系統(tǒng)、進(jìn)程列表等還是隔離的。

二、自定義IP容器通信

1. 自定義IP

需要先創(chuàng)建一個(gè)網(wǎng)絡(luò)

docker network create --gateway 172.18.0.1 --subnet 172.18.0.0/16(端口) net(網(wǎng)絡(luò)名)

 查看網(wǎng)絡(luò)信息:docker inspect net

2. 創(chuàng)建所需容器(mysql,tomcat)

I. 創(chuàng)建tomcat容器(指定IP與網(wǎng)絡(luò))

docker run -it --name tm \
-p 8080:8080 \
-v /test:/usr/local/tomcat/webapps \ 
--net net \
--ip 172.18.0.2 \ 
tomcat:8.5.20

II. 創(chuàng)建mysql容器(指定IP與網(wǎng)絡(luò))

創(chuàng)建存放mysel數(shù)據(jù)的文件夾

mkdir -p /mysql/{conf,data}

并創(chuàng)建my.cnf配置文件到conf目錄

my.cnf內(nèi)容:

[client]
default-character-set=utf8
 
[mysql]
default-character-set=utf8
 
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
# default: sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# modeified: 
sql_mode= STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_allowed_packet=10M
default-time_zone='+8:00'
default_authentication_plugin=mysql_native_password

1、創(chuàng)建mysql容器:

docker run \
--name m1 \
-v /mysql/conf/my.cnf:/etc/my.cnf \
-v /mysql/data:/var/lib/mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
--net net \
--ip 172.18.0.3 \
-d mysql/mysql-server:5.7

首先進(jìn)入mysql容器進(jìn)行登錄,添加用戶(遠(yuǎn)程連接)賦予權(quán)限,最后退出重啟容器。

2、創(chuàng)建數(shù)據(jù)庫(kù)

由于之前將mysql數(shù)據(jù)掛載到了var/lib/mysql,所以我們只需要把sql腳本放在宿主機(jī)目錄即可,而掛載的目錄也會(huì)生成一樣的文件

運(yùn)行sql腳本全操作:

查看數(shù)據(jù)表:show tables (退回mysql后記得重啟哦

3. 準(zhǔn)備項(xiàng)目資源

這是一個(gè)前后端分離項(xiàng)目,啟動(dòng)項(xiàng)目需要修改配置信息

application.yml:

項(xiàng)目資源: 

Dockerfile:

1、構(gòu)建鏡像

docker build -t spring:v1.0 .

根據(jù)鏡像創(chuàng)建啟動(dòng)容器并指定IP地址

docker run -itd --name s1 --net net --ip 172.18.0.101 spring:v1.0
docker run -itd --name s2 --net net --ip 172.18.0.102 spring:v1.0
docker run -itd --name s3 --net net --ip 172.18.0.103 spring:v1.0

查看日志 docker log s1(已啟動(dòng)成功)

4. 構(gòu)建Nginx實(shí)現(xiàn)負(fù)載均衡

首先創(chuàng)建nginx的配置文件目錄并將配置文件放入

mkdir -p  /soft/nginx/conf.d

靜態(tài)資源:

default.conf:這里的服務(wù)器的集群和我們的Tomcat容器IP一致

#服務(wù)器的集群
upstream tomcatList {  
    server 172.18.0.101:8080 weight=1; 
    server 172.18.0.102:8080 weight=1; 
    server 172.18.0.103:8080 weight=1; 
} 
    
server {
 
    listen  80;
    server_name  www.ycxw.com;
 
    location / {
        root   /etc/nginx/html/;
        index  index.html index.htm;
    }
 
    error_page   500 502 503 504  /50x.html;
    
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    
    location ~^/api/ {
        rewrite ^/api/(.*)$ /$1 break;
        proxy_pass  http://tomcatList;
        proxy_redirect default;
    }
 
}

構(gòu)建nginx容器

docker run -itd \
--name n1 \
-v /test/nginx/conf.d:/etc/nginx/conf.d \
-v /test/nginx/html:/etc/nginx/html \
-p 80:80 \
--net net \
--ip 172.18.0.105 \
nginx

啟動(dòng)項(xiàng)目測(cè)試:

測(cè)試負(fù)載均衡:停了兩臺(tái)服務(wù)器

還能運(yùn)行:

到此這篇關(guān)于Docker網(wǎng)絡(luò)配置與自定義IP容器通信的文章就介紹到這了,更多相關(guān)Docker 自定義IP容器通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker push遇到unknown blob問題解決

    docker push遇到unknown blob問題解決

    這篇文章主要為大家介紹了docker push遇到unknown blob問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 如何搭建配置Docker私有倉(cāng)庫(kù)的實(shí)現(xiàn)步驟

    如何搭建配置Docker私有倉(cāng)庫(kù)的實(shí)現(xiàn)步驟

    本文主要介紹了如何搭建配置Docker私有倉(cāng)庫(kù)的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Docker 提交倉(cāng)庫(kù)的方法

    Docker 提交倉(cāng)庫(kù)的方法

    這篇文章主要介紹了Docker 提交倉(cāng)庫(kù)的方法,把我們東西上傳DockerHub,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • 通過Docker安裝啟動(dòng)DB2在Spring?Boot整合DB2的方法

    通過Docker安裝啟動(dòng)DB2在Spring?Boot整合DB2的方法

    DB2是IBM的一款優(yōu)秀的關(guān)系型數(shù)據(jù)庫(kù),這篇文章主要介紹了通過Docker啟動(dòng)DB2,并在Spring?Boot整合DB2,需要的朋友可以參考下
    2023-01-01
  • 如何使用Docker恢復(fù)Mysql8備份的Data數(shù)據(jù)

    如何使用Docker恢復(fù)Mysql8備份的Data數(shù)據(jù)

    這篇文章主要介紹了使用Docker恢復(fù)Mysql8備份的Data數(shù)據(jù),下面小編給大家講解下操作方法,對(duì)Docker恢復(fù)Mysql數(shù)據(jù)備份相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • CentOS7中配置Docker的yum源并安裝使用詳解

    CentOS7中配置Docker的yum源并安裝使用詳解

    這篇文章主要介紹了CentOS7中配置Docker的yum源并安裝使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • vscode中啟用docker擴(kuò)展顯示無權(quán)限的問題解決

    vscode中啟用docker擴(kuò)展顯示無權(quán)限的問題解決

    這篇文章主要介紹了如何解決vscode中啟用docker擴(kuò)展顯示無權(quán)限的問題,并介紹允許VSCode進(jìn)入Docker內(nèi)部進(jìn)行調(diào)試的插件,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • 詳解Docker Registry之刪除鏡像、垃圾回收

    詳解Docker Registry之刪除鏡像、垃圾回收

    本篇文章主要介紹了詳解Docker Registry之刪除鏡像、垃圾回收,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • docker在linux上的安裝部署實(shí)例講解

    docker在linux上的安裝部署實(shí)例講解

    這篇文章主要介紹了docker在linux上的安裝部署實(shí)例講解,步驟講解的很清晰,有需要同學(xué)可以學(xué)習(xí)下
    2021-03-03
  • Dockerfile?ENV語法使用指南

    Dockerfile?ENV語法使用指南

    這篇文章主要為大家介紹了Dockerfile?ENV語法使用指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11

最新評(píng)論