1. 개요
예전에 팀 프로젝트로 구글 클라우드를 사용해서 웹사이트를 구축하고 외부에 웹서버를 열었던 게 생각나는데, 원래 방법은 클라우드 대신 도커와 포트포워딩을 함꼐 사용하는 것이었지만, 어디선가 계속 막혔기에 개별적으로 공부했던 걸 올리기로 해봅니다.
2. 포트포워딩의 목적

포트포워딩(Port Forwarding)이란 말은 생소할 수 있지만, 개념 자체가 어렵진 않습니다. 지금 내 컴퓨터, 휴대폰이 사용하고 있는 네트워크가 바로 내부 네트워크이며, 여기에서 실행한 서버를 로컬 서버라고 합니다.
하지만 로컬 서버는 같은 네트워크 안에서만 접근할 수 있기 때문에, 외부에서도 내 서버에 접속하려면 별도의 설정이 필요합니다. 이때, 특정 포트를 열어 외부에서 내 서버로 연결될 수 있도록 공유기에 알려주는 작업을 포트포워딩이라고 하며, 이를 설정하면 내 컴퓨터에서 직접 웹사이트(블로그, 쇼핑몰 등의 각종 서비스)를 운영할 수도 있습니다.
3. 실습환경 구성 및 과정
[사전 준비사항] : 도커 데스크탑 설치
혹시 도커 데스크탑 설치가 안되어있다면, 하단의 링크에서 사용하는 운영체제에 맞게 설치하면 됩니다.
Docker: Accelerated Container Application Development
Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.
www.docker.com
다음은 도커에서 실습할 환경의 구성을 간략히 정리한 표로, Ubuntu / Apache / PHP가 설치된 환경에서 진행될 예정입니다.
| Docker 실습 환경 구성 | ||
| 운영체제 | 웹 서버 | 사용 언어 |
| Ubuntu 24.04 | Apache | PHP |
실습하려는 과정을 단계적으로 나열하면 다음과 같습니다.
- 도커 데스크탑에서 우분투 컨테이너 실행 및 포트포워딩 설정
- 현재 컨테이너에 PHP, Apache 설치
- phpinfo 페이지 생성
- 외부 접속을 위해 공유기에서 포트포워딩 설정
- 외부에서 접속 후 확인
3-1.도커 데스크탑에서 우분투 컨테이너 실행 및 포트포워딩 설정

도커에서 우측 하단의 터미널을 열거나 따로 파워셀을 열어서 다음의 명령어를 입력합니다.
docker run -dit --name [컨테이너 이름] -p 8080:80 ubuntu:24.04
- --name [컨테이너 이름] : 여기선 사용자가 직접 이름을 설정해주면 되며, 이 글의 경우 my-first-server
- -p 8080:80 : 호스트 컴퓨터, 즉 지금 사용하고 있는 컴퓨터의 8080번 포트를 도커 컨테이너의 80번 포트와 연결
- ubuntu:24.04 : 사용하려는 환경을 우분투 24.04 이미지로 설정
3-2. 현재 컨테이너에 PHP, Apache 설치

우선 컨테이너에 접속하기 위해 다음의 명령어를 입력합니다.
docker exec -it my-first-server bash
다음으로, 컨테이너 내부의 패키지 업데이트 및 Apache,PHP를 설치합니다.
apt update && apt upgrade -y
apt install -y curl
apt install -y apache2 php libapache2-mod-php
[참고사항1] 설치할 때 "Please selecet the geographic area in which you live"가 뜨면, 다음처럼 입력해주면 됩니다.
- Geographic area : 5
- Timezone : 68


3-3. phpinfo 페이지 생성

서버가 정상적으로 작동하는 걸 눈으로 확인하기 위해 Apache가 설치된 경로에 phpinfo 라는 php를 생성합니다.
정상적으로 작성했을 경우, 해당 경로로 들어가 확인해보면 됩니다.
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
cd /var/www/html
cat phpinfo.php
- echo "<?php phpinfo(); ?>" /var/www/html/phpinfo.php : phpinfo 페이지를 Apache 기본 경로에 생성
- cd /var/www/html : Apache가 제공하는 웹 문서(HTML, PHP 등)를 저장하는 기본 경로로 이동
- cat phpinfo.php : 터미널 창에서 phpinfo.php 파일의 내용을 확인
다음으로 Apache 웹 서버를 실행한 후, 확인을 위해 두번째 코드에 적혀있는 주소로 접속해봅니다.
service apache2 start
http://localhost:8080/phpinfo.php
[참고사항2] "AH00558: apache2: Could not reliably determine the server's fully qualified domain name" 뜰 때

Apache가 서버의 도메인 이름을 자동으로 찾으려고 하는데, 도커 컨테이너는 도메인 설정이 없어서 뜨는 경고로, 지금은 연습차원이니 무시해도 되지만 메시지를 출력하고 싶지 않으면 다음의 명령어를 입력합니다.
echo "Servername localhost" >> /etc/apache2/apache2.conf
service apache2 restart
- Servername localhost : Apache가 도메인을 찾지 않게 설정 후 경고 메세지를 출력하지 않음
- service apache2 restart : Apache를 재시작합니다.
성공하면 다음처럼 뜹니다.

3-4. 외부 접속을 위해 공유기에서 포트포워딩 설정
이제 테스트 환경을 모두 세팅했지만 현재 사용하고 있는 컴퓨터에서만 접속이 가능한 상태입니다.
따라서 사용하고 있는 공유기에 따라 관리자 페이지로 접속 후에 포트포워딩을 진행해야 합니다.
제 공유기의 경우, iptime을 사용하고 있으므로 192.168.0.1로 접속하겠습니다. (비번 까먹었음)

| 외부 포트 | 8080 |
| 내부 IP (호스트 컴퓨터 내부 IP) | 192.168.x.xxx |
| 내부 포트 | 8080 |
포워딩 설정을 해야하는데, 상단의 표처럼 입력한 후 터미널에서 공인 IP를 확인합니다. 확인할 주소는 두번째 코드입니다.
curl ifconfig.me
http://공인IP:8080/phpinfo.php
3-5. 외부에서 접속 후 확인
외부에서 접속할 때 이 페이지가 뜨면 성공입니다.


4. 마무리
이제 원래 상태로 되돌려 놓기 위해 다음의 단계를 거쳐야 합니다.
- Apache 서버 중지 후 phpinfo.php 삭제
- 공유기 관리자 페이지에서 포트포워딩 규칙 삭제
- 현재 작동 중인 도커 컨테이너 중단 및 삭제
4-1. Apache 서버 중지 후 phpinfo.php 삭제
service apache2 stop
rm /var/www/html/phpinfo.php
4-2. 공유기 관리자 페이지에서 포트포워딩 규칙 삭제
이건 개별적인 것으로, 아까처럼 각자의 공유기에 맞는 관리자 페이지에 들어가 삭제해주시면 됩니다.
4-3. 현재 작동 중인 도커 컨테이너 중단 및 삭제
도커 데스크탑에서 그냥 중지 버튼 눌러도 되지만 명령어로 입력하려면 다음처럼 입력해줍니다.
exit
docker ps
docker stop <컨테이너 이름 및 ID>
docker rm <컨테이너 이름 및 ID>
'컴퓨터 > Server' 카테고리의 다른 글
| [Docker] 도커 기본 명령어 모음 (0) | 2025.02.17 |
|---|