Coding, Filming, and Nothing
article thumbnail

이전에 있던 연구실은 그냥 linux 서버였고 개인이 알아서 개인 계정에서 콘다 환경을 만들어서 사용했었는데, 지금 연구하는 곳은 도커를 사용한다. 도커 레이어가 한 장 더 추가된 것만 다를테니 콘다를 쓸 도커로 만들어야겠다 싶어서 그 김에 기록한다. 

 

*이 글에서 사용한 계정이 sudo 계정이여서, 명령어에 딱히 sudo를 붙이지 않았는데 접속한 계정에 따라서 sudo docker ... 식으로 사용해야 할 수 있다. 

도커 기여엉

 

 


도커 트리

Container: Process, a running instance of an application

Image: Program, a static file that defines the behavior of the container

 

 

 

1. 도커 허브에서 사용할 miniconda3 'image'를 검색하기

이미지를 검색하는 곳은 registry로 hub.docker.com에서 검색을 수행한다. 

miniconda3가 아닌 다른 세팅을 가지고 시작을 하고 싶다면 허브에서 원하는 이미지를 다운 받으면 된다. 다운받기 이전에 허브에 원하는 이미지가 존재하는지부터 search를 통해 확인하자.

docker search miniconda3

해당 글에서 사용할 miniconda3 image는 continuumio/miniconda3 이다.

 

 

2. miniconda3 image 다운로드 

 사용할 이미지를 다운로드 하자.

docker pull continumio/miniconda3

 

 

3. 다운로드한 이미지 조회

registry(hub)에서 끌어온 이미지 서버에서 확인. 연구실에서 사용하는 서버이기 때문에 다양한 이미지들이 이미 존재한다. (개인이 커스텀해서 commit 해놓은 이미지도 존재한다.)

docker images

 

그 외 이미지 관련 명령어 모음

# 동작중인 컨테이너 확인
docker ps
# 정지된 컨테이너까지 확인
docker ps -a
# 컨테이너 삭제
docker rm [CONTAINER_ID] 
# 컨테이너 전체 삭제
docker rm 'docker ps -a -q'
# 이미지 확인
docker images
# 이미지 삭제
docker rmi [IMAGE_ID]
# 이미지 삭제 & 해당 컨테이너 강제 삭제
docker rmi -f [IMAGE_ID]

 

 

4. 컨테이너 시작

run 명령어를 통해 이미지를 바탕으로 실행될 컨테이너를 실행을 합니다. -(하이픈)을 통해 여러가지 옵션을 줄 수 있습니다.

docker run --gpus all --ipc=host -t -d -v $(pwd):/root -p 1234:8888 --name my-container continuumio/miniconda3:latest
  • continuumio/miniconda3:latest 
    가장 최신버전의 miniconda3 이미지를 사용해 컨테이너를 실행합니다.
    • -t: 최초 프로세스가 끝나도 컨테이너를 유지합니다.
    • -d: 데몬프로세스로 실행 >> 컨테이너를 백그라운드에서도 실행, 유지합니다.
  • --gpus all --ipc=host
    생성하는 컨테이너에서 모든 GPU를 사용할 수 있도록 설정합니다.
  • -v $(pwd):/root
    현재 디렉토리를 컨테이너의 /root 디렉토리에 마운트합니다.
    • 컨테이너를 삭제하면 컨테이너 내 데이터도 모두 날라갑니다. (가상머신 날리는 것과 동일한 개념)
    • 그러나, 마운트 한 곳에 저장한 데이터는 날아가지 않습니다. 그래서 dataset 혹은 학습된 모델같은 경우에는 마운트 한 위치에 저장하는 편이 좋습니다.
    • 때문에 서버의 아무위치가 아니라, 본인이 사용할 디렉토리를 mkdir 명령어를 통해 수행을 한 후에 해당 디렉토리에서 작업을 하는게 용이합니다. 
  • -p 1234:8888
    호스트의 1234 포트를 컨테이너의 8888포트로 리다이렉트합니다.
    • (랩장님 권유) 처음 실행할 때 포트 리다이렉션을 설정 하지 않고 실행하면 나중에 바꾸기 굉장히 귀찮습니다.
  • --name my-container
    컨테이너 이름을 my-container로 설정합니다.
    • 이름을 지어서 서버를 같이 사용하는 인원들이 컨테이너를 잘 식별할 수 있도록.

 

 

