본문 바로가기
SendInAir

Docker

by Sendinair 2022. 8. 23.

이 포스팅에선 도커(Docker)에 대해 다뤄보고자 합니다.

 

스택오버플로우의 2022년 설문조사에 따르면 도커는 1등인 NPM다음으로 인기있는 도구이며, 59,919명의 응답자들 중 약 64%의 비중을 차지하고 있습니다.

출처: https://survey.stackoverflow.co/2022/#most-popular-technologies-tools-tech

 

또한 사용 경험자들의 약 77%가 계속 사용하고 싶다 응답하였으며,

출처:https://survey.stackoverflow.co/2022/#most-loved-dreaded-and-wanted-tools-tech-want

또한 사용하고 싶다 응답한 비율이 작년의 30% 대비 7% 증가한 37%가 되었습니다.

출처:https://survey.stackoverflow.co/2022/#most-loved-dreaded-and-wanted-tools-tech-want

 

도커가 도대체 무엇이길래, 인기가 이렇게 많을까요?




 

도커란?

 

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼으로, 환경이 다름으로 인해 프로그램이 돌아가지 않는 문제를 해결하는데 있어 훌륭한 해결책입니다.



개발을 하다보면 만든 프로그램을 서버, 클라우드, 다른 컴퓨터 등에 옮겨야 하는 경우가 종종 있는데 옮긴 곳의 환경이 개발한 곳의 환경과 달라서 프로그램이 돌아가지 않을 수 있습니다. 예를 들면, 개발은 윈도우에서 했는데 서버는 리눅스인 것입니다.

 

도커는 프로그램을 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너 안에는 라이브러리, 시스템 도구 등 프로그램의 실행에 필요한 모든 것이 포함되어 있습니다. 이처럼 프로그램을 독립적인 컨테이너 환경에서 실행시킴으로 어떠한 환경에서도 일관된 결과를 보장합니다.

 

이 도커의 핵심적인 개념은 컨테이너와 이미지가 있는데, 먼저 컨테이너에 대해 알아보고자 합니다.

 

컨테이너

컨테이너는 격리된 공간에서 프로세스가 동작하는 기술입니다. 가볍고 빠르며, 여러 컨테이너를 실행하여도 각각 독립적으로 실행되며, 프로세스가 필요한 만큼만 CPU와 메모리를 추가적으로 사용하여 성능 손실도 거의 없다는 장점을 가지고 있습니다.

실행 중인 컨테이너에 접속하여 명령어를 입력할 수도 있으며, 호스트의 특정 포트와 연결하거나 특정 디렉토리를 내부 디렉토리인 것처럼 사용하는 것 또한 가능합니다. apt-get이나 yum등 운영체제에서 사용하는 패키지 매니저를 통한 설치 또한 가능합니다.

 

이미지

컨테이너 실행에 필요한 파일과 설정을 포함하고 있는 것입니다. 컨테이너는 이미지를 실행시킨 상태입니다. 상태값을 가지지 않으며, 변하지도 않습니다. 하나의 이미지에서 여러개의 컨테이너를 만들 수 있으며, 추가되거나 변하는 값은 다 컨테이너에 저장되며 이렇게 컨테이너의 상태가 바뀌거나, 삭제가 되더라도 이미지는 변하지 않고 남아있습니다. 도커의 이미지는 Docker hub에 등록하거나 Docker Registry 저장소를 직접 만들어 관리할 수 있습니다.

 

Dockerfile

도커의 이미지는 Dockerfile을 통해 만들어집니다. Dockerfile은 DSL(Domain Specific Language)라는 언어를 사용하고 있으며, 약 20개 정도의 키워드를 사용할 수 있습니다. 이에 대하여선 밑의 작성된 코드 예시를 통해 살펴보고자 합니다.

“FROM node:alpine”: alpine 리눅스 기반의 node를 base이미지로 사용합니다 (alpine버전은 일반 리눅스 기반보다 더 경량화 되어있습니다).

“WORKDIR /app”: 작업 디렉토리를 컨테이너의 /app 디렉토리로 전환합니다.

“COPY package.json .”: package.json파일을 컨테이너의 /app 디렉토리로 복사해옵니다.

“RUN npm install –only=prod”: “npm install –only=prod”명령어를 실행시킵니다.

“COPY . .” 이미지를 빌드한 모든 파일을 컨테이너의 /app 디렉토리로 복사해옵니다.

“CMD [“npm”, “start”]”: “npm start”명령어를 실행시킵니다.

 

정리하자면 FROM은 base이미지 설정, WORKDIR은 작업 디렉토리 설정, COPY는 호스팅 컴퓨터의 파일을 컨테이너로 복사하기 위해 사용합니다.

RUN과 CMD는 둘 다 명령어를 실행하기 위해 사용되는 명령어이지만, RUN은 이미지를 빌드할 때, CMD는 이미지를 실행시킬 때 실행된다는 차이점이 있습니다.

 

여기까지 도커에 대해 짧게 알아보았는데요, 도커에는 이 글에 설명된 것 외에도 많은 요소들이 있으며, 이 글만으로 도커를 온전히 활용하기엔 부족하다고 생각합니다만, 도커에 입문하는 분들에게 도움이 되길 바랍니다.


센디네어는 BaaS(Blochchain as a service) 스타트업으로서 블록체인과 기업간의 간극을 줄여, 더 많은 사람들이 블록체인 서비스를 접할 수 있고자 하는 기술을 연구하고 있습니다. 

 

회사 홈페이지: https://sendinair.com

회사 Twitter :https://twitter.com/sendinair

Aptos NFT marketplace: nodegen.xyz

NODEGEN Twitter: https://twitter.com/NODEGEN