본문 바로가기
Docker

Docker(도커)란?

by byeongoo 2020. 1. 7.

현재 회사에서 마이크로서비스를 만들면서 이번 기회에 스프링부트와 도커에 대해서 공부를 시작하게 되었습니다.

1. 도커(Docker)란?

개발을 시작하기 위해서 가장 먼저 해야할일은 개발환경 구성입니다. 서버에 nginx,. mysql, tomcat, jenkins 등 여러가지 툴을 직접 설치하기 위해서 엄청난 노력이 필요합니다. 저는 여러개의 서비스를 만들고 있어서 새로운 프로젝트를 할때마다 이 점이 무척 힘들었습니다. 또한 서버에 프로그램을 설치 시 버전 때문에 문제를 겪을 수도 있습니다. docker를 사용하면 이러한 문제를 해결하는데 도움을 줄 수 있습니다.

 

도커란 컨테이너 기반의 오픈소스 가상화 플랫폼

 

컨테이너는 배에 실는 네모난 상자를 생각하시면 됩니다. 컨테이너 안에 여러가지 물품을 넣고 실듯이 서버에서는 다양한 프로그램과 실행환경을 컨테이너로 추상하하여 프로그램의 배포 및 관리를 단순하게 해줍니다. 데이터베이스 서버, 메시지 큐, 백엔드 프로그램 등 어떤 프로그램도 컨테이너로 추상화할 수 있습니다. 

 

컨테이너는 격리된 공간에서 프로세스가 동작하는 기술입니다. 가상화 기술의 하나로 기존방식과는 차이가 있습니다. 기존의 가상화 방식은 OS를 가상화합니다. 기존 방식은 사용법은 간단하지만 무겁고 느리며 운영환경에서 사용할 수 없습니다. 도커는 프로세스를 격리하는 방식으로 동작하기 때문에 가볍고 빠릅니다. CPU와 메모리는 프로세스가 필요한 만큼 추가로 사용하고 성능적으로도 손실이 거이 없습니다.

 

가상머신과 도커
도커 아키텍처

2. 도커 이미지

이제 도커에서 가장 중요한 개념중 하나인 이미지에 대해서 알아보겠습니다. 

 

컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것       

 

위에서 살펴봤던 컨테이너는 이 이미지를 실행한 상태라고 볼 수 있습니다. 같은 이미지에서 여러개의 컨테이너를 생성할 수도있고, 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되도 이미지를 통해 다시 컨테이너를 실행할 수 있습니다. 이 이미지를 만들어서 저장해 두면 다른 서버에서도 이미지를 받아서 컨테이너를 실행시켜 동일한 환경을 만들어 줄 수 잇습니다. 저는 이 이미지를 Docker hub에 등록하여 관리하고 있습니다.

 

[레이어 저장방식]

도커 이미지는 컨테이너를 실행하기 위해 필요한 정보를 가지고 있기 때문에 용량이 수백 메가바이트 정도 됩니다. 처음 이미지를 다운 받을 때는 괜찮지만, 기존 이미지에 파일 하나를 추가했을 때 다시 받으려면 비효율적입니다. 도커를 이 문제를 해결하기 위해 레이어라는 개념을 사용합니다.

 

이미지는 여러개의 레이어로 구성되고 파일이 추가되거나수정되면 새로운 레이어가 생성됩니다. 컨테이너를 생성할 때도 레이어 방식을 사용하는데 기존의 이미지 레이어 위에 읽기 쓰기 레이어를 추가합니다. 

 

[이미지 경로]

도커이미지 이름은 다음과 같은 형태로 구성됩니다.

 

[Registry URL]/[사용자 ID]/[이미지명]:[tag]

 

Registry URL은 기본적으로 도커 허브를 바라보고 있고 사용자 ID를 지정하지 않으면 기본값(library)을 사용합니다. 따라서 ubuntu = library/ubuntu = docker.io/library/ubuntu 는 모두 동일한 표현입니다.

 

또한 도커의 tag 명령어를 이용하여 기존에 만든 이미지에 추가로 이름을 지어줄 수 있습니다.

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

예를들면 app 이미지에 계정정보와 버전 정보를 다음과 같이 추가할 수 있습니다.

docker tag app subicura/sinatra-app:1

subicura라는 ID를 사용하고 이미지 이름을 sinatra-app으로 변경했습니다. docker의 push 명령어를 통해 도커 허브에 이미지를 업로드 할 수 있습니다.

docker push subicura/sinatra-app:1

위에서 설명한 도커 이미지를 만들기 위해서는 Dockerfile에 DSL이라는 언어를 이용하여 이미지 생성 과정을 적어야합니다. 자세한 Dockerfile 작성법은 나중에 알아보도록 하겠습니다. 일단 도커 이미지를 만들기 위해서는 도커파일을 작성 후 docker build를 하면 만들 수 있다고 기억하시면 됩니다.

3. 도커 배포 

소스 변경 시 도커 배포 방식

도커의 배포 방식의 한가지 예를 살펴 보겠습니다. 개발자가 자신이 개발한 소스를 Git(깃허브)에 업로드 후 Jenkins를 통해 Docker 이미지로 빌드합니다. 빌드된 Docker 이미지를 테스트 서버에서 테스트하고 문제가 없다면 해당 이미지를 서버에 배포 후 컨테이너를 실행시킵니다. 

 

지금까지 Docker(도커)에 대해서 간단히 살펴보았습니다. 궁금한점이 있다면 언제든 댓글 달아주세요

REFERENCE

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

 

초보를 위한 도커 안내서 - 도커란 무엇인가?

도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역사, 그리고 도커의 핵심 개념인 컨테이너와 이미지에 대해 알아보고 왜 이렇게 도커가 인기 인지 하나하나 살펴보겠습니다.

subicura.com

https://tora-it-kingdom.tistory.com/21

 

Docker + Jenkins

Docker란? 1. Docker docker는 컨테이너 기반 가상화 도구이다. 기존에 사용하던 가상 머신(VM)은 사용하기 위해서 항상 OS를 설치해야 했고, 이미지 안에 OS가 포함되어 있기 때문에 용량이 매우 크고 속도도 느..

tora-it-kingdom.tistory.com

 

'Docker' 카테고리의 다른 글

AWS EC2 docker, docker-compose 설치  (1) 2021.11.28
[Docker] 도커 명령어 모음  (0) 2020.02.03