이번시간에는 도커가 설치된 윈도우에서 우분투 컨테이너의 웹에 접속해보겠습니다.

우분투 서버관리 / 웹 배포 등을 위한 기본적인 단계라고 생각하면됩니다.

 

우선 window powershell 또는 도커 데스크탑 CLI모드에 들어갑니다.

 

1. 프로세스 상태 확인: docker ps -a (중지 상태인 컨테이너를 포함한 모든 컨테이너를 출력해줌)

* docker ps만 입력하면 실행 중인 컨테이너 목록만 출력됩니다.

 

2. 컨테이너 실행: docker start ubuntu_server(컨테이너 이름)

3. 원격 접속: docker attach ubuntu_server

 

우분투 컨테이너 이름이 ubuntu_server일 때 다음과 같이 하나의 명령문으로 실행할 수도 있습니다.

docker exec -it ubuntu_server bash   or  docker exec -it ubuntu_server /bin/bash

 

그리고 우선적으로 아래 명령어로 우분투가 어떤 ip를 갖고 있는지 확인해봅니다.

ifconfig

 

실행이 안됩니다.

우리가 설치한 우분투는 저번에도 언급했듯이 빈껍데기 그 자체라서 모든 필요 패키지를 설치해줘야합니다..

아래 명령어로 net-tools를 설치해준 뒤 다시 ifconfig명령어를 입력해봅니다.

 

apt-get install net-tools

 

eth0 네트워크 인터페이스에 내부망 주소 172.17.0.2가 할당 되어있는 것을 확인할 수 있습니다.

도커 컨테이너를 실행하면 기본적으로 컨테이너의 네트워크 환경은 NAT으로 설정되어있습니다.

NAT내부망에서 동작하기 때문에 외부에서 컨테이너 내부로 접속이 불가능합니다.

이는 VM방식과 동일합니다. Vmware나 Virtual Box에서 기본적으로 네트워크 환경이 NAT으로 설정되어 있어(물론 변경 가능) 호스트에서 VM 내부 OS로 , 그리고 그 반대의 경우에도 서로 ip접속이 불가능 했습니다.

이를 Bridged모드로 변경하여 호스트와 통신할 수 있습니다. (같은 공유기에 연결되어 있을 경우)

이는 포트포워딩 방식을 이용한 것인데, 우리 실습 과정에도 포트포워딩을 통해 우분투 컨테이너와 호스트가 통신할 수 있습니다.

 

이제 호스트9000번 포트와 컨테이너 80포트를 바인딩하고 우분투에 아파치를 설치하여 호스트에서 접속해보겠습니다.

호스트에서 바인딩 할 포트넘버는 사용가능한 포트, 즉 사용중이지 않은 포트를 사용해야합니다.

이는 CMD창에서 netstat명령어로 확인할 수 있습니다.

 netstart명령어는 자신의 컴퓨터와 연결된 모든 네트워크 연결을 보여줍니다.

말 그대로 현재 연결된 네트워크만 보여주므로 아래 명령어처럼 옵션을 붙여서 사용가능한 포트를 확인합니다.

 

netstat -ano 명령어로 확인할 수 있습니다.

-a: 모든 포트 표시

-n: ip주소:포트 형태로 표시

-o: PID(프로세스 ID) 표시

뭐가 엄청 많이 나오는데, 상태가 LISTENING일 경우 현재 해당 프로세스가 연결대기 중인 상태이고  ESTABLISHED일 경우 연결되어 사용 중인 포트입니다. LISTENING, ESTABLISHED상태의 포트는 사용할 수 없기 때문에 나열된 포트 숫자 중에서 중간에 숫자 범위에 포함되는 아무 포트나 사용하거나 LISTENING 상태인 프로세스를 kill해서 해당 포트를 사용하면됩니다.

그냥 깔끔하게 LISTENING 상태의 네트워크 정보만 알고 싶으면 아래 명령어를 사용하면됩니다.

netstat -ano | grep "LISTEN"

이제 포트 하나(9000번)를 선택하여 우분투 포트와 바인딩 시켜보겠습니다.

