1. 컨테이너와 개인 저장소의 세계 -1
컨테이너와 프라이빗 리포지토리의 세계.
1. 컨테이너란 무엇인가요?
컨테이너는 애플리케이션 실행을 위해 런타임 환경을 패키징하고 격리하는 기술입니다. 컨테이너를 통해 다양한 환경에서도 일관된 실행을 보장합니다.
실제 생활에 비유해보자면, 여러분의 요리가 너무 맛있어서 친구에게서 자신의 집에서 요리를 해줄 수 있는지 초청을 받았다고 가정해보세요. 여러분은 평소에 요리에 관심이 많기 때문에 요리에 필요한 도구는 모두 당신의 주방에 존재합니다. 하지만 친구 집에는 당신의 주방 도구가 없기 때문에 요리를 하기 쉽지 않을 수 있습니다. 여기서 여러분의 주방을 컨테이너라고 생각해보세요. 친구 집에 당신의 주방과 같은 똑같은 컨테이너가 있다면, 친구 집에서도 집에서 하는 것처럼 완벽한 요리를 할 수 있습니다.
이는 소프트웨어 개념의 컨테이너에도 적용할 수 있습니다. 컨테이너는 어디서든 애플리케이션을 완벽한 상태로 실행할 수 있도록 설계된 환경과 같다고 볼 수 있습니다.
2. 도커(Docker) 소개
컨테이너와 관련된 보편적인 플랫폼은 도커입니다. 도커를 통해 컨테이너에 대한 메타 정보를 쉽게 만들고 배포하고 실행할 수 있습니다. 그리고 컨테이너 관리와 개발, 배포, 스케일링 전략등을 간소화하는데 큰 도움을 주었습니다.
dockerfile 만 있으면 여러분의 애플리케이션을 컨테이너화 할 수 있습니다. 컨테이너화 된 정보를 이미지 라고 합니다. 아래의 dockerfile 이 있으면 별도의 gradle 설정 없이도 gradle 을 이용하는 애플리케이션을 빌드하고 실행할 수 있습니다.
FROM gradle:8.5.0-jdk17
WORKDIR /app
COPY . .
RUN gradle build --no-daemon
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/build/libs/app.jar"]
# 이미지 빌드, 실행.
docker build -t my-application . && docker run -p 8080:8080 --name my-application my-application
도커에 대한 문법과 상세 내용은 이 글을 쓰는 목적과 거리가 멀기 때문에 다루지 않겠습니다.
도커 리포지토리
리포지토리 라는 말에서 유추할 수 있듯이 저장소를 의미합니다. 컨테이너화 된 정보인 이미지를 저장할 수 있는 공간으로 내가 만든 이미지를 쉽게 공유할 수 있고 다른 사람이 만든 이미지를 쉽게 사용할 수 있게 합니다. 도커만 설치되어 있다면 가장 기초적인 nginx 에 대한 서버를 다음과 같은 명령어로 실행할 수 있습니다. 기본설정된 nginx 에 대한 이미지가 이미 docker hub 라는 공식 리포지토리에 있기 때문입니다.
docker run -p 80:80 --name my-nginx nginx
# 웹 페이지에서 주소창에 localhost 를 입력하면 nginx 서버를 볼 수 있습니다.
여러분이 만든 이미지도 공식 리포지토리에 업로드 할 수 있습니다. 리포지토리를 통해 쉽게 버전 관리를 할 수 있으며 이를 통해 CI/CD 에 쉽게 통합하게 할 수 있습니다.
프라이빗 리포지토리
여러분의 이미지를 한정된 인원에게만 공유하고 싶을 수도 있습니다. 이는 공식 docker hub 에서도 사용이 가능하며 클라우드 공급자인 AWS 의 ECR, Azure 의 ACR, GCP 의 GCR 등이 존재합니다. 프라이빗 리포지토리는 중요한 정보를 다루거나 노출되지 않았으며 하는 이미지를 다루기 때문에 보안과 관련된 다양한 기능을 제공합니다.