연구실 서버를 사용 중인데 연구실 사정 상 기존 서버에서 다른 서버에서 작업을 하게 되었어요..
아직 서버를 다루는 게 익숙치 않아서 차근차근 지피티와 알아보았습니다 :)

현재 내 상황
서버4번에 있는 soojin container에서 myenv conda 가상환경을 바탕으로 작업 진행 중
=> 서버 5번으로 옮기기
image를 전체로 옮기거나 훨씬 더 간편한 방법이 있을 수 있지만 저는 서버4번에서 새로운 container를 파서 기존의 myenv conda 가상환경을 갖고오고 다른 데이터셋이나 파일들도 갖고오기로 했어요
[서버5번 container]
↓ (export)
[서버5번 host /home/soojin/myenv.yml]
↓ (rsync)
[서버4번 host /home/soojinhwang/myenv.yml]
↓ (docker cp)
[서버4번 container /envs/myenv.yml]
↓ (conda env create)
[서버5번 container /your/files/*]
↓ (docker cp or tar)
[서버5번 host /home/soojin/files/]
↓ (rsync)
[서버4번 host /home/soojinhwang/files/]
↓ (docker cp)
[서버4번 container /your/target/dir/]
[완료 ✅]
1. 기존에 사용하고 있는 conda 환경 container에 저장하기 (서버5번)
- 내보낼 환경 activate 하기
- 현재 환경 export로 내보내기
# 현재 활성화된 환경 기준으로 export
conda activate myenv
conda env export > myenv.yml
2. 서버5번 container -> 서버5번 host 복사
# container ID 확인
docker ps
# 파일 복사
docker cp <container_id>:/path/in/container/myenv.yml /home/soojin/

docker ps를 통해 container id를 확인할 수 있어요.
그리고 그 뒤 내가 원하는 파일인 myenv.yml의 경로는 container에 직접 들어가 경로를 확인하시면 됩니다!
그리고 그 뒤엔 서버4번에서 저장할 경로를 넣어주시면 돼요. 이 경로는 서버4번에 들어가 pwd 명령어를 통해 확인할 수 있어요.


3. 서버5번 -> 서버4번
* 서버5번에서 보내주는 것이기 때문에 서버5번에서 진행해야 해요
rsync -avz /home/soojin/sait.yml soojinhwang@서버4번IP:/home/soojinhwang/
(rsync는 remote syncronize의 약자로 파일 전송하는 오픈소스 유틸리티입니다!)
rsync -avz (서버5번에 있는 내 yaml 환경 파일 경로) (서버4번주소):(서버4번에 저장할 경로)

여기까지 진행을 했으면 서버4번에 내가 지정한 경로에 환경(yaml)파일이 들어와있을거에요!
이제 이렇게 갖고온 yaml 파일을 이용해서 새로운 환경을 만들어봅시다.
- 서버4번 IP 확인하는 법
hostname -I
4. 서버4번에서 Container 생성
새로운 환경을 만들기 전에 우선 우리가 작업하고자 하는 container를 먼저 만들거에요.
이건 각자 생성하는 방법에 따라 진행하면 될 것 같아요
(makefile, make up)
5. 서버4번에서 환경 만들기
각자 만든 container에서 우리가 서버5번에서 사용한 환경을 그대로 사용하기 위해 갖고온 yaml 파일을 위해 만들어줍니다. 우선 container에 들어가줍니다.
conda env create -f /home/user/myenv.yml
conda activate myenv
conda create를 하고 이 때 우리가 갖고있는 환경파일의 경로를 알려줍니다.
그 다음 환경을 실행해주면 끝! (이 때 저는 저장한 환경 파일 이름과 새로 만들 환경 이름을 같게 해서 따로 이름 설정은 하지 않았어요)
이 때 바로 conda activate을 하면 실행이 안될수도 있으니 저는 간단하게 터미널을 껐다가 다시 실행해서 conda activate을 해줍니다.
6. 파일 옮기기 (폴더 통째로)
서버에 없다면 container에서 host로 복사해주기
docker cp <container_id>:/path/in/container/ /home/soojin/files/
docker cp (내 container id) : (container에서 갖고올 폴더 경로) (server 즉 host에서 복사할 경로)
7. 폴더 통째로 서버 5번 host -> 서버 4번 container
* 이거역시 서버5번에서 진행. 위에서 yaml 보내준 것과 동일하게 진행
rsync -avz /home/soojin/files/ soojinhwang@서버4번IP:/home/soojinhwang/files/
rsync -avz (서버5번에서 보낼 내 폴더 경로) (서버4번주소):(서버4번에서 붙여넣을 경로)

전 여기서 바로 container내의 폴더로 이동해줬어요!
이후 서버4번 container 실행 후 폴더들을 확인해보면 제대로 들어온 걸 확인할 수 있습니다~