Cloud/AWS

[AWS] EC2 서버 구축 가이드 Part 4: Docker로 Nginx 컨테이너 실행하기

Tae4an 2025. 7. 23. 01:34
반응형

 

지난 Part 3에서는 apt라는 패키지 매니저를 사용해 EC2 서버에 Nginx를 직접 설치했습니다. 이 방식은 간단하지만, 여러 프로그램을 설치하다 보면 서버 환경이 복잡해지고 프로그램 간에 충돌이 발생할 수 있습니다.

이번 포스팅에서는 이러한 문제를 해결하는 현대적인 인프라 기술, Docker(도커)를 소개합니다. 서버에 직접 설치하는 대신, 프로그램을 독립된 '컨테이너'라는 공간에 담아 실행하는 방식을 실습해 보겠습니다.


Docker란 무엇인가?

 

Docker는 애플리케이션을 컨테이너라는 표준화된 단위로 패키징하는 플랫폼입니다. 컨테이너는 운영체제로부터 격리된 공간으로, 프로그램 실행에 필요한 모든 것(코드, 라이브러리, 설정 등)을 포함하고 있습니다.

이 방식을 사용하면, "제 컴퓨터에서는 잘 됐는데, 서버에서는 왜 안 되죠?"와 같은 고질적인 문제를 해결할 수 있습니다. 어디서든 동일한 환경으로 프로그램을 실행할 수 있기 때문입니다.

 

도커에 대해서 자세히 알고 싶으신 분은 아래의 포스팅을 확인 바랍니다.

 

[Docker] 개발자를 위한 필수 컨테이너 기술 Part 1: 개념

개발자라면 누구나 한 번쯤 "제 컴퓨터에선 잘 되는데요?"라는 말을 해보거나 들어본 경험이 있을 것입니다. 개발 환경이 미세하게 달라 발생하는 이 고질적인 문제는 협업의 효율을 떨어뜨리고

xotks7524.tistory.com

 


1단계: SSH로 EC2 인스턴스 접속하기

먼저, Part 2에서 다룬 방법으로 EC2 인스턴스에 접속합니다.

ssh -i "~/.ssh/your-key-name.pem" ubuntu@YOUR_PUBLIC_IP_ADDRESS

2단계: Docker 설치하기

이제 EC2 서버에 Docker를 설치하겠습니다. 공식 문서를 따라 가장 안정적인 방법으로 설치를 진행합니다.

 

(아래 명령어들을 순서대로 터미널에 복사하여 실행하세요.)

1. 패키지 목록 업데이트 및 사전 필요 패키지 설치

sudo apt-get update
sudo apt-get install ca-certificates curl

 

2. Docker 공식 GPG 키 추가

sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

 

3. Docker 저장소(Repository) 설정

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

4. Docker 엔진 설치

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 

5. Docker 서비스 상태 확인

sudo systemctl status docker

이 명령어는 Docker 데몬의 상태를 확인합니다. 출력에서 active (running)이 녹색으로 표시되면 Docker가 정상적으로 실행 중입니다.(q를 입력하여 나갈 수 있습니다.)

 

6. sudo 없이 Docker 명령어 사용하기 (Post-installation)

sudo usermod -aG docker ${USER}

⚠️ 중요: 위 설정을 적용하려면 SSH 접속을 종료했다가 다시 접속해야 합니다.

  • 매번 sudo를 붙이는 것은 번거롭습니다. 현재 사용자(ubuntu)를 docker 그룹에 추가하여 sudo 없이 Docker 명령어를 사용하도록 설정합니다.

3단계: Docker로 Nginx 컨테이너 실행하기

다시 서버에 접속했다면, 이제 단 한 줄의 명령어로 Nginx를 실행할 수 있습니다.

docker run --name my-nginx -d -p 8080:80 nginx

 

명령어 각 부분의 의미는 다음과 같습니다.

  • docker run: 컨테이너를 실행합니다.
  • --name my-nginx: 컨테이너에 my-nginx라는 이름을 붙여줍니다.
  • -d: 컨테이너를 백그라운드에서 실행합니다.
  • -p 8080:80: 가장 중요한 부분입니다. EC2 서버의 8080번 포트로 들어오는 요청을 컨테이너 내부의 80번 포트로 전달(매핑)합니다. 이러한 방식을 포트 포워딩(Port Forwarding) 또는 포트 매핑이라고 부릅니다.
  • nginx: Docker Hub라는 곳에 저장된 공식 Nginx 이미지를 사용합니다. 로컬에 이미지가 없으면 자동으로 다운로드합니다.

 

명령어를 실행한 후에는 컨테이너가 정상적으로 실행되고 있는지 확인해야 합니다.

// 실행 중인 컨테이너 확인
docker ps


이 명령어를 실행하면 다음과 같은 정보를 확인할 수 있습니다:

- CONTAINER ID: 컨테이너의 고유 ID
- IMAGE: 사용된 Docker 이미지 (nginx)
- COMMAND: 컨테이너에서 실행 중인 명령어
- CREATED: 컨테이너가 생성된 시간
- STATUS: 현재 상태 (Up X minutes = 정상 실행 중)
- PORTS: 포트 매핑 정보 (0.0.0.0:8080->80/tcp)
- NAMES: 컨테이너 이름 (my-nginx)


STATUS"Up"으로 표시되고 PORTS"0.0.0.0:8080->80/tcp"가 나타나면 컨테이너가 성공적으로 실행되고 있는 것입니다.


4단계: 보안 그룹 설정 및 접속 테스트

Part 3에서 HTTP(80번 포트)를 열었던 것처럼, 이번에는 Docker 컨테이너와 연결된 8080번 포트를 보안 그룹에 추가해야 합니다.

  • AWS 콘솔에서 EC2 > 네트워크 및 보안 > 보안 그룹으로 이동합니다.
  • 내 인스턴스에 연결된 보안 그룹을 선택하고 [인바운드 규칙 편집]을 클릭합니다.

 

 

  • [규칙 추가]를 누르고 아래와 같이 설정합니다.
    • 유형: 사용자 지정 TCP
    • 포트 범위: 8080
    • 소스: Anywhere-IPv4 (0.0.0.0/0)
  • [규칙 저장]을 클릭합니다.

 

이제 웹 브라우저 주소창에 http://[내 EC2 IP 주소]:8080 형식으로 접속해 보세요. Part 3에서 봤던 것과 동일한 "Welcome to nginx!" 페이지가 나타날 것입니다.


마무리하며

서버에 직접 설치했을 때와 똑같은 결과가 나왔지만, 그 과정은 완전히 다릅니다. Docker를 사용함으로써 Nginx는 서버의 다른 부분과 완벽히 격리되었고, 우리는 더 이상 프로그램 간의 충돌이나 의존성 문제를 걱정할 필요가 없어졌습니다.

이것이 바로 수많은 기업과 개발자들이 Docker를 사용하는 이유입니다. 이제 여러분은 AWS EC2 위에 현대적인 방식으로 애플리케이션을 배포할 기초를 다졌습니다.

 

반응형