05日目Dockerネットワークの詳細な説明

05日目Dockerネットワークの詳細な説明

注:クラウドサーバーはデフォルトでポート80のみを公開するため、外部ネットワークを介してアクセスする場合は、ポート80にのみマップできます。

Docker0を理解する

すべてのミラーをクリーンアップします

docker rmi -f $(docker images -aq)

画像-20201202205935166

2、3つのネットワーク

2.1はじめに

dockerにはデフォルトで3つのネットワークモードがあり、docker network lsそれら確認できます。

画像-20201203090631655

2.1ネットワークブリッジの作成(削除)

docker network create [网桥名称]

[root@s ~]# docker network create test01
------------------------------------------------------------------------
ce548d0dd9f88ac22d0d943d8f33dde4c2f81c04c4aeea9319cb3e879cc14945

[root@s ~]# docker network ls
------------------------------------------------------------------------
NETWORK ID          NAME                DRIVER              SCOPE
c4197b1203c6        bridge              bridge              local
b24a96f44350        host                host                local
b37725ff8cc6        none                null                local
ce548d0dd9f8        test01              bridge              local

[root@s ~]# docker network rm test01
------------------------------------------------------------------------
test01
[root@s ~]# docker network ls
------------------------------------------------------------------------
NETWORK ID          NAME                DRIVER              SCOPE
c4197b1203c6        bridge              bridge              local
b24a96f44350        host                host                local
b37725ff8cc6        none                null                local

3.dockerは、同じブリッジコンテナが相互運用可能かどうかをテストします

3.1ブリッジを作成する

[root@s ~]# docker network create super
------------------------------------------------------------------------
3546c50a8479e3ec04fa008d770fdfabf448614b7b56c3ed417cad533d81fb97

3.2複数のコンテナを作成する(同じブリッジの下に)

3.2.1redis
[root@s ~]# docker run -d --name redis --network super redis
------------------------------------------------------------------------
6facf44e598df8eee101b288e16b199b1731a39a855406b6b6b99a11532e9ecd
3.2.2mysql:5.7
[root@s ~]# docker run -d --name mysql --network super -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
------------------------------------------------------------------------
41c68da6a684a1c733a31d59aea76af5a9a3e6a15e53834ddf416ff870b77a55
3.2.3nginx
[root@s ~]# docker run -d --name nginx --network super nginx
------------------------------------------------------------------------
77b7198f61eb552be672b318fcbec949a1ab9d300d93b8de9978c0eaa1a1014d
3.2.4centos
[root@s ~]# docker run -dit --name centos01 --network super centos /bin/sh
------------------------------------------------------------------------
7aa33a1ddcbba21e2af259bbf3251667a890be084567e3de565c993fe945b208

画像-20201203102451864

使って

質問:dockerはコンテナネットワークアクセスをどのように処理しますか?

コンテナを入力してIPアドレスを表示します

docker exec -it 容器id
ip addr
# 查看容器内部网络地址 发现容器启动的时候会得到一个 eth0@if551 ip地址,docker分配!

現時点では、Linuxはコンテナの内部にpingを実行できます。コンテナは外の世界にpingを送信することもできます-2つは相互運用可能です

原理

dockerコンテナを起動するたびに、dockerはdockerコンテナにIPを割り当てます。dockerをフォローしている限り、docker0ブリッジモードがあり、使用されるテクノロジーはveth-pairテクノロジーです。

コンテナを再開すると、もう1つのネットワークがあります

コンテナによってもたらされるネットワークは1対1です

veth-pairは、仮想デバイスインターフェイスのペアです。これらはすべてペアで表示されます。一方の端はプロトコルに接続され、もう一方の端は相互に接続されます。この機能により、veth-pairはOpenStacとを接続するためのブリッジとして機能します。さまざまな仮想ネットワークデバイスのDockerコンテナ。OVSとOVS間の接続にはevth-pairテクノロジーが使用されます。

次の2つのコンテナにpingを実行できるかどうかをテストするには

画像-20201202231843375

docker exec -it centos ip addr
------------------------------------------------------------------------
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
100: eth0@if101: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
       
docker exec -it b9a558d1c51a ping 172.17.0.2
------------------------------------------------------------------------
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.086 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.054 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.060 ms
64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.055 ms
# 是可以ping通的

このことから、centos1とcentos2はルーターを共有していると結論付けることができます。docker0

すべてのコンテナーがネットワークを指定していない場合、それらはdocker0によってルーティングされ、dockerはデフォルトの使用可能なIPをコンテナーに割り当てます。

概要:DockerはLinuxブリッジを使用し、ホストはDockerコンテナーブリッジdocker0です。

画像-20201203081410385

Dockerのすべてのネットワークインターフェイスは仮想であり、仮想転送効率は高いです(イントラネット転送ファイル)コンテナが削除されている限り、対応するブリッジペアはなくなります!

二、-link

