몇년 전부터 상당수의 기업에서 도커를 도입해서 사용하고 있다. 특히 인공지능이 급격하게 발달하고, 우리나라에서도 인공지능 관련 스타트업들이 많이 생겨났는데, 대부분의 스타트업에서 도커를 활용하고 있다. 도커가 무엇인지, 어디서 볼 수 있는지, 그리고 왜 도커를 사용하는지 알아보자.
개발일을 하다보면, github에서 수많은 코드를 볼 수 있다. 가령 아래와 같은 창을 본다고 하자.
인터넷에 올라와 있는 수많은 github자료 중 하나이다. 인공지능 자체는 파이썬 + 라이브러리들 형태로 코드를 짜는데, Dockerfile, docker-compose.yml 파일 같은 것들이 존재한다. 이것들이 도커의 정체이다. 도커를 통해서 우리는 "라이브러리 버전"이 달라도, 코드를 실행할 수 있다. 가령 pytorch의 경우, 수개월 마다 라이브러리가 업데이트 된다. 현재기준으로 최신 버전은 2.4.1이다. 수많은 pytorch버전이 있는데, github에 올린 사람과 본인이 정확히 같은 버전을 사용할 확률은 낮다. 또한 pytorch뿐만 아니라 opencv등의 다양한 라이브러리를 활용하게 되는데, 이때 라이브러리 버전 차이에서 오는 스트레스는 꽤나 크다. 그때마다 별도의 가상환경을 만들고, 가상환경에 라이브러리를 하나씩 설치하는 것은 매우 번거롭다. 그래서 도커가 활용된다.
도커는 크게 "이미지"와 "컨테이너"로 구성된다.
이미지는 프로젝트를 담고 있는 것으로 생각할 수 있다. 프로젝트의 코드, 라이브러리, 환경이 모두 이미지가 되는 것이다. 코드와 dependencies들이 같이 묶이기 때문에 개발자가 만들었던 환경이 그대로 재현될 수 있도록 저장해 놓는다고 볼 수 있다. github에서 보이는 "Dockerfile"이 이미지를 만드는 것으로 보면 된다.
컨테이너는 이미지의 "running instance"이다. 이미지는 프로젝트의 코드, 라이르러리, 환경을 하나로 묶어 놓은 것이고, 컨테이너는 그것을 실행한 것이다. 이미지를 "run" 하게 되면 컨테이너가 생성되고, 그 컨테이너에서는 개발자가 일하던 환경이 재현되어 해당 코드가 실행될 수 있다. 위의 github에서 docker-compose.yml 파일이 컨테이너를 만들고 실행하게 하는 파일이다.
개발자가 자기가 작성한 코드를 "Dockerfile"을 통해서 "이미지"로 만들면, 그것을 "docker-compose.yml"을 통해서 실행하면, "container"가 실행되어 다른사람도 실행할 수 있는 것이다. 하나의 이미지로부터 여러개의 컨테이너를 만들 수 있으며, 각각의 컨테이너는 기본적으로 독립적으로 실행된다. 즉, 별도의 작업을 하지 않는한 컨테이너끼리의 통신은 어렵다.
이렇게 도커를 사용하면, 개발자의 환경과 사용자의 환경차이를 보다 쉽게 극복할 수 있다. 현재 수많은 기업에서 도커를 활용하고 있으며, 특히 인공지능 분야에서 많이 사용되고 있다.