상세 컨텐츠

본문 제목

[Docker] Dockerfile 튜토리얼: Ubuntu에서 Nginx 웹 서버 설정하기

Devops 도전기/Docker

by 끝까지해봐야지 2024. 5. 28. 09:49

본문

Dockerfile은 컨테이너화된 애플리케이션을 빌드하기 위한 필수적인 도구입니다. Dockerfile에서 사용되는 각 명령어는 특정한 기능을 가지고 있으며, 이를 이해하고 효과적으로 사용하는 것이 중요합니다. 아래에서는 Nginx 웹 서버를 설정하는 간단한 Dockerfile 예제를 통해 각 명령어의 역할을 설명했습니다.

Dockerfile 예제

dockerfile
 
# 베이스 이미지를 지정합니다. 여기서는 Ubuntu 20.04를 사용합니다.
FROM ubuntu:20.04

# 패키지 목록을 업데이트하고 Nginx를 설치합니다.
RUN apt-get update \
    && apt-get install -y nginx

# 기본 웹 페이지 파일을 제거합니다.
RUN rm -rf /var/www/html/*

# 현재 디렉터리의 html 폴더에 있는 파일을 컨테이너의 웹 서버 루트 디렉터리로 복사합니다.
COPY ./html /var/www/html

# 컨테이너가 수신할 포트를 지정합니다.
EXPOSE 80

# Nginx를 포그라운드 모드로 실행하여 컨테이너가 종료되지 않도록 합니다.
CMD ["nginx", "-g", "daemon off;"]

주요 명령어 설명

FROM

#FROM 명령어는 베이스 이미지를 지정합니다. 베이스 이미지는 새로운 이미지를 빌드할 때 시작점이 되는 이미지입니다.

FROM ubuntu:20.04

RUN

#RUN 명령어는 지정된 명령을 실행하고, 그 결과를 새로운 이미지 레이어로 커밋합니다. 주로 소프트웨어 설치나 환경 설정에 사용됩니다.

RUN apt-get update \
    && apt-get install -y nginx

COPY

#COPY 명령어는 호스트 머신의 파일이나 디렉토리를 이미지 내의 지정된 경로로 복사합니다.

COPY ./html /var/www/html

EXPOSE

#EXPOSE 명령어는 컨테이너가 지정된 포트를 수신할 수 있음을 나타냅니다. 이 명령어는 문서화 목적이며, 실제로 포트를 열지는 않습니다.

EXPOSE 80

CMD

#CMD 명령어는 컨테이너가 시작될 때 실행할 기본 명령을 지정합니다. CMD는 Dockerfile의 마지막에 위치하며, 컨테이너가 실행될 때마다 호출됩니다.

CMD ["nginx", "-g", "daemon off;"]

 

 

 

기타 명령어

ENV

#ENV 명령어는 환경 변수를 설정합니다. 여러 명령어에 걸쳐 사용할 수 있으며, 값은 $로 참조합니다.

ENV ENV_VAR_NAME=value

ADD

#ADD 명령어는 COPY와 유사하지만, URL을 통해 파일을 다운로드하거나 tar 파일을 자동으로 추출할 수 있습니다.

ADD file.tar.gz /path/to/extract/

ENTRYPOINT

#ENTRYPOINT 명령어는 컨테이너 실행 시 기본적으로 실행할 명령을 지정합니다. CMD와 함께 사용되어 추가 인자를 제공할 수 있습니다.

ENTRYPOINT ["executable", "param1", "param2"]

VOLUME

#VOLUME 명령어는 컨테이너 내의 특정 디렉터리를 호스트 파일 시스템이나 다른 컨테이너와 공유할 수 있는 볼륨으로 지정합니다.

VOLUME ["/data"]

USER

#USER 명령어는 컨테이너 내에서 명령어를 실행할 사용자를 지정합니다. 보안상의 이유로 루트가 아닌 다른 사용자를 지정하는 것이 좋습니다.

USER nonrootuser

WORKDIR

#WORKDIR 명령어는 이후의 명령어가 실행될 작업 디렉터리를 설정합니다.

WORKDIR /app

ARG

#ARG 명령어는 빌드 시점에 사용할 수 있는 변수를 정의합니다. docker build 명령어를 실행할 때 --build-arg 옵션을 사용하여 값을 전달할 수 있습니다.

ARG BUILD_VAR=value

 

 

 

 

이제 예제를 실제 실습에 사용해 보도록 하겠습니다.

 

순서는 아래와 같습니다.

    A[Dockerfile 작성] --> B[Docker 이미지 빌드]
    B --> C[Docker 컨테이너 실행]
    C --> D[컨테이너 확인 및 테스트]
    D --> E[컨테이너 관리 및 종료]

 

 

  • Dockerfile 작성: 필요한 설정과 명령어를 포함한 Dockerfile을 작성합니다.

    FROM ubuntu:20.04
    RUN apt-get update \
        && apt-get install -y nginx
    RUN rm -rf /var/www/html/*
    COPY ./html /var/www/html
    EXPOSE 80
    CMD ["nginx", "-g", "daemon off;"]




  • Docker 이미지 빌드: Dockerfile을 기반으로 이미지를 생성합니다.

    docker build -t my-nginx-image .


  • Docker 컨테이너 실행: 생성된 이미지를 기반으로 컨테이너를 실행합니다.

    docker run -d -p 80:80 --name my-nginx-container my-nginx-image

  • 컨테이너 확인 및 테스트: 컨테이너가 정상적으로 실행되는지 확인하고 테스트합니다.

    docker ps



  • 컨테이너 관리 및 종료: 필요에 따라 컨테이너를 중지하거나 삭제합니다.

    docker stop my-nginx-container
    docker rm my-nginx-container

 

 

 

 

 

 

 

 

 

 

 

관련글 더보기