도커 컨테이너에 도커 볼륨을 만들어 붙이는 것 외에 파일 공유하는 방법 하나를 더 알아볼게요.
도커 호스트의 디렉터리를 도커 컨테이너의 파일 시스템에 마운팅 하는 방법이에요.
어떻게 하는지 먼저 볼게요.
➜ ~ mkdir shared
➜ ~ cd shared
➜ shared echo "Hello xodwk" > salute.txt
➜ shared docker container run --rm -d -it -v $HOME/shared/:/data/ alpine sh
2f97ed6853277bd71d251dd7d1490cfc04215766b8d5dd7b32924582c27f578c
➜ shared docker exec -it 2f97ed sh
/ # cat /data/salute.txt
Hello xodwk
/ # echo 'Welcome to xodwk world!' >> /data/salute.txt
/ # exit
➜ shared cat salute.txt
Hello xodwk
Welcome to xodwk world!
➜ shared echo 'Salute xodwk!!' > greeting.txt
➜ shared docker exec 2f97ed cat /data/greeting.txt
Salute xodwk!!
먼저 shared라는 폴더를 만들고 cd 명령어로 shared 폴더로 들어가요. 그리고 Hello xodwk라는 내용의 salute.txt 파일을 만들어 줘요.
이제 이 $HOME/shared 폴더를 컨테이너의 /data 폴더에 마운트 시켜서 alpine 이미지로 컨테이너를 하나 만들어요
그리고 컨테이너 안에서 /data/salute.txt의 파일이 있는지 있으면 내용이 잘 보이는지 확인해요. 그리고 Welcome to xodwk world!라는 한 줄을 /data/salute.txt에 추가하고 컨테이너에서 나와요. 그리고 HOST에서 내용이 추가된 걸 확인했어요. 그리고 마지막으로 greeting.txt라는 파일을 만들고 컨테이너 안에서도 확인이 되는지 확인해봤어요.
이렇게 볼륨을 생성해서 컨테이너에 마운트 시키는 방법 외에 HOST의 파일이나 폴더를 바로 컨테이너에 마운트 시키는 방법을 알아봤어요.
또 다른 방법 하나 더 소개할까 해요. 파일 하나만 컨테이너 안을 복사해 넣으면 되는데 볼륨을 붙이거나 공유 폴더를 생성해서 붙여주는 건 조금 귀찮을 수 있어요. 그럴 때는 직접 파일을 컨테이너 안으로 혹은 반대로 컨테이너 안에 있는 파일을 도커 호스트로 복사할 수 있어요.
먼저 도커 호스트 안에 있는 파일을 컨테이너로 복사하는 방법이에요.
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
옵션은 나중에 살펴보고 먼저 파일을 복사하는 방법이에요.
예를 들어 호스트에 xodwkFree.pem이라는 파일이 있어요. 이 파일을 컨테이너 안 /root 디렉터리로 복사하고 싶다면
docker cp /home/xodwk/xodwkFree.pem container_ID:/root
이렇게 해주세요. 항상 docker cp 다음에 SOURCE가 먼저 나오고 DESTINATION이 뒤에 나와요.
src나 dst에 대시 - 를 사용하면 아카이브 파일을 해제해서 보내거나 파일을 압축해서 stdout으로 받을 수 있어요.
만약 xodwkFree.pem 파일을 압축한 xodwkFree.pem.tar 파일이 도커 호스트에 있다고 할 때 이 파일을 컨테이너 안으로 압축을 해제해서 보내고 싶다면
docker cp - 컨테이너_ID:/root < xodwkFree.pem.tar
이렇게 하면 도커 컨테이너 안에서는 /root/xodwkFree.pem으로 나타나게돼요.
반대로 컨테이너 안에 있는 파일을 도커 호스트로 복사하고 싶다면 아래와 같이
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
이렇게 해주면 돼요.
이렇게 해서 컨테이너와 호스트 간에 파일을 공유(복사)하는 방법을 알아봤어요.