본문 바로가기
강의 실습/비전공자도 이해할 수 있는 Docker 입문 실전

COPY 파일 복사(이동)

by jint 2026. 5. 14.

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

댓글