Använda nätverket

Vi har ett nu ett “eget” nätverk att använda. Hur gör vi då för att använda det och koppla på en container?

#En server

Om vi utgår från att vi har en container med en webbserver som lyssnar på porten 1337 kan vi ansluta den på följande sätt:

$ docker run --rm -p 8080:1337 --name myserver --net dbwebb username/imagename:tag

Vi kan med fördel använda –name och ge containern ett namn. Vi kopplar på containern med –net följt av nätverkets namn. När vi ansluter en till container kommer den kunna använda porten 1337, men för att kunna nå servern via webbläsaren behöver vi mappa en port i run-kommandot.

Vi kan nu nå servern via webbläsaren på localhost:8080.

Om vi enbart hade behövt att nå servern via en annan container hade vi kunnat använda EXPOSE 1337 i Dockerfile.

#En klient via ip-adress

Vi kikar på hur vi ansluter en container till som använder servern via dess ip-adress.

Vi utgår från ett enkelt Bash-skript som kopieras in i en container. Bash-skriptet gör en curl till servern. Dockerfilen för klienten ser ut på följande sätt:

FROM debian:stretch-slim

RUN apt-get update && \
    apt-get install -y curl

WORKDIR /client

COPY client.bash ./

RUN ["bash"]

Vi tar reda på vilken ip-adress servern har i nätverket:

$ docker network inspect dbwebb
...
"ConfigOnly": false,
    "Containers": {
        "16a2df5ea236e1a24e4401f6e0b6729ff42d22f144468446ce69c154fbc707a1": {
            "Name": "myserver",
            "EndpointID": "dc35212bf7116d01dcb9f25452b5f7201b50409fc01d17914d0942295a18b006",
            "MacAddress": "02:42:ac:13:00:02",
            "IPv4Address": "172.19.0.2/16",
            "IPv6Address": ""
        }
    },

...

Under nyckeln Containers kan vi se vilka containrar som är anslutna och vilken ip-adress de fått tilldelade, i detta fallet har servern 172.19.0.2.

Vi lägger raden curl 172.19.0.2:1337 i Bash-skriptet och bygger den. Vi startar den sedan med:

$ docker run -it --name myclient --net dbwebb username/imagename:tag

Nu kan vi köra skriptet i containern root@bb207ef41364:/client# ./client.bash och nå servern.

#En klient via namn

Det kan vara lite pilligt att hålla på med ip-adresser hit och dit. Vi har ju namn på containrarna så vi bör ju kunna använda dem istället? Svaret är ja, självklart! Vi kör samma utgångsläge som innan men backar lite.

Vi uppdaterar Bash-skriptet och byter ut ip-adressen till curl server:1337 där server är det tänkta namnet på containern. Vi bygger om imagen och i klientens docker run-kommando lägger vi till ett option:

$ docker run -it --name myclient --net dbwebb --link myserver:server username/imagename:tag

Vi länkar containerns namn med dess ip-adress med hjälp av –link containername:identifier.

#Revision history

  • 2019-04-30: (A, lew) Första versionen.

Document source.