도커(Docker)

Docker는 애플리케이션 구축, 구현, 테스트 등을 위한 격리된 가상화 환경(컨테이너)을 생성하는 서비스형 플랫폼입니다.
가상화란?
컨테이너는 애플리케이션이 실행되는 환경까지 포함하여 실행할 수 있도록 하는 격리 기술입니다. Docker는 이러한 컨테이너를 다루는 도구 중 가장 유명하며, 컨테이너 런타임으로 분류됩니다.
Docker를 사용하는 이유
Docker는 애플리케이션 실행 환경을 통합적으로 관리하여 일관성을 제공합니다. 개발, 테스트, 배포의 모든 과정에서 동일한 환경을 유지할 수 있습니다.
Docker 구성 요소
1. Docker 데몬
- Docker Engine의 핵심으로 컨테이너를 실행하고 관리하는 백그라운드 프로세스.
2. Docker 클라이언트
- 명령줄 인터페이스(CLI)를 통해 Docker 데몬과 상호작용.
3. Docker 파일(Dockerfile)
- 도커 이미지를 생성하기 위한 명령어가 포함된 텍스트 문서.
- 애플리케이션 실행에 필요한 OS, 라이브러리, 종속성 등이 정의됩니다.
Dockerfile 예시
FROM eclipse-temurin:17.0.11_9-jdk
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
4. Docker 이미지(Docker Image)
Docker 이미지는 애플리케이션 실행 환경을 포함하는 불변의 파일입니다.
- 애플리케이션 실행에 필요한 모든 파일과 라이브러리를 포함.
- Dockerfile을 통해 생성되며, Docker Hub에 저장 및 공유 가능.
- 컨테이너 실행의 기반이 되는 템플릿 역할.
컨테이너와의 관계
Docker 이미지는 실행 자체는 불가능하며, 이를 기반으로 Docker 컨테이너를 생성해야 합니다.
5. Docker 컨테이너(Docker Container)
Docker 컨테이너는 애플리케이션 실행을 위한 가상화된 런타임 환경입니다.
- 컨테이너는 Docker 이미지를 기반으로 생성.
- 애플리케이션과 그 종속성을 패키징하여 독립적인 실행 환경 제공.
- 자원을 호스트 OS와 공유하며, 컨테이너 간 격리 보장.
VM(Virtual Machine)과의 차이점
- VM은 하드웨어 수준에서 가상화하지만, 컨테이너는 애플리케이션 계층에서 가상화.

6. Docker 허브(Docker Hub)
Docker Hub는 도커 이미지를 관리하고 공유할 수 있는 중앙 저장소입니다.
- 개발자는 Docker Hub에서 필요한 이미지를 다운로드하거나 직접 업로드 가능.
7. Docker Compose
Docker Compose는 여러 컨테이너를 정의하고 함께 실행할 수 있는 도구입니다.
- YAML 파일을 사용하여 컨테이너 설정 작성.
- 복잡한 애플리케이션 환경도 간단하게 관리 가능.
Docker를 통한 애플리케이션 실행 과정

1. Dockerfile 작성
- 애플리케이션 실행에 필요한 환경을 정의합니다.
2. Docker 이미지 생성
- Dockerfile을 빌드하여 Docker 이미지를 생성.
docker build -t 사용자ID/이미지이름 .
docker push 사용자ID/이미지이름
3. Docker 컨테이너 생성
- Docker 이미지를 기반으로 컨테이너 생성.
docker run -p 8080:8080 사용자ID/이미지이름
4. Docker 컨테이너 실행
- 생성된 컨테이너는 독립적 실행 환경을 제공하며 애플리케이션을 실행 가능.
추가적으로 알아야 할 개념
1. Docker Volume
2. Docker - Jenkins 통합
- Jenkins를 컨테이너화하여 CI/CD 환경을 구축 가능.
3. Portainer
- 원격 서버의 Docker 관련 정보를 시각적으로 관리할 수 있는 플랫폼.