5. 컨테이너 접속

exec 명령어로 수행합니다.

docker exec -it my-container /bin/bash
  • my-container 안에서 bash를 엽니다.
    • SSH로 리눅스 서버에 접속한 것과 동일하게 하면 됩니다. 
    • run 명령어를 실행할 때 -i 옵션을 수행하지 않았는데, 이 글에서는 실행할 때에 수행합니다.

 

 

6. 컨테이너 정지, 시작,  제거

docker stop my-container

컨테이너 정지를 수행합니다.

  • 서버 점검, 안전점검으로 인한 정전 시에는 컨테이너 정지까지만 수행해도 됩니다.

 

docker start my-container

멈춘 컨테이너를 다시 실행시킵니다.

 

docker rm my-container

멈춰있는 컨테이너를 제거합니다.

  • 마운트된 곳 이외의 저장된 데이터는 모두 다 날라갑니다.
  • 안쓰는 컨테이너는 본인이 바로 지워주지 않으면 저장공간을 차지합니다

 

 

7. conda init 수행

bash로 접속을 했고, 최초 접속이기 때문에 conda가 초기화 되지 않은 상태입니다. 따라서 conda 명령어를 사용하기 위해 초기화를 수행합니다.

conda init bash

초기화가 완료되었으면 exit 명령어를 통해 해당 bash를 종료시키고, docker exec 명령어를 통해 해당 컨테이너에 다시 접속합니다. 그러면 아래 그림과 같이 (base)가 활성화 되어 있습니다. 

 

*참고, 초기화 하지 않고 명령어를 치면 아래와 같은 에러가 뜹니다.

 

 

이제 conda 환경이 만들어졌습니다. 그 아래에 가상환경을 만들고 하는 건 동일하게 수행할 수 있습니다. 

아래는 리눅스 서버 사용할 때 작성했던 글 몇 개입니다. 도움이 되면 좋겠습니다.

https://with-ahn-ssu.tistory.com/42

 

[Conda] 컴퓨터비전을 위한 토치환경 셋업

의료영상 처리, 컴퓨터 비전을 위한 모델을 학습시키고 다룰 때를 위해 구성 해놓은 가상환경 설정 명령어 모음입니다. 주로 medical image segmentation, U-Net based models, ViT models, Albumentation 등을 다루는

with-ahn-ssu.tistory.com

https://with-ahn-ssu.tistory.com/16

 

[Linux] conda 가상환경에서 tmux 설치하기 (conda install tmux)

가상환경을 운용할 컴퓨터(보통 서버)에서 가끔가다가 리눅스인데, tmux가 설치가 되어 있지 않은 경우가 있다. 그러면 환경자체에 깔려고 하면 sudo 권한이 필요한데 보통 없다. 그래서 가상환경

with-ahn-ssu.tistory.com

https://with-ahn-ssu.tistory.com/12

 

[Linux] alias 영구 등록하기

alias를 영구 등록하지 않으면 접속할때마다 초기화가 되서 지정해주어야 한다. 가상환경을 활성화할 때 자주 쓰게 된다. (나는) 0. Base Auto activation off 가상환경 base를 우선 자동적으로 활성화 되

with-ahn-ssu.tistory.com

https://with-ahn-ssu.tistory.com/7

 

Requirement | GNN 구동을 위한 가상환경 패키지 셋업

GNN을 연습/구동해보기 위해서 가상환경을 셋업하는 과정을 담았다. GNN은 검색해도 개념적인 부분들만 나와서 솔직히 이 블로그 누가 볼지 모르겠지만 그래도 실습하는데에 도움이 되길 하는 마

with-ahn-ssu.tistory.com

 


 

추가할 사항

컨테이너 밖에서 원격으로 작업하기

SSH 포트 포워딩하기 

container commit 해서 이미지로 저장 

profile

Coding, Filming, and Nothing

@_안쑤

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!