최근 클라우드 환경이 보편화되면서 애플리케이션을 배포하기 위한 효율적인 방법으로 Docker가 각광받고 있습니다. Docker는 애플리케이션을 그 실행에 필요한 모든 요소와 함께 패키징하여 컨테이너 형태로 배포할 수 있는 플랫폼입니다. 이 포스팅에서는 Docker를 이용해 애플리케이션을 배포하는 방법에 대해 설명드리겠습니다.

Docker란 무엇인가?
Docker는 소프트웨어를 컨테이너라는 독립적인 단위로 패키징하여, 다양한 환경에서 일관된 방식으로 애플리케이션을 실행할 수 있도록 지원하는 플랫폼입니다. 이 덕분에 개발, 테스트, 프로덕션 환경 간의 일관성을 보장할 수 있으며, “내 로컬에서는 잘 작동하는데…”와 같은 문제를 줄일 수 있습니다. 컨테이너는 운영체제와는 무관하게 어디서든 동일하게 동작하여 애플리케이션의 이식성을 극대화합니다.
Docker의 장점
- 일관성 있는 환경: 모든 환경에서 동일한 컨테이너 이미지를 사용하여 배포할 수 있습니다.
- 이식성: Docker는 OS에 독립적이므로, 다양한 클라우드 플랫폼에서 동일하게 사용 가능합니다.
- 빠른 배포: 애플리케이션과 모든 종속성을 하나의 패키지로 묶어 배포할 수 있어 새로운 환경에 신속하게 배포가 가능합니다.
Dockerfile 작성하기
애플리케이션을 Docker 이미지로 만들기 위해서는 Dockerfile을 작성해야 합니다. Dockerfile은 Docker가 이미지를 빌드하는 데 필요한 명령어들을 포함하고 있습니다. 아래는 Spring Boot 애플리케이션의 Dockerfile 작성 예시입니다.
# 공식 OpenJDK 이미지를 부모 이미지로 사용
FROM openjdk:17-jdk-slim
# 컨테이너 내의 작업 디렉토리 설정
WORKDIR /app
# 프로젝트의 빌드 아티팩트(JAR 파일)를 컨테이너에 복사
COPY build/libs/*.jar app.jar
# 컨테이너 외부에 port 8080을 공개
EXPOSE 8080
# JAR 파일 실행
ENTRYPOINT ["java", "-jar", "app.jar"]
Docker 이미지 빌드 및 푸시
이제 Dockerfile을 작성한 후에는 다음과 같은 절차로 이미지를 빌드하고 Docker Hub에 푸시할 수 있습니다.
- 프로젝트 빌드:
./gradlew clean build
명령어를 사용하여 프로젝트를 빌드합니다. - Docker 이미지 빌드:
docker build -t [docker account ID]/[project name] .
명령어로 이미지를 빌드합니다. - Docker 이미지 푸시:
docker push [docker account ID]/[project name]
를 통해 Docker Hub에 이미지를 업로드합니다.
AWS EC2 인스턴스 생성 및 Docker 설치
AWS EC2 인스턴스를 생성하여 Docker를 설치하고 애플리케이션을 배포할 수 있습니다. 아래는 EC2 인스턴스를 생성하는 방법입니다.
- AWS 콘솔에 로그인 후 EC2 서비스를 선택하고 “인스턴스 시작”을 클릭합니다.
- Ubuntu AMI를 선택하고 인스턴스 유형을 선택합니다. t2.micro는 무료 티어로 사용할 수 있는 옵션입니다.
- SSH 키 페어를 설정하고 다운로드한 후, 인스턴스를 시작합니다.
- 보안 그룹을 설정하여 SSH(22), HTTP(80), HTTPS(443) 및 애플리케이션 포트(예: 8080)를 허용합니다.
EC2 인스턴스에 접속하기
인스턴스가 생성되면 SSH를 통해 EC2 인스턴스에 접속할 수 있습니다.
chmod 400 your-key-pair.pem
ssh -i "your-key-pair.pem" ubuntu@your-ec2-public-ip
Docker 및 Docker Compose 설치하기
EC2 인스턴스에 접속한 후, 다음 명령어들을 입력하여 Docker와 Docker Compose를 설치합니다.
sudo apt update -y
sudo apt upgrade -y
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
# Docker Compose 설치
sudo apt install -y curl
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Docker 및 Docker Compose 확인하기
설치가 완료되었다면, 아래 명령어로 버전을 확인하여 정상적으로 설치되었는지 확인합니다.
docker --version
docker-compose --version
Docker Compose로 애플리케이션 실행하기
이제 Docker Compose를 사용하여 애플리케이션을 실행할 수 있습니다. 아래는 예시 Docker Compose 파일의 구조입니다.
version: "3.7"
services:
my-app:
image: my-app-image
ports:
- "8080:8080"
depends_on:
- my-database
my-database:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
위의 예시와 같이 필요한 서비스들을 정의하고 명령어 docker-compose up
으로 모든 서비스를 실행할 수 있습니다.

결론
Docker를 활용하면 애플리케이션을 다양한 환경에서 일관성 있게 배포할 수 있으며, 이로 인해 개발자들은 더 신속하게 소프트웨어를 제공할 수 있습니다. 이번 포스팅을 통해 Docker를 이용한 애플리케이션 배포의 기본적인 흐름을 이해하셨기를 바랍니다. 앞으로 Docker를 통한 배포 경험이 개발자 여러분에게 많은 도움이 되길 바랍니다.
자주 찾으시는 질문 FAQ
Docker란 무엇인지 설명해 주세요.
Docker는 소프트웨어를 독립적인 컨테이너 형태로 묶어 다양한 환경에서 일관되게 실행할 수 있도록 돕는 플랫폼입니다.
Docker의 주요 장점은 무엇인가요?
Docker의 장점으로는 동일한 컨테이너 이미지를 사용하여 일관된 환경을 제공하고, OS에 독립적인 이식성을 갖추며, 신속한 배포가 가능하다는 점이 있습니다.
Dockerfile은 어떤 역할을 하나요?
Dockerfile은 Docker가 애플리케이션 이미지를 빌드하기 위해 필요한 명령과 지시사항을 포함한 스크립트 파일입니다.
AWS에 Docker를 배포하는 방법은 무엇인가요?
AWS에 Docker를 배포하려면 EC2 인스턴스를 생성하고 Docker를 설치한 후, Docker Compose를 활용하여 애플리케이션을 실행하면 됩니다.