728x90

요즘 도커가 대세다... 라고 말하기도 애매하게 도커가 대세가 된지는 좀 된거 같다.

도커는 여러가지의 장점과 여러가지의 단점을 가지고 있어서 무조건 좋다고 말하기는 애매한 것 같다.

일단 도커가 뭔지, 어떤 원리로 동작하는지 부터 알아보자.

 

컨테이너 기반 가상화 플랫폼

항상 설명에 들어가는 키워드를 유심히 볼 필요가 있다.

컨테이너라는 말이 있고 가상화라는 말이 있다.

 

도커를 처음 쓰게되면 항상 느끼는건 vm이랑 유사하다는 것이다.

그리고 또 다르게 느끼는 것은 vm이랑 다르다는 것이다.

말장난 같지만 그 이유에 대해서 알려드리도록 하겠다.

 

기존에는 버추얼 머신(vm)을 사용했었다... 그런데?

학생 입장에서 개발할때는 모든 환경을 자신에게 맞춘다.

사용하는 환경도 내 컴퓨터, 사용하는 버전도 내 마음대로, 사용하는 os도 내 컴퓨터다.

하지만 실제로 개발하는 입장에서는 "배포"를 염두하지 않을 수 없다.

내가 만든 어플의 고객의 컴퓨터가 과연 윈도우일까?

만약 맥이나 리눅스라면 어떻게 될까?

 

그래서 일반적으로 vm을 사용해서 운영체제를 현재 os위에 다시 설치한다.

즉 가상환경을 만들어서 테스트하고 그 때와 똑같은 환경을 시스템엔지니어가 가서 구축해준다.

근데... 그렇게 되면 좋긴 할텐데 여기도 커다란 문제점이 있다.

 

그래 설사 운영체제를 동일하게 했다면 문제가 없을까?

가량 우리는 mysql5를 쓰는데 상대는 이미  4가 깔려있네?

설사 버전도 같다고 치자. db를 봤더니 우리가 쓰는 이름이랑 똑같네?

 

배포를 해볼려고 노력해 본 사람이라면 알겠지만 실제로 배포하는 일은 쉽지가 않다는 것이다.

변수들도 너무 많고 예외 요소도 너무 많다.

운영체제가 같다고(버전이나 종류와 상관없이)해서 모든 상황이 같을거라는건 너무 낙관적이다.

 

게다가 무엇보다 vm은 배포와는 사실 별 상관이 없다.

그 이유는 운영체제 위에 또 운영체제를 사용하다보니 너무 느리다는 문제점이 있다.

그래서 남의 컴퓨터위에 vm을 깔겠다고 하면 미친놈 소리듣는다.

물론 미친놈 소리를 듣는다고 억울해할 필요없다. 미친놈 맞으니까.

 

그래서 등장한 것이 바로 docker다

도커는 vm과 자주 비교되지만 필자 생각에 둘의 용도는 너무 다르다.

도커는 배포(deploy)에 더 초점이 맞춰져 있고 vm은 환경 테스팅에 더 초점이 맞춰져 있다.

도커의 특징을 말해보도록하자.

 

docker는 가볍다. 그리고 빠르다.

즉 docker는 vm에 비해서 가볍고 빠르다는 장점이 있다.

대신에 docker는 상태를 정밀하게 알기는 어렵고 자유롭게 사용하기에는 제약이 많다.

 

그러나 막상 사용해보면 docker의 장점이 훨씬 부각 된다.

그 이유는 가볍고 빠른것도 있지만 "어느 환경이나 동일하게 작용하기 때문이다"

여기서 동일하게 동작한다는건 완전 밑단까지 같이 동작한다는 이야기가 아니라

사용하는 입장에서 동등하게 사용할 수 있다는 이야기 이다.

 

도대체 어떻게 이런게 가능하냐면 위의 그림을 보면 알 수 있다.

기존의 vm의 경우에는 Host OS(우리가 사용하는 OS)위에 새로운 Guest OS를 설치를 했다.

