Docker Container 외부 접속(Prot Binding)

OH JU HYEON·2022년 8월 16일
2

Docker

목록 보기
4/8
post-thumbnail

Container 외부 접속

Ubuntu 설치 및 Container 생성

1. Ubuntu20.04 Image

먼저 Ubuntu20.04 이미지를 받아야 한다. 이번에는 내가 원하는 버전이 있으므로 태그를 달아 pull을 받아준다. 명령어는 다음과 같다.

docker pull ubuntu:20.04

앞에 경로를 붙이지 않으면 도커 공식 허브에서 제공되는 이미지를 가져오게 된다.

docker images

도커 이미지를 정상적으로 가지고 왔는지 확인해 본다. 만약 오류가 난다면 오타일 확률이 높다. :의 위치를 유의해서 명령어를 작성해 줘야 한다. 내가 오타난 부분 중 하나이다. 태그를 헷갈리지 말자..

2. Container

컨테이너를 생성해 줘야 한다. -i와 -t옵션을 통해 상호 입출력이 가능한 상태로 만들어준다. 명령어는 아래와 같다.

docker run -i -t --name test ubuntu:20.04

컨테이너가 생성되고 접속이 되어 있을 것이다. 정상적으로 생성이 되었지만 두 눈으로 확인을 하기 위해 ctrl + P + Q를 눌러 컨테이너를 종료하지 않은 채로 나온 뒤 아래 명령어를 실행해 확인해 본다.

docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Names}}"

docker ps명령어로 간단하게 확인도 되지만 저렇게 원하는 포멧을 설정해서 보면 조금 더 구조가 잘 보인다. 가능하면 --format을 활용하려고 노력하고 있다. 익숙해 졌을 때 가시성과 활용성을 생각하면 타자가 조금 길어지더라도 깔끔하고 헷갈리지 않고 확실하게 체크해 볼 수 있다. 즉, 휴먼 에러를 줄여주는 코드라고 생각한다.

Ubuntu

1. IP

먼저 컨테이너에 할당되는 가상 IP를 체크해 본다.

ifconfig

위 명령어로 간단하게 확인해 볼 수 있는데 그 전에 net-tools를 받아야 한다.

apt-get update

apt-get install net-tools

ifconfig

위 순서로 명령어를 사용해 보면 ifconfig명령어가 정상적으로 동작하는 것을 확인할 수 있다.

조회된 내용을 살펴보면 eth0lo인터페이스가 있는데 eth0는 도커 가상 IP 주소를 할당 받은 인터페이스이고 lo는 로컬 호스트이다.

이때, 아무런 설정을 하지 않았기 때문에 이 컨테이너는 외부에서 접근이 불가능하다. 외부 접근을 위해서는 eth0의 IP와 포트를 호스트의 IP에 바인딩해야 한다.

2. Prot Binding

위에 생성한 컨테이너는 잊고 다시 다른 컨테이너를 생성하면서 포트를 바인딩해 본다. 일단 명령어는 아래와 같다.

docker run -i -t -p 80:80 ubuntu:20.04

중간에 새로운 옵션인 -p가 추가되었다. -p는 컨테이너의 포트를 호스트의 포트와 바인딩해 연결할 수 있게 해 준다. 이 옵션의 형식은 호스트의포트:컨테이너의포트이다.

docker run -i -t -p 3306:3306 -p 호스트IP:7777:80 ubuntu:20.04

위 명령어는 다른 예시인데 끊어서 확인해 보면 -p 3306:3306은 호스트의 3306 포트를 컨테이너의 3306 포트와 연결한다. -p 특정IP:7777:80은 바인딩 하고 싶은 포트를 가지고 있는 IP를 입력하고 해당 IP의 7777포트를 컨테이너의 80번 포트와 바인딩을 한다는 뜻을 가지고 있다. 참고로 80번 포트는 아파치 웹 서버 포트이다.

3. Apache Web Server

아파치 웹 서버를 설치해 준다. 중요하지 않기 때문에 간단하게 명령어를 작성한다. 명령어는 아래와 같다.

apt-get update

apt-get install apache2 -y

service apache2 start

4. Server

이제 서버에접속하는 단계를 가진다. 아파치 웹 서버의 실행이 정상적으로 되었다면 호스트IP:80으로 접근이 가능하다.

서버를 열어보기 전에 netstat -ntlp명령어로 포트가 정상적으로 실행되고 있는지 확인해 보면 좋다.

위 페이지 처럼 이제 정상적으로 접근이 가능하다!

참고

시작하세요! 도커/쿠버네티스
Docker Document

profile
읽기만 해도 이해가 되는 글을 쓰기 위해 노력합니다.

0개의 댓글