* 위 이미지에 나와있지 않은 포트를 사용하는 겁니다.

 

다시 도커로 돌아와서 새 컨테이너를 생성합니다.

이미 생성한 컨테이너가 있으면 다시 생성하여 설정해야 하므로 새 컨테이너를 생성하여 포트포워딩 해주겠습니다.

아파치 웹서버를 설치할건데, 아파치는 기본 포트가 80이므로 80으로 바인딩해주겠습니다.

* 아파치 웹은 기본 포트가 80이기 때문에 포트포워딩할 때 다른 포트넘버를 넣어주면 정상작동이 되지 않 습니다.

컨테이너 실행-> 접속단계입니다. 컨테이너 이름은 ubuntu_apache로 지어주었습니다. 9000번 포트를 컨테이너 80번 포트로 포워딩 해보겠습니다.

docker run -it --name ubuntu_apache -p 9000:80 ubuntu /bin/bash

"-p 9000:80" 이 눈에 띄는데, 호스트의 9000번포트를 컨테이너의 80번포트로 바인딩 시켜주는 것입니다.

 

새로운 컨테이너므로 똑같이 빈 껍데기 이므로 패키지를 업데이트 해주고 아파치2를 설치합니다.

나중에 ip를 확인할 일이 있을테니 net-tools 도 설치해주었습니다.

apt-get update

apt-get install net-tools

 

ifconfig로 ip를 확인해보니  172.17.0.3으로 할당되어있습니다. 저번에 설치한 ubuntu_server 컨테이너의 아이피는 172.17.0.2였는데, 도커 컨테이너 내부 IP가 172.17.0.x 형태로 할당 됨을 알 수 있습니다.

아파치를 설치합니다.

apt-get install apache2

 

아파치 설치 중간에 지역을 선택하라고 나오면 Asia-> Seoul로 설정하면됩니다.

 

이제 아파치의 버전 정보와 현재 상태를 확인합니다.

apachectl -version

service status apache2

그리고 실행을 시켜줍니다. 

service apache2 start (종료는 stop, 재시작은 restart)

 

systemd패키지가 없어서 systemctl status apache2 명령어는 인식이 안되므로, 위 명령어로 실행해주세요.

 

* 최초 실행 시 아래 에러 문구가 뜰 수 있습니다.

ah00558: apache2 could not reliably determine the server's fully qualified domain name

 

오류 내용을 검색해보니 접속할 도메인 이름을 설정하라는 건데, 지금은 외부->도커 웹 연결만 확인하면 되므로 굳이 지정해줄 필요는 없습니다. 다시 service apache2 start 명령어를 입력하면 정상 실행됩니다.

이제 우분투 컨테이너의 웹 브라우저와 호스트의 크롬에서 아파치 실행을 확인해봅니다.

Docker Desktop을 키고 컨테이너 목록에서 오른쪽에 있는 첫번째 아이콘을 입력하면 됩니다.

 

localhost:9000으로 기본 입력되어있고 아파치 디폴트 페이지가 잘 보입니다. 숫자9000은 아까 호스트 포트를 컨테이너80번에 바인딩시켜준 번호입니다.

windows powershell을 하나 더 띄워서 ps -a명령어를 입력하면 포트포워딩 정보를 알 수 있습니다.

 바인딩 할 때 프로토콜 옵션을 조정해주지 않으면 기본 tcp프로토콜이 적용됩니다.

호스트 크롬창에서 똑같이 입력해도 결과는 같습니다. window에서 cmd를 띄워서 호스트 ip를 확인한 다음,

크롬에 ip:9000을 입력해도 똑같이 아파치 화면이 나오는 것을 확인할 수 있습니다.

ex)192.168.122.1:9000

 

아파치 웹서버를 끄고싶다면 터미널에 service apache2 stop 명령어를 입력하시면 됩니다.

 

오늘 우리가 한 내용을 아래 그림으로 요약할 수 있습니다.

 

이제 윈도우(호스트)에서도 우분투 컨테이너 웹서버에 접속할 수 있게 됐습니다!

 

 

 

 

 

 

+ Recent posts