Part 7. COPY, WORKDIR, CMD 이해하기
Dockerfile을 작성할 수 있게 되었다면 이제 실제 파일을 Docker 이미지 안으로 복사해볼 차례다. 이번 글에서는 COPY, WORKDIR, CMD 명령어를 사용하여 내 컴퓨터의 파일을 Docker 이미지 내부로 복사하고 실행하는 과정을 실습한다.
Part 7. COPY, WORKDIR, CMD 이해하기
1. Part 6에서 한 것
Part 6에서는 Dockerfile을 작성하고 직접 Docker 이미지를 만들었다.
FROM ubuntu
CMD ["echo", "Hello Dockerfile"]
그리고 다음 명령어로 이미지를 만들었다.
docker build -t my-first-image .
실행 결과는 다음과 같았다.
docker run my-first-image
Hello Dockerfile
이 단계에서는 이미지 안에 별도 파일을 넣지 않았다.
컨테이너가 실행될 때 단순히 문장만 출력했다.
2. Part 7에서 할 것
AD
제휴 광고 · 일부 링크는 수수료를 받을 수 있습니다
이번 글에서는 내 컴퓨터에 파일을 만들고, 그 파일을 Docker 이미지 안으로 복사한다.
흐름은 다음과 같다.
1. 로컬 폴더에 app/message.txt 파일 생성
2. Dockerfile에서 COPY로 파일 복사
3. WORKDIR로 작업 폴더 지정
4. CMD로 message.txt 파일 내용 출력
5. docker build로 새 이미지 생성
6. docker run으로 실행 결과 확인
3. 현재 위치 확인
먼저 실습 폴더로 이동되어 있는지 확인한다.
pwd
예상 결과는 다음과 같다.
/mnt/e/4_toy/dockerfile-test
이 경로는 Windows 기준으로 다음 위치와 같다.
E:\4_toy\dockerfile-test
4. app 폴더 만들기
프로젝트 파일을 담을 app 폴더를 만든다.
mkdir app
명령어의 의미는 다음과 같다.
mkdir = 폴더 생성
app = 생성할 폴더 이름
즉 app이라는 폴더를 만든다.
5. message.txt 파일 만들기
app 폴더 안에 message.txt 파일을 만든다.
echo "Hello Docker" > app/message.txt
명령어를 분해하면 다음과 같다.
echo = 문자를 출력하는 명령어
"Hello Docker" = 출력할 문자
> = 출력 결과를 파일로 저장
app/message.txt = 저장할 파일 위치
즉 전체 의미는 다음과 같다.
"Hello Docker"라는 문장을
app 폴더 안의 message.txt 파일에 저장한다.
주의할 점은 > 기호는 기존 파일 내용을 덮어쓴다는 것이다.
내용을 추가하고 싶을 때는 >> 기호를 사용한다.
echo "추가 내용" >> app/message.txt
6. 파일 내용 확인
파일이 제대로 만들어졌는지 확인한다.
cat app/message.txt
cat은 파일 내용을 출력하는 명령어다.
정상이라면 다음 결과가 출력된다.
Hello Docker
7. 현재 폴더 구조 확인
현재 폴더 구조는 다음과 같다.
dockerfile-test
│
├─ Dockerfile
│
└─ app
└─ message.txt
이제 이 app 폴더를 Docker 이미지 안으로 복사할 것이다.
8. Dockerfile 수정
Dockerfile을 연다.
nano Dockerfile
기존 내용을 다음 내용으로 바꾼다.
FROM ubuntu
COPY app /app
WORKDIR /app
CMD ["cat", "message.txt"]
9. COPY 명령어
AD
제휴 광고 · 일부 링크는 수수료를 받을 수 있습니다
케이메이트 - 외국인친구 만들기
COPY app /app
COPY는 로컬 파일이나 폴더를 Docker 이미지 안으로 복사한다.
여기서는 내 컴퓨터의 app 폴더를 이미지 내부의 /app 폴더로 복사한다.
로컬 PC
app/message.txt
↓
Docker 이미지 내부
/app/message.txt
10. WORKDIR 명령어
WORKDIR /app
WORKDIR은 컨테이너 내부의 작업 위치를 지정한다.
Linux에서 cd 명령어로 폴더를 이동하는 것과 비슷하다.
WORKDIR /app 이후 실행되는 명령어는 /app 폴더 기준으로 실행된다.
11. CMD 명령어
CMD ["cat", "message.txt"]
CMD는 컨테이너가 실행될 때 기본으로 실행할 명령어를 지정한다.
cat은 파일 내용을 출력하는 명령어다.
즉 이 CMD의 의미는 다음과 같다.
컨테이너 실행 시
/app/message.txt 파일 내용을 출력한다.
12. 새 이미지 빌드
Dockerfile을 수정했으면 이미지를 다시 만들어야 한다.
docker build -t my-second-image .
명령어의 의미는 다음과 같다.
docker build = Dockerfile을 기준으로 이미지 생성
-t my-second-image = 이미지 이름을 my-second-image로 지정
. = 현재 폴더를 빌드 대상으로 사용
Dockerfile만 수정하고 build를 다시 하지 않으면 이미지에는 변경사항이 반영되지 않는다.
13. 이미지 실행
생성한 이미지를 실행한다.
docker run my-second-image
정상이라면 다음 결과가 출력된다.
Hello Docker
14. 실제로 일어난 일
이번 실습에서 일어난 일은 다음과 같다.
E:\4_toy\dockerfile-test\app\message.txt
↓
docker build
↓
Docker 이미지 내부의 /app/message.txt
↓
docker run
↓
CMD ["cat", "message.txt"] 실행
↓
Hello Docker 출력
15. 중요한 점
COPY는 컨테이너 실행 시점이 아니라 이미지 빌드 시점에 실행된다.
즉 로컬 파일을 수정한 뒤 컨테이너 실행 결과에 반영하려면 이미지를 다시 빌드해야 한다.
로컬 파일 수정
↓
docker build 다시 실행
↓
docker run으로 확인
16. Part 7 정리
AD
제휴 광고 · 일부 링크는 수수료를 받을 수 있습니다
COPY = 로컬 파일을 Docker 이미지 안으로 복사
WORKDIR = 컨테이너 내부 작업 위치 지정
CMD = 컨테이너 실행 시 기본 명령어 지정
> = 명령어 출력 결과를 파일로 저장
cat = 파일 내용 출력
mkdir = 폴더 생성
이번 글에서는 단순히 문장을 출력하는 이미지를 넘어서, 실제 파일을 Docker 이미지 안으로 복사하고 실행하는 흐름을 확인했다.
다음 Part에서는 Docker Compose를 사용해 여러 컨테이너를 하나의 설정 파일로 관리하는 방법을 알아본다.
AD
제휴 광고
일부 링크는 제휴 링크이며, 구매 또는 가입 시 일정 수수료를 받을 수 있습니다.
AD









