[Docker] 컨테이너와 호스트 파일 주고받기 (Mounting)

hyun·2022년 9월 26일
0

Docker

목록 보기
2/2

도커의 -v 옵션을 통해 호스트 컴퓨터의 디렉토리와 컨테이너의 디렉토리를 매핑할 수 있다.

📚 컨테이너 -> 호스트

간단하게 파일을 입력하는 파이썬 코드를 짜봤다.

# write.py
with open("./text/text.txt", 'w') as f:
    f.write("hi")

도커파일은 다음과 같이 써주자.
파일 디렉토리를 봐야 하므로 ubuntu 이미지 위에서 돌려준다.

from ubuntu:latest

# /app 디렉토리로 복사
COPY . /app 

RUN apt update -y &&\
# 파이썬 설치
apt install python3 -y

# working directory app으로 변경
WORKDIR /app

# 명령어 실행
CMD ["python3", "write.py"]

그 후 docker build -t write .을 통해 이미지화 해주고,
docker run -v ~/docker_write:/app/text write
명령어를 통해 컨테이너를 만들어주자.
이 때 -v 옵션에 의해 내 컴퓨터의 ~/docker_write 폴더와 컨테이너의 /app/text 폴더가 연결된다 ! (이때 docker_write가 빈 디렉토리가 되도록 해주자. 그래야 파일 생성 여부 확인 가능)

그러면 컨테이너가 바로 꺼질 텐데, docker_write에 들어가보면

text.txt가 잘 생성되어 있는 것을 볼 수 있다.

그러면 이제 DB서버를 컨테이너에 띄우고 내 컴퓨터에도 로그나 백업을 남길 수 있겠다!

📚 호스트 -> 컨테이너

반대로 내 컴퓨터에서 컨테이너로 파일을 보내고 싶다면?
똑같이 연동된 디렉토리에 호스트에서 파일을 쓰면 된다.

파이썬 코드를 약간 수정해서, 파일이 계속 돌아가면서 text 디렉토리의 파일들을 출력하게 해보자.

import os
import time

while(True):
	# test 폴더의 파일들 출력
    print(os.system('ls ./text -al'))
    # 5초 주기로 출력
    time.sleep(5)

그러면 아래처럼 5초마다 주기적으로 ls 명령어가 실행되어 text폴더 아래 파일들을 보여준다.

(혹시 이미 존재하는 컨테이너를 start로 켰다면 docker attach [컨테이너 이름] 를 통해 컨테이너의 쉘에 접근할 수 있다.)

그럼 빈 파일 1.txt, 2.txt를 docker_write 경로에 써보자.

역시 바로 적용되서 파일이 올라갔다.

이렇게 호스트와 컨테이너 간 디렉토리 연동을 통해 서로 파일을 공유할 수 있다.

0개의 댓글