들어가며
현대의 개발 환경에서 클라우드와 컨테이너 기술은 필수가 되었습니다. 이번 글에서는 AWS EC2 서버가 무엇인지 알아보고, Docker를 활용한 컨테이너 환경 구축 방법을 단계별로 살펴보겠습니다.
Amazon Elastic Compute Cloud (EC2)는 AWS에서 제공하는 클라우드 컴퓨팅 서비스입니다. 쉽게 말해, 인터넷을 통해 접근할 수 있는 가상 서버를 임대해주는 서비스라고 할 수 있습니다.
확장성 (Scalability)
필요에 따라 서버 성능을 쉽게 늘리거나 줄일 수 있습니다. CPU, 메모리, 스토리지를 자유롭게 조정할 수 있어 비용 효율적입니다.
다양한 인스턴스 타입
웹 서버용 t2.micro부터 고성능 컴퓨팅용 c5.24xlarge까지 용도에 맞는 다양한 서버 스펙을 선택할 수 있습니다.
글로벌 인프라
전 세계 여러 지역에 데이터센터가 있어 사용자와 가까운 곳에서 서비스를 제공할 수 있습니다.
종량제 과금
사용한 만큼만 비용을 지불하므로 초기 투자 비용 없이 서버를 운영할 수 있습니다.
Docker는 애플리케이션을 컨테이너라는 격리된 환경에서 실행할 수 있게 해주는 플랫폼입니다. "어디서나 동일하게 실행되는 애플리케이션"을 만드는 것이 Docker의 핵심 목표입니다.
컨테이너 (Container)
애플리케이션과 그 실행에 필요한 모든 환경을 하나로 묶은 패키지입니다. 마치 배송용 컨테이너처럼 내용물이 어디로 가든 안전하게 보호되고 동일하게 동작합니다.
이미지 (Image)
컨테이너를 만들기 위한 템플릿입니다. 애플리케이션 코드, 런타임, 라이브러리, 환경 변수 등이 모두 포함되어 있습니다.
Dockerfile
Docker 이미지를 만들기 위한 설명서입니다. 어떤 베이스 이미지를 사용하고, 어떤 파일을 복사하고, 어떤 명령어를 실행할지 정의합니다.
가상머신 (Virtual Machine)
Docker 컨테이너
환경 일관성
"내 컴퓨터에서는 잘 됐는데..."라는 말을 더 이상 하지 않아도 됩니다. 개발, 테스트, 프로덕션 환경이 모두 동일합니다.
빠른 배포
컨테이너는 몇 초 만에 시작할 수 있어 배포 속도가 매우 빠릅니다.
확장성
필요에 따라 컨테이너를 쉽게 늘리거나 줄일 수 있어 트래픽 변화에 유연하게 대응할 수 있습니다.
마이크로서비스 아키텍처
각 서비스를 독립적인 컨테이너로 운영하여 MSA 구현이 쉬워집니다.
이제 실제로 EC2 서버에 Docker를 설치해보겠습니다. Ubuntu 20.04 LTS 기준으로 진행하겠습니다.
먼저 시스템의 패키지 목록을 최신으로 업데이트하고 기존 패키지들을 업그레이드합니다.
# 패키지 업데이트 및 업그레이드
sudo apt update && sudo apt upgrade -y
apt update는 사용 가능한 패키지 목록을 업데이트하고, apt upgrade는 설치된 패키지들을 최신 버전으로 업그레이드합니다. -y 옵션은 모든 확인 질문에 자동으로 'yes'로 답하게 해줍니다.
Docker 설치 과정에서 필요한 기본 도구들을 설치합니다.
# 기본 도구 설치
sudo apt install -y curl wget git unzip zip vim software-properties-common
각 도구의 역할:
많은 개발 환경에서 Java가 필요하므로 함께 설치합니다.
# Java 설치
sudo apt install -y openjdk-17-jdk
# Java 버전 확인
java -version
OpenJDK 17은 현재 LTS(Long Term Support) 버전으로 안정적이고 장기간 지원됩니다.
Docker 저장소에 안전하게 접근하기 위해 HTTPS 관련 패키지를 설치합니다.
# HTTPS 관련 패키지 설치
sudo apt install apt-transport-https ca-certificates
Docker 공식 저장소를 시스템에 추가하는 과정입니다.
# Docker repository 접근을 위한 GPG 키 설정
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# Docker repository 등록
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
GPG 키는 패키지의 무결성을 검증하는데 사용됩니다. 이를 통해 다운로드하는 Docker 패키지가 공식적이고 변조되지 않았음을 확인할 수 있습니다.
새로운 저장소를 추가했으므로 패키지 목록을 다시 업데이트합니다.
# 다시 업데이트
sudo apt update
이제 Docker를 설치할 수 있습니다.
# Docker 설치
sudo apt install docker-ce
# 설치 확인
docker --version
설치가 완료되면 Docker 버전 정보가 출력되어야 합니다.
기본적으로 Docker 명령어는 관리자 권한이 필요합니다. 매번 sudo를 입력하는 것이 번거로우므로 현재 사용자를 docker 그룹에 추가합니다.
# 현재 사용자 확인
whoami
# 출력: ubuntu
# 현재 사용자를 docker 그룹에 추가
sudo usermod -aG docker ubuntu
# 터미널 재시작 후 그룹 확인 (끝에 docker가 있는지 확인)
id -nG
usermod -aG docker ubuntu 명령어의 의미:
그룹 변경사항을 적용하기 위해 터미널을 재시작하거나 다음 명령어를 실행합니다.
# 새로운 그룹 설정 적용
newgrp docker
# Docker 테스트
docker run hello-world
hello-world 컨테이너가 성공적으로 실행되면 Docker 설치가 완료된 것입니다.
설치가 완료되었으니 간단한 Docker 명령어들을 살펴보겠습니다.
# Nginx 웹서버 실행
docker run -d -p 80:80 nginx
# 실행 중인 컨테이너 확인
docker ps
# 모든 컨테이너 확인 (중지된 것 포함)
docker ps -a
# 이미지 목록 확인
docker images
# 이미지 다운로드
docker pull ubuntu:20.04
# 이미지 삭제
docker rmi ubuntu:20.04
# 컨테이너 중지
docker stop [컨테이너_ID_또는_이름]
# 컨테이너 삭제
docker rm [컨테이너_ID_또는_이름]
# 컨테이너 내부 접속
docker exec -it [컨테이너_ID_또는_이름] /bin/bash
Docker와 시스템을 정기적으로 업데이트하여 보안 취약점을 방지해야 합니다.
# 시스템 업데이트
sudo apt update && sudo apt upgrade
# Docker 업데이트
sudo apt update && sudo apt install docker-ce
Docker 그룹에 추가된 사용자는 실질적으로 root 권한을 가질 수 있으므로, 필요한 사용자만 추가해야 합니다.
필요한 포트만 열어두고 나머지는 차단하는 것이 좋습니다.
# UFW 방화벽 활성화
sudo ufw enable
# 특정 포트 허용 (예: SSH)
sudo ufw allow 22
# HTTP 포트 허용
sudo ufw allow 80
AWS EC2와 Docker는 현대 개발 환경의 핵심 기술입니다. EC2를 통해 확장 가능한 클라우드 인프라를 구축하고, Docker로 일관된 개발 및 배포 환경을 만들 수 있게 되었습니다.
이번 가이드를 통해 EC2 서버에 Docker를 성공적으로 설치하셨다면, 이제 컨테이너 기반의 애플리케이션 개발과 배포에 한 걸음 더 가까워진 것입니다. 다음 단계로는 Dockerfile 작성, Docker Compose 활용, 그리고 실제 애플리케이션 컨테이너화에 도전해보시기 바랍니다.