[Docker] Dockerfile / Docker Compose

왕감자·2025년 2월 13일

2025 내일배움캠프

목록 보기
10/39

Docker는 기본적으로 리눅스 커널을 기반으로 동작

  • 리눅스(Linux) 운영체제(OS)
    - Ubuntu → 가장 인기 많고 쉬운 리눅스 배포판
    - Debian → 우분투의 기반이 되는 OS
    - CentOS → 기업에서 많이 쓰던 안정적인 배포판(현재는 Rocky Linux, AlmaLinux로 대체)
    - Alpine → Docker에서 자주 쓰이는 초경량 배포판

Dockerfile

앱 실행에 필요한 모든 것을 담고 있는 Docker Image를 만들 수 있음

  • 누구나 Dockerfile을 보고 똑같은 앱 환경을 쉽게 만들 수 있음
  • Dokerfile을 작성하면 앱을 만드는 과정을 자동화 할 수 있음. 그래서 매번 똑같은 방식으로 만들고 배포 가능


Dockerfile 명령어

명령어설명예시
FROM베이스 Image를 지정FROM ubuntu:22.04
MAINTAINERDockerfile 작성자 정보를 입력MAINTAINER naebaecaem <nbcamp@spartacoding.co>
LABELImage에 메타데이터 추가LABEL purpose='nginx test'
RUNImage 생성 시 실행할 명령어 입력RUN apt update && apt upgrade -y && apt autoremove && apt autoclean
CMDContainer 생성 시 실행할 명령어CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINTContainer 시작 시 실행할 명령어ENTRYPOINT ["npm", "start"]
ENV환경 변수 설정ENV STAGE staging
WORKDIR작업 디렉토리 지정WORKDIR /app
COPY파일을 Image에 복사COPY index.html /usr/share/nginx/html
USERContainer 기본 사용자를 설정docker RUN ["useradd", "user"] USER user
EXPOSEContainer에서 노출할 포트를 지정EXPOSE 80

Docker CLI 명령

  • Docker Image 생성
	docker buildx build -t my-nginx:latest .
	docker build -t my-nginx:latest . # 위 명령이 실행되지 않는 경우 실행
  • Container 실행
docker run -d -p 80:80 my-nginx:latest
  • Container 종료
docker stop my-nginx

Docker Compose

여러 Container를 쉽게 관리, 자동으로 설정, 확장하며 보안을 강화할 수 있음

  • 여러 Container 설정을 한 파일에 작성에 한번에 관리 가능
  • Docker Compose가 설정 파일을 기반으로 Container 생성하고 실행
  • Container간 의존 관계에 따라 자동으로 실행 순서 관리
  • Container 상태와 로그 모니터링 가능
  • 여러 Container를 그룹으로 관리
  • docker-compose.yml에 정의된 애플리케이션은 같은 네트워크에서 쉽게 통신 가능

Docker Compose 사용하는 곳

  • 개발환경
    docker compose up 한번에 실행
  • 자동화된 테스트 환경 - 테스트 환경을 정의해 쉽게 생성 및 제거 가능
    docker compose up -d
    ./run_tests
    docker compose down
  • 단일 호스트 배포 - 주로 개발과 테스트에 사용되지만 운영 환경에도 사용 가능


🤔 Dockerfile? Docker Image? Docker Container? Docker Compose?

  • Dockerfile : 레시피, 어떤 OS(Ubuntu)? 어떤 프로그램(Nginx)? 등을 설치할지
    - 뜨거운 물을 붓는다, 3분 기다린다 ...
FROM ubuntu:latest  # 우분투 기반
RUN apt-get update && apt-get install -y nginx  # Nginx 설치
CMD ["nginx", "-g", "daemon off;"]  # Nginx 실행

  • Docker Image : 포장된 컵라면, Dockerfile을 실행해 만든 완성된(실행 가능한) 패키지
    - 공장에서 레시피(Dockerfile)을 보고 컵라면(Docker Image) 만듦
    - 바로 사용할 준비 완, 물만 부으면 컵라면 만들 수 있음
docker build -t my-nginx .

  • Docker Container : 물 부어 완성된 라면, 이미지에서 실제 실행된 인스턴스(프로그램이 실행되는 환경)
    - 포장된 컵라면(Image)만 있으면 못 먹음 → 물을 부어 먹어야 함
docker run -d -p 8080:80 my-nginx

  • Docker Compose : 라면+김밥 세트 자동 조리, 여러 컨테이너 한번에 실행/관리


  • Dockerfile 작성 (실행환경)
    JDK 이미지 사용, Jar 파일 복사, Jar 실행 등..
  • Docker Image 빌드
    docker build -t 이미지이름 .
  • Docker Container 실행
    docker run -d --name 컨테이너이름 -p 8080:8080 이미지이름

    Dockerfile만 있으면 동일한 환경에서 개발 가능
    Docker Compose 파일이 있다면
    1. Dockerfile + docker-compose (이미지 빌드 미리x)
    2. docker-compose (이미지 빌드 미리 o)
    둘 중 한가지만 있어도 동일한 환경에서 개발 가능

0개의 댓글