본문 바로가기
docker & kubernetes

컨테이너 사용법 1 | Docker&Kubernetes 학습 24

by 그갸거겨 2024. 11. 27.
728x90
반응형
컨테이너와 호스트 간의 파일 복사 방법에 대해 알아보자.

파일 복사

  • 컨테이너 동작에는, 프로그래밍 언어의 런타임이나 웹 서버, DB 등이 함께 시스템을 구성한다.
  • 시스템 동작에 필요한 것 외에도, 화면을 구성하는 이미지, HTML 파일, CSS파일, 이미지나 텍스트 파일 등이 있다.
  • 이러한 파일들은 컨테이너에 저장된다.
  • 때론 SW의 개입없이, 컨테이너와 로컬 컴퓨터 간에 파일을 주고 받기도 한다.
  • 파일 복사는 컨테이너 → 호스트, 호스트 → 컨테이너로 양방향 복사가 모두 가능하다.
    • 호스트: 도커 엔진을 실행하는 PC

파일 복사 명령어: docker cp(= docker container cp)

  • Windows나 macOS에서는 드래그 앤 드롭으로 파일을 복사했으나, 도커에서는 명령어로 복사한다.
  • 호스트 → 컨테이너 파일 복사 명령어: docker cp 호스트_경로 컨테이너_이름:컨테이너_경로
  • 컨테이너 → 호스트 파일 복사 명령어: docker cp 컨테이너_이름:컨테이너_경로 호스트_경로
  • cp 명령어 뒤에 '원본_경로' '복사할_경로' 순서로 기재한다.( docker cp 원본_경로 복사할_경로 )

호스트 경로의 예

  • 호스트 내 파일 위치는 어디라도 상관없고, 파일의 위치는 '경로' 형태로 작성한다.
  • 경로: 컴퓨터 속 파일이나 폴더(디렉토리)의 주소
항목 값(예시)
문서 폴더(Windows) C:\User\사용자명\Documents\파일명
문서 폴더(macOS) /User/사용자명/Documents/파일명
리눅스의 홈 디렉터리 /home/사용자명/파일명
이제 컨테이너와 호스트 간의 파일 복사를 직접 해보자.

[사전준비] index.html 파일 생성

  • 메모장 등 텍스트 에디터를 사용해, index.html 파일을 생성하자.( 리눅스에서는 nano 에디터 이용)
  • 아래의 샘플을 이용해 원하는 내용을 입력하고, 인코딩이 UTF-8인지 확인하자.
  • index.html을 복사할 파일로 사용할 예정이다.
  • index.html 파일에 작성할 내용 샘플
    • <html>
    • <meta charset="utf-8"/>
    • <body>
    • <div>안녕하세요. charmer입니다.</div>
    • </body>
    • </html>
호스트 → 컨테이너 파일 복사를 해보자

실습 내용

생성할 컨테이너 정보

항목
컨테이너 이름 apa00ex19
이미지 이름 httpd
포트 설정 8089:80

명령어에 사용할 옵션, 대상, 인자

  • 파일 복사 명령어: docker cp 원본_경로 복사대상_컨테이너_이름:컨테이너_경로
  • 아래 표의 경로대로 index.html파일을 저장하거나, 본인이 원하는 경로에 저장 후 그 경로를 입력하면 된다.
항목
윈도우 원본 경로 C:\Users\사용자명\Documents\index.html
macOS 원본 경로 /Users/사용자명/Documents/index.html
리눅스 원본 경로 /home/사용자명/index.html
컨테이너 경로 /usr/local/apache2/htdocs

0. 아파치 컨테이너 생성

  • 실습에는 아파치를 사용하는데, 아파치나 사용된 옵션에 대해 궁금하다면 이전 글들을 참고하길 추천!
  • 터미널 창에 입력할 명령어: docker run --name apa00ex19 -d -p 8089:80 httpd

1. 웹 브라우저를 통해, 아파치에 접근하여 초기화면 확인

  • 웹 브라우저에서 localhost:8089:80에 접근해, 아파치 초기 화면을 확인한다.

2. cp 명령어를 실행해, 호스트 → 컨테이너 파일 복사

  • cp 명령어 사용해 호스트에서 컨테이너로 index.html 파일을 복사한다.
  • 터미널 창에 입력할 명령어( 경로는 복사에 사용할 파일의 경로에 맞게 수정 )
    • Windows: docker cp C:\Users\82103\Downloads\index.html apa00ex19:/usr/local/apache2/htdocs/
    • macOS: docker cp /Users/사용자명/Documents/index.html apa00ex19:/usr/local/apache2/htdocs/
    • linux: docker cp /home/사용자명/index.html apa00ex19:/usr/local/apache2/htdocs/

3. 아파치의 초기 화면이 index.html 파일의 내용으로 바뀐 것을 확인

4. 뒷정리

  • 이젠 반대로, 컨테이너에서 호스트로 파일을 복사하는 연습을 하기 위해, 컨테이너 삭제는 하지 않는다.
컨테이너 → 호스트 파일 복사를 해보자

실습 내용

생성할 컨테이너 정보

  • 앞서 사용한 apa00ex19 컨테이너를 그대로 사용한다.

명령어에서 사용할 옵션, 대상, 인자

  • 호스트의 복사 대상 폴더는 앞선 연습과 동일하게 문서 폴더로 하거나, 본인이 지정한 폴더 그대로 한다.
  • 터미널 창에 입력할 명령어
    • Windows: docker cp apa00ex19:/usr/local/apache2/htdocs/index.html C:\Users\82103\Downloads\
    • macOS: docker cp apa00ex19:/usr/local/apache2/htdocs/index.html /Users/사용자명/Documents/
    • linux: docker cp apa00ex19:/usr/local/apache2/htdocs/index.html /home/사용자명/

0. 아파치 컨테이너 생성

  • 앞서 만든 apa00ex19 컨테이너를 그대로 사용하고, 삭제했다면 다시 생성한다.

1. cp 명령어를 실행해, 컨테이너 → 호스트 파일 복사

  • cp 명령어 사용해 컨테이너에서 호스트로 index.html 파일을 복사한다.
  • 터미널 창에 입력할 명령어( 경로는 복사에 사용할 파일의 경로에 맞게 수정 )
    • Windows: docker cp apa00ex19:/usr/local/apache2/htdocs/index.html C:\Users\82103\Downloads\ 
    • macOS: docker cp apa00ex19:/usr/local/apache2/htdocs/index.html /Users/사용자명/Documents/
    • linux: docker cp apa00ex19:/usr/local/apache2/htdocs/index.html /home/사용자명/

2. 호스트에서 index.html 파일이 잘 복사됐는지 확인

3. 뒷정리

  • 컨테이너 종료: docker container stop apa00ex19
  • 컨테이너 삭제: docker container rm apa00ex19
  • 컨테이너 삭제 여부 확인: docker container ps -a
728x90