inblog logo
|
Gyeongwon's blog
    doker

    [도커 #6] 도커 COPY 및 도커파일 주요 명령어

    COPY 개념과 Dokerfile의 주요 명령어들을 정리 하였습니다.
    도경원's avatar
    도경원
    Jul 30, 2025
    [도커 #6] 도커 COPY 및 도커파일 주요 명령어
    Contents
    1. COPY란 ? 2. Docker 이미지 빌드 명령어3. Dockerfile 주요 명령어 10가지4. Docker file 실전 예시
    COPY 는 주로 Dockerfile에서 사용되는 명령어고, 이미지 안에 정적인 파일을 포함시킬 때 사용한다.

    1. COPY란 ?

    Dockerfile에서 호스트의 파일/디렉토리를 컨테이너 이미지 안에 복사하는 명령어
    COPY [소스 경로] [컨테이너 내 대상 경로]

    예시

    COPY ./htdocs /usr/local/apache2/htdocs/
    → .htdocs파일을 컨테이너 이미지 안의 /usr/share/nginx/html/ 등으로 복사한다는 뜻이다.

    Dockerfile에서의 예시

    FROM nginx COPY ./html /usr/share/nginx/html COPY ./conf.d /etc/nginx/conf.d CMD ["nginx", "-g", "daemon off;"]
    nginx 기반 이미지에:
    • html 폴더를 웹 루트에 넣고
    • conf.d에 설정 파일 덮어씌운 다음
    • nginx를 포그라운드로 실행하는 이미지 빌드
    ❗
    COPY ./html ... → 정적 웹 콘텐츠를 이미지에 정적으로 포함
    COPY ./conf.d ... → Nginx 설정을 이미지 빌드 실점에 고정
    즉, 빌드 후에는 변경 불가. 변경하려면 다시 docker build 해야 함

    2. Docker 이미지 빌드 명령어

    docker build [옵션] -t 이미지이름[:태그] 경로

    예시

    docker build -t my-nginx:1.0 .
    현재 디렉토리의 Dockerfile을 기반으로 my-nginx:1.0이라는 이름의 이미지를 생성
    notion image

    3. Dockerfile 주요 명령어 10가지

    명령어
    설명
    실행 시점
    캐시 영향
    FROM
    베이스 이미지 지정
    빌드 시작
    ✅
    RUN
    쉘 명령 실행 (설치, 빌드 등)
    이미지 생성 시
    ✅
    CMD
    컨테이너 실행 시 실행할 명령
    컨테이너 실행
    ❌
    COPY
    호스트 파일 복사
    이미지 생성 시
    ✅
    ADD
    COPY와 유사하나 기능 추가됨
    이미지 생성 시
    ✅
    ENV
    환경 변수 설정
    이미지 생성 시
    ✅
    EXPOSE
    열 포트 명시 (기능적 의미는 없음)
    문서화
    ❌
    WORKDIR
    작업 디렉토리 설정
    이미지 생성 시
    ✅
    ENTRYPOINT
    컨테이너 시작 시 실행될 기본 명령 지정
    컨테이너 실행
    ❌
    VOLUME
    데이터 저장소 디렉토리 명시
    문서화 + 생성됨
    ❌

    1️⃣ FROM

    FROM ubuntu:20.04
    • 베이스 이미지 지정 (가장 먼저 와야 함)
    • 여러 단계 빌드 시 FROM을 여러 번 쓸 수 있음

    2️⃣ RUN

    RUN apt update && apt install -y curl
    • 셸 명령어 실행
    • 도커 빌드(이미지 굽는 것) 할 때 실행
    • 이미지 내부에 변경사항을 적용한 새 레이어 생성

    3️⃣ CMD

    CMD ["node", "app.js"
    • 컨테이너 실행 시(이미지 다 구운 후) 기본 명령어
    • docker run 시 명령어를 지정하면 CMD는 무시됨
    • 자주 ENTRYPOINT와 함께 쓰임

    4️⃣ COPY

    COPY ./src /app/sr
    • 호스트의 파일/디렉토리를 컨테이너 이미지로 정적으로 복사
    • 정적 배포용 빌드에 적합
    • copy는 zip 파일 던져주면 압축도 풀어줌

    5️⃣ ADD

    ADD archive.tar.gz /app/
    • COPY + 압축 해제, URL 다운로드 기능
    • 기능은 많지만 예측 불가 → 실무에서는 대부분 COPY 사용

    6️⃣ ENV

    ENV NODE_ENV=production
    • 환경 변수 설정
    • 환경변수는프로그램 실행 전에 외부에서 주입할 수 있는 설정값이고, 코드 수정 없이 동작을 제어할 수 있는 유연하고 안전한 방법이다.
    • RUN, CMD, ENTRYPOINT 등 다른 명령에서도 사용 가능

    7️⃣ EXPOSE

    EXPOSE 80
    • 컨테이너가 사용하는 포트를 명시
    • 실제로 포트가 열리는 건 아님 (힌트 느낌)→ p 옵션 필요
    • 문서화 역할 (팀원/도구를 위한)

    8️⃣ WORKDIR

    WORKDIR /app
    • 이후 명령어의 작업 디렉토리 설정
    • 디렉토리가 없으면 자동 생성됨
    • cd 명령 쓸 필요 없어짐
    • 컨테이너 내부안에 어느 폴더에서 시작하는지..

    9️⃣ ENTRYPOINT

    ENTRYPOINT ["python", "script.py"]
    • 컨테이너가 시작될 때 무조건 실행되는 명령어
    • CMD와는 다르게 docker run 인자와 합쳐져 실행됨, CMD는 오버라이드 되서 덮어씌워질 수 도 있음
    • 고정된 실행 명령을 설정할 때 사용

    🔟 VOLUME

    VOLUME ["/data"]
    • 데이터가 저장될 영속적 경로를 명시
    • 실제 마운트는 docker run -v로 해야 함
    • 도커가 볼륨 자동 생성해줄 수 있음

    4. Docker file 실전 예시

    정적 웹사이트 배포용 Dockerfile (with Nginx)

    # 베이스로 nginx 사용 FROM nginx:stable-alpine # 정적 HTML 파일 복사 COPY ./html /usr/share/nginx/html # Nginx 커스텀 설정 덮어쓰기 COPY ./nginx.conf /etc/nginx/nginx.conf EXPOSE 80 # Nginx 실행 (포그라운드로) CMD ["nginx", "-g", "daemon off;"]
    💬
    COPY로 HTML과 설정 파일을 이미지에 고정
    정적 사이트 배포 시 완전 정석
    CMD로 nginx 포그라운드 실행 설정
    ❗
    html, nginx.conf의 위치가 잘못되면 nginx 404 발생
    실시간 수정은 안 됨 → 개발엔 bind mount 권장

    Spring Boot JAR 실행용 Dockerfile

    FROM eclipse-temurin:17-jdk-alpine WORKDIR /app COPY ./build/libs/myapp.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
    💬
    Spring Boot는 보통 .jar 파일 하나로 빌드됨
    이 Dockerfile은 JAR 파일을 직접 실행하는 방식
    ENTRYPOINT를 써서 외부 인자 추가 실행 가능
    ❗
    COPY할 JAR 파일 경로 정확히 확인
    JAR 빌드가 안 돼 있으면 Docker build 시 실패
     
    Share article
    Contents
    1. COPY란 ? 2. Docker 이미지 빌드 명령어3. Dockerfile 주요 명령어 10가지4. Docker file 실전 예시

    Gyeongwon's blog

    RSS·Powered by Inblog