[Docker] Dockerfile 실습

Yeontachi·2025년 5월 3일

Docker 기초 실습

목록 보기
7/8
post-thumbnail

Dockerfile을 사용해 컨테이너 기반 독립 실행 환경 만들기 및 명령어 실습

이번 실습에서는 Dockerfile을 작성하여 컨테이너의 루트 파일 시스템을 구성하고, RUN, COPY, WORKDIR 명령어를 활용하여 독립적인 실행 환경을 만드는 방법을 익혔다. 이를 통해 Docker가 어떻게 격리된 환경을 구축하는지를 직접 체험하였다.


1. Dockerfile 기본 구조

FROM ubuntu
RUN apt -y update && apt -y upgrade
  • FROM: 베이스 이미지 설정 (우분투)
  • RUN: 이미지 빌드 시 실행되는 명령어

2. WORKDIR, COPY, RUN 응용

FROM ubuntu
RUN apt -y update && apt -y upgrade
WORKDIR /workspace
COPY . .
RUN mkdir /work2
RUN cp /workspace/hello.txt /work2/hello.txt
RUN cat /work2/hello.txt

설명

  • WORKDIR /workspace: 이후 모든 작업 디렉토리 기준을 /workspace로 설정
  • COPY . .: 호스트의 현재 디렉토리(.)에 있는 파일을 컨테이너의 작업 디렉토리로 복사
  • RUN mkdir, RUN cp, RUN cat: 실제 파일을 만들고 복사하고 확인하는 명령들

실습 결과 확인

Dockerfile로 빌드된 이미지 실행

docker build . -t myub2
docker run -it myub2 bash

컨테이너 안에서 확인:

cd /work2
ls
# hello.txt

실습 이미지 캡처

Dockerfile 내용 및 빌드

  • Workspace 디렉토리 생성 및 Dockerfile 내용 작성, 현재 dockerfile은 우분투 실행 후 자동으로 업데이트, 업그레이드 명령어를 실행하는 컨테이너 이미지를 생성한다.
  • ' . '은 현재 디렉토리를 빌드 컨텍스트(build context)로 사용한다는 의미이다. 즉, 현재 폴더에 있는 Dockerfile과 곤련 리소스(예: 소스코드, 설정 파일 등)를 사용하여 이미지를 생성한다.
  • docker build 명령어로 myub라는 이미지를 build 한다.
  • 이미지가 생성되었으니, 이미지를 run 한다. 정상적으로 동작하는 것을 확인할 수 있다.
  • Dockerfile을 수정한다.
...
WORKDIR /workspace
COPY . .
  • 위 내용은 컨테이너 내부 작업 디렉토리를 /workspace로 설정하고, 현재 폴더의 모든 파일을 workspace 안으로 복사하겠다는 의미이다.

  • 아래 RUN은 Dockerfile로 빌드될 때 실행될 명령어들이다.

  • build 후 run을 했을 때, 기존에 workspace 디렉토리 안에 있는 모든 파일들이 존재하는 것을 확인할 수 있다.


핵심 Dockerfile 명령어 요약

명령어역할
FROM어떤 이미지를 베이스로 할지 지정
RUN컨테이너 빌드 과정에서 실행할 명령어
COPY호스트의 파일을 이미지에 복사
WORKDIR이후 작업 디렉토리 지정
EXPOSE컨테이너에서 열어줄 포트 지정
CMD, ENTRYPOINT컨테이너 시작 시 실행할 기본 명령 설정

추가 개념 정리

  • EXPOSE: 컨테이너가 열어놓은 포트를 명시하는 선언. 포트 매핑을 통해 외부 접근 가능
  • ENTRYPOINT vs CMD: CMD는 기본 명령, ENTRYPOINT는 고정 실행 진입점
  • 개발 환경 또는 CI/CD 파이프라인에서 컨테이너화된 앱 구축에 필수

독립 실행 환경의 핵심: 격리(Isolation)

  • docker run으로 생성된 컨테이너 내부는 개별적으로 파일, 프로세스, 네트워크 공간이 구분
  • 같은 bash를 사용하더라도 컨테이너는 각기 다른 프로세스로 동작
  • 이는 chroot, namespace, cgroup 등을 기반으로 구현됨

마무리

이 실습을 통해 각 컨테이너가 서로 다른 디렉터리 구조와 파일 값을 가지며, 격리된 실행 환경이라는 것을 체험할 수 있었다.
이제 Dockerfile을 통해 환경을 지능적으로 구성하고, 클래식 프로젝트나 서버 리소스를 개발, 구축할 준비가 되어 있다!


profile
기초를 다지는 중입니다.📚🧑‍💻

0개의 댓글