$ docker exec -it tomcat02 ping tomca01 # ping不通
ping: tomca01: Name or service not known
# 运行一个tomcat03 --link tomcat02
$ docker run -d -P --name tomcat03 --link tomcat02 tomcat
5f9331566980a9e92bc54681caaac14e9fc993f14ad13d98534026c08c0a9aef
# 用tomcat03 ping tomcat02 可以ping通
$ docker exec -it tomcat03 ping tomcat02
PING tomcat02 (172.17.0.3) 56(84) bytes of data.
64 bytes from tomcat02 (172.17.0.3): icmp_seq=1 ttl=64 time=0.115 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.080 ms
# 用tomcat02 ping tomcat03 ping不通

3つのカスタムネットワーク

docker network
connect -- Connect a container to a network
create -- Creates a new network with a name specified by the
disconnect -- Disconnects a container from a network
inspect -- Displays detailed information on a network
ls -- Lists all the networks created by the user
prune -- Remove all unused networks
rm -- Deletes one or more networks

08日目のビルドイメージ

1.命令を書き込むためのファイル名が次のようになっている必要がある場合:Dockerfile

vim Dockerfile

2つ目は、ミラーを作成するための指示を書くことです

# 依赖镜像
FROM python:3.6.12

# 安装django
RUN pip3 install django==2.2.2 -i https://pypi.douban.com/simple/

# 添加本地Django文件(Test)到 镜像中的(Test)下
ADD /Test /Test

# 镜像执行 cd命令  并运行
CMD cd /Test && python3 manage.py runserver 0.0.0.0:8000

3、構築を開始します

docker build -t python:v1 .  # 打开当前目录下的Dockerfield 构建python:v1镜像

画像-20201203122250677

4、検証

カスタム画像を開始

docker run -d -p8080:8000 python:v1ポートマッピングを開始して指定します

画像-20201203122414814

起動後に終了した場合はdocker logs [容器id|名称]、エラーメッセージを表示するために行くことができます

イントラネットアクセスが成功しました!

画像-20201203122453307

外网访问django中的settings.py 修改ALLOW_HOST = ["*"]そして、ポートは次のようにマップされます80

画像-20201203142919597

5、nginxプロキシdjango

1.nginxイメージをビルドします

# Dockerfile

# 设置基础镜像
FROM centos:7

RUN yum install wget -y

# 换源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

RUN cd /etc/yum.repos.d && wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

RUN mv /etc/yum.repos.d/CentOS7-Base-163.repo /etc/yum.repos.d/CentOS-Base.repo

# 创建nginx源的文件
ADD nginx.repo /etc/yum.repos.d/ 

# 刷新yum缓存
RUN yum makecache

# 安装yum工具
RUN yum install yum-utils -y

# 安装Nginx
RUN yum install nginx -y

# 复制配置文件
ADD default.conf /etc/nginx/conf.d/

# 设置启动命令
CMD nginx -g 'daemon off;'
# nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

upstreamこのモジュールはnginx、単一のマシンの制限超えて、ネットワークデータの受信、処理、および転送を完了します。

# default.conf

upstream django {
    
    
    server django:8000;  # 此处代理的时 容器名和端口号
}

server {
    
    
    listen 80;
    server_name _;
    location / {
    
    :
        proxy_pass http://django;  # 与上面对应
        index index.html index.htm;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

2つのファイルが/homeディレクトリにあるので、CDを入力したい

cd /home
docker build -t nginx:v1 .  # 小数点代表当前目录

2.djangoイメージを作成します

# Dockerfile

依赖镜像
FROM python:3.6

# 安装django
RUN pip3 install django==2.1.7 -i https://pypi.douban.com/simple/

# 创建项目
RUN django-admin startproject test
# 进入到项目下 启动项目
RUN cd test && django-admin startapp app01

# 镜像执行 cd命令  并运行
CMD cd test && python3 manage.py runserver 0.0.0.0:8000
docker build -t python:v1 .  # 小数点代表当前目录

3.実行を開始します。同じネットワーク上にある必要があります

docker run -d --network oldboy --name django python:v1
------------------------------------------------------------------------
82ae3f1e3d9d4bdc56489205a39cf49912939058707a4ebddae8a7c9a0b8c8b0

docker run -d -p80:80 --network oldboy nginx:v3
------------------------------------------------------------------------
776ce7cd6154ebfbdd4454927013175db1c25fe7e9f97f7a0d0e7b7103dba24e

docker ps
------------------------------------------------------------------------
NTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
776ce7cd6154        nginx:v3            "/bin/sh -c 'nginx -…"   3 seconds ago       Up 2 seconds        0.0.0.0:80->80/tcp   infallible_mestorf
82ae3f1e3d9d        python:v1           "/bin/sh -c 'cd test…"   8 minutes ago       Up 8 minutes                             django

テストできます

画像-20201204111016721

おすすめ

転載: blog.csdn.net/A1L__/article/details/110631355