꿈꾸는 시스템 디자이너

Docker 사용법 | 컨테이너에 포트 부여 방법 | 이미지 생성 방법 본문

Development/Cloud computing

Docker 사용법 | 컨테이너에 포트 부여 방법 | 이미지 생성 방법

독행소년 2020. 7. 1. 15:34

Docker의 컨테이너를 생성할 때 기본적으로 모든 포트는 닫힌 상태로 생성되게 된다. 만약 컨테이너에서 서버를 운영할 경우 외부에서 컨터이너 내부의 서버로 접근하기 위해서는 해당 포트를 직접 부여해야 한다.

 

1. 컨테이너 생성 시 포트를 부여하는 방법

컨테이너 생성시 포트를 부여하기 위해서는, -p 옵션을 이용해서 바인딩할 포트를 부여한다.

다음은 우부투 18.04 이미지를 이용해서 myserver라는 컨테이너를 생성하면서, 호스트 머신의 80번 포트를 컨테이너의 80번 포트로 바인딩 한 것이다.

ubuntu@here4you:~$ sudo docker run -it -p 80:80 --name myserver ubuntu:18.04
root@c628d61e15e8:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@c628d61e15e8:/#

 

* 참고로 이번 컨테이너의 생성(run) 단계에는 지난 포스팅에서 컨테이너를 생성했을 때와 달리 별도의 다운로드 과정이 없이 신속하게 컨테이너가 생성되었다. 이는 한번 다운로드한 이미지(ubuntu 18.04)를 로컬에 저장하고 있다가 재사용했기 때문이다.

 

정상적인 포트 부여 여부를 확인하기 위해 nginx를 설치하고 실행해 보자.

root@c628d61e15e8:/# apt-get update
root@c628d61e15e8:/# apt-get upgrade
root@c628d61e15e8:/# apt-get install nginx
root@c628d61e15e8:/# service nginx start

 

웹브라우저를 열어 호스트 머신의 IP를 입력한 후 nginx에 접속이 가능한지 확인한다. 다음과 같이 출력되면 성공한 것이다.

호스트 머신의 80번 포트로 수신된 요청이 컨테이너의 80번 포트를 통해 nginx까지 전달되고 그 응답이 돌아온 것이다.

 

 

2. 이미 생성한 컨테이너에 포트를 부여하는 방법

지난 포스팅에서 별도의 포트를 부여하지 않은 study 컨테이너를 생성했다. 하지만 study 컨테이너에 직접 포트를 부여하는 방법은 없다. 이미 생성단계에서 포트를 부여하지 않았기 때문이다.

다만, 기존의 컨테이너를 이미지화하고 그 이미지를 이용해서 새로운 컨테이너를 생성하면서 포트를 부여하는 간접적인 방법으로 문제를 해결할 수 있다.

 

우선 지난 포스팅에서 생성한 study 컨테이너를 종료한다. (실행 중인 경우)

ubuntu@here4you:~$ sudo docker stop study
study
ubuntu@here4you:~$

 

study 컨테이너를 커밋하여 study 이미지로 만든다. 

ubuntu@here4you:~$ sudo docker commit study study
sha256:6db6048296618a19f42507becc28ce4b12d66a55fa43324e731416ee591cc67d
ubuntu@here4you:~$

 

우선 호스트에 존재하는 이미지들을 확인해 보자.

ubuntu@here4you:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
study               latest              6db604829661        44 seconds ago      94.2MB
ubuntu              18.04               8e4ce0a6ce69        2 weeks ago         64.2MB
ubuntu@here4you:~$

2주전에 생성된 ubuntu(18.04)의 이미지가 존재하며, 조금 전(44초 전) 생성한 study 이미지도 존재한다. 

 

이제 study 이미지를 이용해서 새로운 컨테이너(study2)를 생성하면서 포트를 부여해 보자.

ubuntu@here4you:~$ sudo docker run -it --name study2 -p 6900:80 study
root@a1b40c67d52d:/#

이번에는 호스트 머신의 6900 포트로 입려되는 요청을 study2 컨테이너의 80번 포트로 전달하도록 바인딩 했다.

 

앞서 기술한 방식과 동일하게 nginx를 설치하고 실행해 보자. 이번에는 호스트 IP 주소와 함께 포트번호 6900도 추가로 입력해야 한다.

 

정상적으로 nginx에 접근이 가능한 것을 확인하였다.

* 참고로 lightsail을 이용할 경우 호스트 인스턴스에 6900 포트를 열어주어야 한다.

 

Comments