Docker 란?
도커(Docker)는 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트이다.
기존의 가상화 기술은 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식! 이러한 여러 개의 운영체제는 가상 머신이라는 단위로 구별되고, 각 가상 머신에는 우분투(Ubuntu), CentOS 등의 운영체제가 설치 되어 사용된다. 각종 시스템자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치기 떄문에 일반 호스트에 비해 성능의 손실이 발생!
가상머신은 완벽한 운영체제를 생성 할 수 있지만 일반 호스트에 비해 성능 손실이 있으며, 배포하기에 부담스럽다는 단점이 있다.
이에 비해 도커 컨테이너는 가상화된 공간을 생성하기 위해 리눅스 자체 기능인 chroot, namespace, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없다.
컨테이너를 이미지로 만들어 배포하는 시간이 가상머신에 비해 빠르고, 가상화된 공간을 사용할 때의 성능 손실도 거의 없다는 장점이 있다!
도커(Docker)를 시작해야 하는 이유
- 애플리케이션의 개발과 배포가 편해진다.
- 독립된 개발 환경을 보장받을 수 있다.
- 서비스를 개발했을 때 사용했던 환경을 다른 서버에서도 컨테이너로서 똑같이 복제가능하기에 개발/운영 환경의 통합이 가능하다.
- 도커는 이미지 내용을 레이어 단위로 구성하며, 중복되는 레이어를 재사용할 수 있어서 애플리케이션의 배포 속도가 매우 빨라진다.
- 여러 애플리케이션의 독립성과 확장성이 높아진다.
- 각 모듈의 관리가 쉬워진다.
- 컨테이너는 수 초 내로 생성, 시작이 가능할 뿐만 아니라 여러 모듈에게 독립된 환경을 동시에 제공할 수 있기 때문에 마이크로서비스 구조에서 가장 많이 사용되고 있다.
- 유지보수 용이하다.
도커 이미지와 컨테이너
도커 이미지와 컨테이너는 도커를 이해하는데 가장 기본적인 개념이므로 확실하게 짚고 넘어가야 한다. 각각의 역할을 간단하게 정리하면 다음과 같다.
- 도커 이미지 : 도커 컨테이너를 구성하는 파일 시스템과 실행할 어플리케이션 설정을 하나로 합친 것으로, 컨테이너를 생성하는 템플릿 역할을 한다.
- 도커 컨테이너 : 도커 이미지를 기반으로 생성되며, 파일 시스템과 어플리케이션이 구체화되어 실행되는 상태이다.
도커 이미지는 한 마디로 표현하면 도커 컨테이너를 만들기 위한 템플릿으로 볼 수 있다.
도커 컨테이너는 파일 시스템과 어플리케이션이 함께 담겨 있는 박스라고 보면 된다.
도커 환경 세팅하기
현재 공부를 진행하고 있는 파이토치로 시작하는 딥러닝 기초 강좌를 토대로 세팅을 진행하였다.
https://github.com/deeplearningzerotoall/PyTorch/blob/master/docker_user_guide.md
세팅법이 나와있는 강좌 관련 자료이다.
도커 이미지 다운받기
우선 도커를 실행한 상태로 터미널을 열어 hub.docker 에서 도커 이미지를 받아서 컨테이너를 사용할 준비를 합니다.
$ docker pull deeplearningzerotoall/pytorch
명령어를 입력해준다.
다운을 완료된 것을 확인하고 컨테이너를 실행해보자
도커 이미지로부터 컨테이너 실행하고 끄기
$ docker run -i -t --name pt -p 8888:8888 -p 8097:8097 deeplearningzerotoall/pytorch /bin/bash
명령어를 입력하여 도커 컨테이너를 만들었고 root 계정으로 컨테이너 내부 쉘에 접속한 상태다.
root@[고유번호]:~# exit
를 입력하여 컨테이너를 종료할 수 있다.
컨테이너 자유롭게 들어가기
주의: docker run 명령어는 한번 만 실행하시면 됩니다. 종료된 컨테이너를 다시 실행하려면 아래와 같이 실행합니다.
$ docker start pt
$ docker attach pt
만약에 컨테이너를 켜둔채 잠시 밖으로 나오고 싶다면 Ctrl+P + Ctrl+Q 를 사용합니다. 마찬가지로 다시 접속하려면 docker attach
명령어를 사용하면 됩니다.
다음과같이 컨테이너 생성 및 사용하면 되고 이어 깃 클론을 하여 공부를 진행하면 된다.