Docker

[Docker] 컨테이너를 외부에 노출시키자!

언킴 2022. 3. 4. 17:37
반응형

도커 내에서 컨테이너를 생성하면 이 컨테이너는 외부에서 접근할 수 없고, 도커가 설치된 로컬 호스트에서만 접근할 수 있다. 외부에서 접근을 할 수 있도록 설정하기 위해서는 우리의 로컬 호스트 포트와 토커 컨테이너의 포트에 연결시켜주어야 한다. 이 과정을 포트 포워딩, 바인딩 등으로 부른다. 

 

1. 컨테이너 IP 주소 확인하기

컨테이너의 IP 및 포트와 로컬 호스트의 IP 및 포트를 연결시키기 위해서는 당연히 컨테이너의 IP 주소를 알고 있어야 한다. IP 주소를 확인하기 위해서는 아래와 같은 작업을 수행하면 쉽게 확인이 가능하다. 

 

$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 71152  bytes 104553816 (104.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 21728  bytes 1347647 (1.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 24323  bytes 65138181 (65.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 24323  bytes 65138181 (65.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

도커는 컨테이너에 172.17.0.X의 IP 주소를 순차적으로 할당한다. 만약 새로운 컨테이너를 생성하면 해당 컨테이너의 IP 주소는 172.17.0.3이 된다. 우리는 컨테이너에 Apache Web server를 설치해서 외부에 노출할 것이다. 아파치 웹 서버를 도커 허브에서 가지고와 포트를 연결시켜주자. 

 

2. Apache web server

아파치는 기본적으로 80번 포트를 사용하고 있다. 그렇기 때문에 호스트의 임의의 포트와 컨테이너의 80번 포트를 연결시켜주는 작업을 수행해야된다. 

 

# docker run -it --name webserver -p [hostport]:80 ubuntu:18.04

hostport를 만약 8888로 설정한다면 로컬호스트의 8888 포트와 컨테이너의 80번 포트를 포트포워딩 해주는 것이다. 포트 간 연결을 하기 위해서는 -p 인자를 사용해야만 한다. 호스트의 특정 IP를 사용하려면 255.255.255.255:8888:80 의 형태로 IP와 포트를 명시해야한다. 또한 여러 개의 포트를 연달아 외부에 개방하려면 연속으로 -p 인자를 사용해서 설정할 수 있다. 

 

docker run -it -p 8888:8888 -p 255:255:255:255:7777:80 ubuntu:18.04
# apt-get update 
# apt-get install apache2 -y
# service apache2 start

apache2를 직접 설치해도되고, 도커 허브에 이미지 중 httpd로 된 이미지를 설치받아서 진행해도된다. 이제 로컬호스트:8888로 외부에서도 도커에 접근할 수 있도록 된다. 여기에는 더 자세하게 설명해놓았다.