1 minute read

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 내용 및 빌드

Alt text

Alt text

Alt text

Alt text

Alt text

Alt text

Alt text

Alt text


🧠 COPY vs RUN 차이점

항목 COPY RUN
목적 호스트에서 파일을 이미지에 복사 명령어 실행 결과를 이미지에 반영
사용 시점 정적인 파일 전달 패키지 설치, 디렉토리 생성, 파일 조작 등 동작 처리
예시 COPY hello.txt /workspace/ RUN cp hello.txt /work2/

📌 핵심 Dockerfile 명령어 요약

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

📚 추가 개념 정리

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

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

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

🏁 마무리

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