# COPY 호스트 컴퓨터 복사할 파일 경로 컨테이너의 파일 위치시킬 경로 : 호스트 컴퓨터의 파일을 컨테이너로 복사
ex)
COPY app.txt /app.txt
1. 파일 복사해보기
1) app.txt 파일 생성
- docker-practice/app.txt
Hello World!
2) Dockerfile 만들어서 이미지 생성 및 컨테이너 실행
- docker-practice/Dockerfile
FROM ubuntu
COPY app.txt /app.txt
# 디버깅용 코드
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
- Windows PowerShell
PS C:\Users\admin> cd docker-practice
PS C:\Users\admin\docker-practice> docker build -t my-server .
[+] Building 3.3s (8/8) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 142B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 2.4s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build context 0.1s
=> => transferring context: 46B 0.0s
=> [1/2] FROM docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64 0.1s
=> => resolve docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64 0.1s
=> [2/2] COPY app.txt /app.txt 0.1s
=> exporting to image 0.4s
=> => exporting layers 0.2s
=> => exporting manifest sha256:3e1caf9a1cd625f40b42c71ce6f616d80819ebe06da58c96a10c58e53e41d447 0.0s
=> => exporting config sha256:3f252a62ecb273c6bc808e911a47774a4572363c1f6e44c97886c45f8175071a 0.0s
=> => exporting attestation manifest sha256:e9860c5fc1934f646e6d0d7b429add5ab3a492561aba14ebdf62c15ba6ad471f 0.1s
=> => exporting manifest list sha256:0fb575e7befdc7255cfb0151202a746ef12ad9783d8631e1b36d96e05c3c9313 0.0s
=> => naming to docker.io/library/my-server:latest 0.0s
=> => unpacking to docker.io/library/my-server:latest 0.0s
1 warning found (use docker --debug to expand):
- JSONArgsRecommended: JSON arguments recommended for ENTRYPOINT to prevent unintended behavior related to OS signals (line 5)
View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/r8vgzznp4qf434p7rq5asn5vk
PS C:\Users\admin\docker-practice> docker image ls
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
my-jdk17-server:beta 18e650b59b52 682MB 212MB U
my-jdk17-server:latest 09a2803e5d8e 682MB 212MB U
my-node-server:latest 9a1e49574c81 1.77GB 442MB U
my-server:latest 0fb575e7befd 157MB 41.6MB
PS C:\Users\admin\docker-practice> docker run -d my-server
31999664db9885866828ecd0498b8497c078bbd3e45b242d394fc23b180d288c
PS C:\Users\admin\docker-practice> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
PS C:\Users\admin\docker-practice> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31999664db98 my-server "/bin/sh -c '[\"/bin/…" About a minute ago Exited (127) About a minute ago ecstatic_kowalevski
10b3825e00f9 my-node-server "/bin/bash -c 'sleep…" 25 hours ago Exited (0) 25 hours ago pensive_ride
e8f1ab86997c my-jdk17-server "/bin/bash -c 'sleep…" 25 hours ago Exited (0) 25 hours ago tender_ride
969242a1b3f9 0879f7908658 "/__cacert_entrypoin…" 25 hours ago Exited (0) 25 hours ago distracted_williamson
PS C:\Users\admin\docker-practice> docker log 3199
docker: unknown command: docker log
Run 'docker --help' for more information
PS C:\Users\admin\docker-practice> docker logs 3199
/bin/sh: 1: [/bin/bash,: not found
What's next:
View and search logs for all containers in one place
with Docker Desktop's Logs view. docker-desktop://dashboard/logs
Dockerfile 에서 ENTRYPOINT 명령어 옆에 주석 때문에 오류 발생. 주석을 위로 옮기고 다시 실행한다.
Dockerfile 수정후 다시 이미지 생성
- Windows PowerShell
PS C:\Users\admin\docker-practice> docker build -t my-server .
[+] Building 1.6s (8/8) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 143B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 1.1s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 28B 0.0s
=> [1/2] FROM docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64 0.1s
=> => resolve docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64 0.0s
=> CACHED [2/2] COPY app.txt /app.txt 0.0s
=> exporting to image 0.2s
=> => exporting layers 0.0s
=> => exporting manifest sha256:c8568180e7f0bc903cd888300827ccd82d4916d1a32283b6095c393b78cc9fdf 0.0s
=> => exporting config sha256:5f61d9f353f54f29ff87e13f33337c29fe0441780626826bb9f510532afa76f8 0.0s
=> => exporting attestation manifest sha256:d3516363fa1f1f31f8156ffad5f79372dd1c3ec709164c4108d8915bce7cc4cb 0.1s
=> => exporting manifest list sha256:4101a7a371fb480023b429d30ca7487019f6b80eb4ce672da719b16a82755c55 0.0s
=> => naming to docker.io/library/my-server:latest 0.0s
=> => unpacking to docker.io/library/my-server:latest 0.0s
View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/c1pbusd8akelve7gqve5217gx
PS C:\Users\admin\docker-practice> docker image ls
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
my-jdk17-server:beta 18e650b59b52 682MB 212MB U
my-jdk17-server:latest 09a2803e5d8e 682MB 212MB U
my-node-server:latest 9a1e49574c81 1.77GB 442MB U
my-server:latest 4101a7a371fb 157MB 41.6MB
PS C:\Users\admin\docker-practice> docker run -d my-server
2dd7b4ef21ffe417dd5195ce29a265469da123124bc4d107e9b8d0aede22c459
PS C:\Users\admin\docker-practice> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2dd7b4ef21ff my-server "/bin/bash -c 'sleep…" 4 seconds ago Up 4 seconds hungry_wilbur
PS C:\Users\admin\docker-practice> docker exec -it 2dd7 bash
root@2dd7b4ef21ff:/# ls
app.txt bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@2dd7b4ef21ff:/# cat app.txt
Hello World!
root@2dd7b4ef21ff:/# exit
exit
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 2dd7
Learn more at https://docs.docker.com/go/debug-cli/
컨테이너 경로에서 복사된 app.txt 파일을 확인할 수 있다.
2. 폴더 안에 있는 모든 파일들 복사
1) my-app 디렉토리 만들어 안에 파일들 생성
- docker-practice/my-app/config.txt
Config File
2) Dockerfile 만들어서 이미지 생성 및 컨테이너 실행
- docker-practice/Dockerfile
FROM ubuntu
# COPY app.txt /app.txt
COPY my-app /my-app/
# 디버깅용 코드
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
- Windows PowerShell
PS C:\Users\admin\docker-practice> docker build -t my-server .
[+] Building 1.8s (8/8) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 169B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 1.1s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 85B 0.0s
=> CACHED [1/2] FROM docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64 0.1s
=> => resolve docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64 0.0s
=> [2/2] COPY my-app /my-app/ 0.1s
=> exporting to image 0.4s
=> => exporting layers 0.1s
=> => exporting manifest sha256:61b445d30b9f400538012a83aecaed504b34f3dda17f104589963c05d427d50d 0.0s
=> => exporting config sha256:4d6332442fa0fca8be6d1de1d7481db5d9ac5a2e55bb956c48b5095d504deb0e 0.0s
=> => exporting attestation manifest sha256:32265a00e1980ce7a0b5423921a849237589588c8cccafbbe6b9937d0cbf1fc8 0.1s
=> => exporting manifest list sha256:933b003d0fe16f9bceb477bf2dd4ac0f9759dd2f09e5a63224fc9948f68b86b2 0.0s
=> => naming to docker.io/library/my-server:latest 0.0s
=> => unpacking to docker.io/library/my-server:latest 0.0s
View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/blgg4oqxz7jjrvgq1dheyx9z7
PS C:\Users\admin\docker-practice> docker run -d my-server
650d3587c6647d543939bbd61e415a605bef3d736b183172cdc8cf1f649b503a
PS C:\Users\admin\docker-practice> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
650d3587c664 my-server "/bin/bash -c 'sleep…" 3 seconds ago Up 2 seconds musing_gould
2dd7b4ef21ff 4101a7a371fb "/bin/bash -c 'sleep…" 7 minutes ago Up 7 minutes hungry_wilbur
PS C:\Users\admin\docker-practice> docker exec -it 650d bash
root@650d3587c664:/# ls
bin boot dev etc home lib lib64 media mnt my-app opt proc root run sbin srv sys tmp usr var
root@650d3587c664:/# pwd
/
root@650d3587c664:/# cd my-app
root@650d3587c664:/my-app# ls
config.txt
root@650d3587c664:/my-app# cat config.txt
Config File
root@650d3587c664:/my-app# exit
exit
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 650d
Learn more at https://docs.docker.com/go/debug-cli/
컨테이너 경로에서 복사된 디렉토리와 그 안에 모든 파일을 확인할 수 있다.
3. 와일드 카드 사용해보기
1) text.txt, readme.txt 파일 2개 생성
- docker-practice/text.txt
My Text
- docker-practice/readme.txt
My Readme
2) Dockerfile 만들어서 이미지 생성 및 컨테이너 실행
- docker-practice/Dockerfile
FROM ubuntu
# COPY app.txt /app.txt
# COPY my-app /my-app/
COPY *.txt /text-files/
# 디버깅용 코드
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
* 주의
/text-files 로 적으면 안된다.
/text-files/ 로 적어야 파일들이 정상적으로 복사된다.
- Windows PowerShell
PS C:\Users\admin\docker-practice> docker build -t my-server .
[+] Building 1.8s (8/8) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 196B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 1.1s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 138B 0.0s
=> CACHED [1/2] FROM docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64 0.1s
=> => resolve docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64 0.0s
=> [2/2] COPY *.txt /text-files/ 0.1s
=> exporting to image 0.4s
=> => exporting layers 0.1s
=> => exporting manifest sha256:5c22dac111773fb8ab96a414dd9b08ee4c0e4d715746949cb56be69990c31531 0.0s
=> => exporting config sha256:dea675846c702ddf36aaa930f1a34b34d7e53224e41224d5eb4e92f5011c9fe4 0.0s
=> => exporting attestation manifest sha256:fc5b603ece7897ca407b4f4eb4a325387734c11627f5c8d281537ed901f9e479 0.1s
=> => exporting manifest list sha256:e059a44f47e82d5ddc504d7f2b3c648b81f78f01163a680f315fb11e33e4f4b0 0.0s
=> => naming to docker.io/library/my-server:latest 0.0s
=> => unpacking to docker.io/library/my-server:latest 0.0s
View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/fksbjj2n7e76p6i18mz3vgfw6
PS C:\Users\admin\docker-practice> docker image ls
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
my-jdk17-server:beta 18e650b59b52 682MB 212MB U
my-jdk17-server:latest 09a2803e5d8e 682MB 212MB U
my-node-server:latest 9a1e49574c81 1.77GB 442MB U
my-server:latest e059a44f47e8 157MB 41.6MB
PS C:\Users\admin\docker-practice> docker run -d my-server
57afae02d51fe4c4316a8b81098098ec8c8ddd4cd208b7e3c41ba5cfa2ebbfcf
PS C:\Users\admin\docker-practice> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57afae02d51f my-server "/bin/bash -c 'sleep…" 33 seconds ago Up 32 seconds reverent_black
PS C:\Users\admin\docker-practice> docker exec -it 57af bash
root@57afae02d51f:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys text-files tmp usr var
root@57afae02d51f:/# pwd
/
root@57afae02d51f:/# cd text-files
root@57afae02d51f:/text-files# ls
app.txt readme.txt text.txt
root@57afae02d51f:/text-files# exit
exit
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 57af
Learn more at https://docs.docker.com/go/debug-cli/
컨테이너 경로에서 text-files 디렉토리와 그 안에 복사된 .txt 파일들을 확인할 수 있다.
4. .dockerignore 사용해보기
# .dockerignore : COPY 하고 싶지 않은 폴더 또는 파일 목록
특정 파일 또는 폴더만 COPY 하고 싶지 않을 때, .dockerignore 사용
1) .dockerignore 파일 생성
- docker-practice/.dockerignore
readme.txt
2) Dockerfile 만들어서 이미지 생성 및 컨테이너 실행
- docker-practice/Dockerfile
FROM ubuntu
# COPY app.txt /app.txt
# COPY my-app /my-app/
# COPY *.txt /text-files/
COPY ./ /
# 디버깅용 코드
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
- Windows PowerShell
PS C:\Users\admin\docker-practice> docker build -t my-server .
[+] Building 1.9s (8/8) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 209B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 1.1s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 50B 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 397B 0.0s
=> CACHED [1/2] FROM docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64 0.1s
=> => resolve docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64 0.0s
=> [2/2] COPY ./ / 0.1s
=> exporting to image 0.4s
=> => exporting layers 0.1s
=> => exporting manifest sha256:b5b0083c76d54e81ed9fa538ddfbfe286aab74a74f78c40b942872a20ea26278 0.0s
=> => exporting config sha256:97ebcfead74f95b826185b80434c52337d6c999316e375d4a700a48366d7d7e7 0.0s
=> => exporting attestation manifest sha256:1d324e48704da9bb3f9f039723135504db08bbeb5b908404407afb96b766f316 0.1s
=> => exporting manifest list sha256:fd6d8c6125194fb1bf3e5eac55294dfda5f077d779b678ac38e436584c50d23f 0.0s
=> => naming to docker.io/library/my-server:latest 0.0s
=> => unpacking to docker.io/library/my-server:latest 0.0s
View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/keidq72xd511y1um1jmkzlwkv
PS C:\Users\admin\docker-practice> docker image ls
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
my-jdk17-server:beta 18e650b59b52 682MB 212MB U
my-jdk17-server:latest 09a2803e5d8e 682MB 212MB U
my-node-server:latest 9a1e49574c81 1.77GB 442MB U
my-server:latest fd6d8c612519 157MB 41.6MB
PS C:\Users\admin\docker-practice> docker run -d my-server
5fdb28e21acfa8f4d6252ba46f05efaece4385e057db7d6e8ce2f6526e88557b
PS C:\Users\admin\docker-practice> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5fdb28e21acf my-server "/bin/bash -c 'sleep…" 6 seconds ago Up 5 seconds frosty_wing
57afae02d51f e059a44f47e8 "/bin/bash -c 'sleep…" 7 minutes ago Up 7 minutes reverent_black
PS C:\Users\admin\docker-practice> docker exec -it 5fdb bash
root@5fdb28e21acf:/# ls
Dockerfile app.txt bin boot dev etc home lib lib64 media mnt my-app opt proc root run sbin srv sys text.txt tmp usr var
root@5fdb28e21acf:/# exit
exit
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 5fdb
Learn more at https://docs.docker.com/go/debug-cli/
컨테이너 경로에서 readme.txt 파일이 복사되지 않은 것을 확인할 수 있다.
참고링크 : https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-docker-%EC%9E%85%EB%AC%B8-%EC%8B%A4%EC%A0%84?cid=334085
비전공자도 이해할 수 있는 Docker 입문/실전| JSCODE 박재성 - 인프런 강의
현재 평점 4.9점 수강생 14,468명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를
www.inflearn.com
'강의 실습 > 비전공자도 이해할 수 있는 Docker 입문 실전' 카테고리의 다른 글
| [실습] 백엔드 프로젝트(Spring Boot) 프로젝트를 Docker로 실행시키기 (0) | 2026.05.15 |
|---|---|
| ENTRYPOINT : 컨테이너가 시작할 때 실행되는 명령어 (0) | 2026.05.15 |
| 종료된 컨테이너에 들어가서 디버깅하고 싶을 때 (0) | 2026.05.13 |
| [실습] FROM : 베이스 이미지 생성 (0) | 2026.05.13 |
| FROM : 베이스 이미지 생성 (0) | 2026.05.12 |
댓글