1. 程式人生 > >5、Docker 容器連線

5、Docker 容器連線

Docker 容器連線

前面我們實現了通過網路埠來訪問執行在docker容器內的服務。下面我們來實現通過埠連線到一個docker容器

網路埠對映

我們建立了一個 python 應用的容器。

[[email protected] ~]# docker run -d -P training/webapp python app.py
f9a0558823043e2a188b94265dcc245e1a256c26cc20d8cb5f2ee4817e006e92
[[email protected] ~]# 

另外,我們可以指定容器繫結的網路地址,比如繫結 127.0.0.1

我們使用 -P 引數建立一個容器,使用 docker ps 來看到埠 5000 繫結主機埠 32771 。

[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
f9a055882304        training/webapp     "python app.py"     44 seconds ago      Up 43 seconds       0.0.0.0:32771->5000/tcp   confident_banach
74c14274a8f0        training/webapp     "python app.py"     About an hour ago   Up About an hour    0.0.0.0:5000->5000/tcp    nostalgic_jones
[
[email protected]
~]#

我們也可以使用 -p 標識來指定容器埠繫結到主機埠。

兩種方式的區別是:

  • -P :是容器內部埠隨機對映到主機的高階口。

  • -p : 是容器內部埠繫結到指定的主機埠。

    [[email protected] ~]# docker run -d -p 5001:5000 training/webapp python app.py
    f80f4f4490beda799c71068a2d7fc196c85e054a588f15428fc35bb805bea725
    [[email protected] ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    f80f4f4490be        training/webapp     "python app.py"     14 seconds ago      Up 14 seconds       0.0.0.0:5001->5000/tcp    cocky_cocks
    f9a055882304        training/webapp     "python app.py"     2 minutes ago       Up 2 minutes        0.0.0.0:32771->5000/tcp   confident_banach
    74c14274a8f0        training/webapp     "python app.py"     About an hour ago   Up About an hour    0.0.0.0:5000->5000/tcp    nostalgic_jones
    [
    [email protected]
    ~]#

另外,我們可以指定容器繫結的網路地址,比如繫結 127.0.0.1

[[email protected] ~]# docker run -d -p 127.0.0.1:5002:5000 training/webapp python app.py
53808c9cb8668c382bbc74eb2924a5838616f82595ae6bd6d1c41a70b52860e5
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                      NAMES
53808c9cb866        training/webapp     "python app.py"     4 seconds ago       Up 2 seconds        127.0.0.1:5002->5000/tcp   distracted_shirley
f80f4f4490be        training/webapp     "python app.py"     2 minutes ago       Up 2 minutes        0.0.0.0:5001->5000/tcp     cocky_cocks
f9a055882304        training/webapp     "python app.py"     5 minutes ago       Up 5 minutes        0.0.0.0:32771->5000/tcp    confident_banach
74c14274a8f0        training/webapp     "python app.py"     About an hour ago   Up About an hour    0.0.0.0:5000->5000/tcp     nostalgic_jones
[[email protected] ~]# 

這樣我們就可以通過訪問 127.0.0.1:5002 來訪問容器的 5000 埠。

上面的例子中,預設都是繫結 tcp 埠,如果要繫結 UDP 埠,可以在埠後面加上 /udp

[[email protected] ~]# docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
df5a6eb999d9509c3874f59846e056513bafed3ad3a0eee4895b837ff2b56f5e
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                                NAMES
df5a6eb999d9        training/webapp     "python app.py"     2 seconds ago        Up 1 second         5000/tcp, 127.0.0.1:5000->5000/udp   amazing_wright
53808c9cb866        training/webapp     "python app.py"     About a minute ago   Up About a minute   127.0.0.1:5002->5000/tcp             distracted_shirley
f80f4f4490be        training/webapp     "python app.py"     4 minutes ago        Up 4 minutes        0.0.0.0:5001->5000/tcp               cocky_cocks
f9a055882304        training/webapp     "python app.py"     6 minutes ago        Up 6 minutes        0.0.0.0:32771->5000/tcp              confident_banach
74c14274a8f0        training/webapp     "python app.py"     About an hour ago    Up About an hour    0.0.0.0:5000->5000/tcp               nostalgic_jones
[[email protected] ~]# 

docker port 命令可以讓我們快捷地檢視埠的繫結情況。

[[email protected] ~]# docker port cocky_cocks 5000
0.0.0.0:5001
[[email protected] ~]# 

Docker容器連線

埠對映並不是唯一把 docker 連線到另一個容器的方法。

docker有一個連線系統允許將多個容器連線在一起,共享連線資訊。

docker連線會建立一個父子關係,其中父容器可以看到子容器的資訊。

容器命名

當我們建立一個容器的時候,docker會自動對它進行命名。另外,我們也可以使用–name標識來命名容器,例如:

我們可以使用 docker ps -l 命令來檢視容器名稱。

[[email protected] ~]# docker run -d -P --name runoob training/webapp python app.py
fdf22bdbe0892d91b92edc0018aad18dc95a5cfd9bbebc2e983f7774a04a3e7c
[[email protected] ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
fdf22bdbe089        training/webapp     "python app.py"     10 seconds ago      Up 8 seconds        0.0.0.0:32772->5000/tcp   runoob
[[email protected] ~]#