그러다보니 OS위에 OS가 있는 모양새이고 이는 필연적으로 속도 저하로 이어진다.

 

하지만 도커는 OS위에 OS를 설치하는게 아니라 현재 OS에 없는 것만 추가적으로 받아온다.

가령 현재 Host OS가 Redhat인데 Guest OS를 Ubuntu를 사용한다고 가정하자.

vm은 redhat위에 ubuntu를 설치하게된다.

근데 도커는 redhat에 없는 부분만, 즉 ubuntu와 redhat이 공유하는 부분은 냅두고 나머지만 재 설치한다.

이게 가능한 이유는 맥과 리눅스는 모두 unix likes운영체제이기 때문이다.

 

그래서 윈도우에서 사용하는 docker는 리눅스 자체를 vm마냥 올리기 때문에 성능이 안좋다.

그렇다고 윈도우에서 의미가 없는건 아니고 윈도우에서도 리눅스와 똑같은 환경으로 사용할 수 있다는 장점이 있다.

그래서 오히려 윈도우에서 코딩할 수록 docker를 사용하는것이 좋다고 생각한다.

하지만 docker를 사용한다는 의미는 단순히 테스팅을 한다는게 아니다.

오히려 테스팅을 할거면 vm이 훨씬 낫다.

도커는 배포를 위해서 사용하는 것이므로 테스트를 하기에 적합하지는 않다고 생각한다.

 

아 모르겠고 일단 사용해 볼래

그렇다 일단 사용해보자.

가장 먼저 해볼것은 이미지를 다운로드하고 사용해 보는 것이다.

이미지라는 것은 도커에서 사용하는 단위중 하나이며 결과적으로 도커 컨테이너를 실행시켜주는 녀석이다.

이 녀석은 도커 컨테이너를 돌리기위한 설정값을 가지고 있다.

 

우리는 도커 이미지를 만들게 될건데 만들기 전에 먼저 남이 만든걸 활용하는 법을 배워볼 것이다.

 

https://hub.docker.com

 

위 경로는 도커 이미지를 모아둔 곳이다.

npm이나 mvn repository 같은 저장소이다.

 

여기서 우리가 사용할 컨테이너를 확인해서 볼 수 있다.

 

이 파일들이 어떤 Dockerfile로 작성되있는지도 확인할 수 있다.

아직 이를 알려준 적이 없으므로 이에 대해서는 추후에 설명하겠다.

 

그럼 이녀석들을 어떻게 사용하냐고?

일단 도커를 설치하고 실행해야한다.

Docker 설치 - Mac편

Docker 설치 - Window편

 

위의 url을 따라서 설치를 한다.

 

docker pull <사용할 이미지>:<버전-생략가능>

먼저 ubuntu를 설치해보자.

이미지를 설치하는 방법은 pull을 사용한다. 버전은 생략이 가능하다.

생략하면 최근 버전을 설치하게 된다.

 

docker run <사용할 이미지>:<버전-생략가능>

설치한 이미지를 사용하는 법은 docker run을 사용하는 것이다.

그러면 놀랍게도... 아무 일도 일어나지 않는다.

사실 아무일도 일어나지 않은 건 아니고 실행되자 마자 종료된것일 뿐이다.

그 이유는 아무 명령을 내리지 않았기 때문이다.

 

docker run --rm -it ubuntu /bin/bash

위와 같이 명령어를 사용하면 운영체제를 사용해 볼 수 있다.

it는 상호작용하는 터미널을 여는 옵션이고 rm은 사용 종료후 컨테이너를 삭제한다는 의미다.

간단히 사용할것이라면 rm옵션을 붙혀주는게 좋다.

 

이 까지는 간단히 사용해 봤고 다음에 다음 장에서 더 자세히 알아보도록 하자.

'Software > Docker' 카테고리의 다른 글

Docker 설치 - Window편  (0) 2018.05.07
Docker 설치 - Mac편  (0) 2018.01.30

+ Recent posts