코딩뚠뚠

docker 개념과 기본 사용 본문

공부/기타

docker 개념과 기본 사용

로디네로 2021. 2. 4. 01:24
반응형

 

최근 docker를 쓸 일이 생겼다.

 

이전에는 anaconda로 충분히 쓰고있다고 생각했는데 팀원이 docker를 쓰면 훨씬 편하다고 하길래.. 써봤는데

 

신세계다! 역시 신문물은 괜히 고집부리지 말고 한번 경험해봐야 하는것 같다.

 

(당연히 단점도 있다고는 한다 ㅎㅎ)

 


 

docker 의 사전적 의미 : 

부두(항만) 노동자

 

우리가 쓰는 docker는? : 

이 친구가 docker의 로고이다.

 

도커는 컨테이너 기술을 쉽게 사용할 수 있게 하는 오픈소스 프로젝트이다.

 

도커는 소프트웨어를 패키징하는데 '컨테이너' 라는 표준화된 유닛으로 패키징한다. 여기에는 라이브러리, 시스템도구 등 소프트웨어 실행에 필요한 모든 것들이 미리 포함되어있다.

 

좀더 직관적으로 설명해보자면..

 

예를들어 당신의 컴퓨터에서 pytorch를 사용해서 딥러닝 개발을 하고싶다고 하자 

 

local에서는 apt-get install 을 몇십번이고 해야 비로소 개발을 시작할 수 있을 것이다.

 

하지만 docker 를 사용한다면 이미 관련한 라이브러리가 모두 세팅되어있기 때문에 바로 개발을 시작할 수 있다.

 

실제 개발시에는 생각보다 환경세팅과 호환에 시간을 많이 뺏기게 되고 의미 없는것 같은 시간이 흐르는데에 화만 나기 일쑤인데, 이미 완벽히 구축된 생태계를 그대로 가져오는 방식은 많은 장점을 지니고있다.

 


 

docker 작동방식 : 

 

위 사진은 컨테이너 의 특징을 나타낸 도식도이다. 컨테이너는 OS Kernel 자체를 가상화하여 리소스를 공유한다. Container는 한개의 커널을 가지게 된다.

 

 

이어서 이러한 컨테이너 사용 기술을 발전시킨 기술인 docker 는?

 

 

도커엔진이 응용프로그램별로 격리와 커널 공유를 수행해준다.

 


 

docker 간단한 사용방법

사람마다 사용하는 용도는 다르겠지만 내가 사용한 방법은 다음과 같다.

 

 

 

1. 이미지 파일 pull

 

우선 컨테이너 실행에 필요한 파일들과 설정값들을 포함하고 있는 이미지를 가져와야 한다.

 

hub.docker.com

 

Docker Hub

 

hub.docker.com

위 사이트에서 원하는 이미지를 검색해보자. ex) pytorch1.7

 

그리고 pull 명령어로 이미지를 가져와보자.

 

ex)
docker pull person/pytorch1.7

 

 

 

2. run

 

컨테이너 생성과 동시에 컨테이너에 접속한다.

 

기본적으로는

 

docker run (repository) 가 되겠지만 여기에 많은 옵션들을 줄 수 있다.

 

내가 쓴 run 명령어는 다음과 같다.

 

docker run -it -v /home/myname/share:/root/share --shm-size=8GB --gpus '"device=0,1"' --restart=always --name my person/pytorch1.7

 

옵션에 대해 설명하자면

 

-it  :

i 옵션과 t 옵션을 같이 써준것으로 터미널 입력을 위한 옵션이다.

 

-v 와 그 뒤의 directory :

심볼릭 링크가 포함된 폴더를 도커의 공유폴더로 사용하고자 할때 이용한다. 나의 디렉토리:/docker내의 디렉토리가 되며 둘은 이 공간을 share 할 수 있게된다.

 

--shm-size :

이 옵션 없이 실행하게 되면 기본적으로 64MB의 공유메모리밖에 사용하지 않는다. 딥러닝 모델을 학습시킬 시 공유메모리가 필히 부족하게 된다. 환경을 지우지 않고 메모리를 늘리는 방법도 있지만 나에겐 서버에 대한 sudo 권한이 없어 이 옵션을 주고 다시 run해주었다.

 

--gpus :

gpu를 사용하기 위해 써주는 명령어 이다. 현재 device를 0번과 1번을 골랐는데 --gpus all 이라면 컴퓨터에 있는 gpu 모두를 사용할 수 있다.

 

--restart=always :

매번 docker를 run 해주기는 번거로우니 docker 를 실행시킬 때 마다 container를 항상 같이 띄워주는 번거로움을 덜어주는 명령어이다. exit code와 상관없이 항상 재시작된다.

 

--name :

docker 컨테이너의 이름이다.

 

그리고 마지막에 pull해 준 이미지명을 넣어준다.

 

나는 docker를 서버환경에서 training을 하기 위해서만 사용했기 때문에 GUI환경이 그다지 필요하지 않았지만 GUI를 사용하려면 Xwindow 의 세팅이 필요하다. 아래의 블로그분이 잘 정리해놓으신 것 같아 링크를 건다.

goodgodgd.github.io/ian-flow/archivers/docker-tutorial

 

Docker with GUI Tutorial (Sep. 2019 Update) « IanFlow

Motivation 연구 때문에 ORB-SLAM 이라는 걸 돌려봐야 했는데 오래된 코드라 테스트 환경이 무려 Ubuntu 12.04 or 14.04로 되어있을 뿐만 아니라 구버전 우분투에서만 작동하는 ROS Hydro or Indigo까지 dependency

goodgodgd.github.io

 

 

3. exit

 

도커환경에서 빠져나오려면 exit 명령어를 사용해주면 된다.

 

exit

 

 

 

4. exec

 

run 해준 컨테이너에 다시 접속하고자 할때 사용한다.

 

아래와 같이 사용하였다.

 

docker exec -it mymy bash

 

 

 

5. 마지막으로는 자주 사용했던 docker 명령어들이다.

 

docker images

현재 다운받아져 있는 docker image 들을 출력해준다.

 

docker start mymy(예시 이름)

docker stop mymy(예시 이름)

컨테이너를 실행 및 중지시켜준다. exec 로 실행되지 않을때는 선행적으로 start 가 되지않은것이다.

 

docker ps
docker ps -a

실행중인 컨테이너 목록을 출력한다.

종료된 컨테이너까지 모두 목록을 출력한다.

 

docker rm mymy(예시이름)

컨테이너를 삭제한다.

 

 

환경을 독립시켜 개발, 또는 test tool을 빨리 돌려보고자 할때 이만큼 간단한 툴이 또 있을까 싶다. 한번 써보시라

 

 

부족하지만 docker 포스팅을 이렇게 마치려고 한다.

 

추후에 이해가 더 깊어진다면 내용을 더 보충하려 한다.

반응형

'공부 > 기타' 카테고리의 다른 글

딥러닝, 데이터분석 pandas 기본사용  (0) 2021.04.06
파이썬 self와 __init__ 에 대해  (0) 2021.04.05
Git 개념 및 사용 2  (0) 2021.02.07
Git 개념 및 사용법 1  (0) 2021.02.07
Call by [value & reference]  (0) 2021.01.10