졸업한 선배에게 권유받은 공부키워드, Docker(도커)
ㄴㅔ! 하할게요!
Docker?
Vitual Manchine의 개념을 알고있다면 더 쉽게 이해할 수 있는 프로그램입니다. Docker는 운영체제의 영향을 받지않기 위해 사용되며, Vitual Machine과 같은 효과를 냅니다.
운영체제의 영향을 받지 않는다는 건 어떤 의미를 갖는 거야?
내가 가진 프로그램이 내 컴퓨터에서만 작동되면 그만인 걸까요? 개발자가 나만을 위한 프로그램을 만든다면 그것을 직업으로 가질 수 있는 걸까요? 운영체제를 고려해야할 상황이라는 건 무엇일까요?
여러분이 어떠한 '웹'을 만들었다고 가정합시다. 이 웹은 서버에 올리지 않는 이상, 해당 웹은 내가 가진 로컬저장소(개인컴퓨터)에만 작동합니다. 하지만 개발의 끝은 항상 배포입니다. 서버에 올림으로써 유저들에게 공유되고 이용할 수 있도록 해야합니다. 그 유저가 리눅스를 쓰든 윈도우를 쓰든 웹은 정상작동해야합니다. 이것이 바로 운영체제를 고려해야할 상황이 되는 것이구요.
또한 우리는 이 웹을 배포할 때 보통 클라우드서비스(AWS)를 이용하게 됩니다. 이 '호스팅 서비스'는 나의 로컬저장소의 개발환경과 다르게 설정하여 새로운 서버를 만들도록 하는 것이죠. 내가 만들 서버에 적용될 운영체제에 따라 초기 설정을 할 것은 한 두 가지가 아닙니다. 그런데 이 웹이든 무엇이든 사용하게될 서버가 많아진다면 서버를 증설해야할 것이고, 새로 증설할 때마다 이 운영체제의 설정이 여간 번거로운 작업이 아닙니다.
그럼 Docker가 하는 일은 이 운영체제의 영향을 무시하게 해준다는 거야? 어떻게?
맞습니다. 다시 소개하면 도커는 서버를 배포하고 패키징하는데 있어서 운영체제에 따른 문제를 보완해주는 오픈소스 소프트웨어입니다. 운영체제가 윈도우건 리눅스든 간에, 즉 나의 리눅스체제의 로컬저장소로부터 코드를 꺼냈으나 이것이 올라갈 서버는 윈도우체제로 환경이 다를지언정 그에 따른 구애를 받지 않아도 되게끔 해주겠죠.
그리고 그러한 보완은 도커가 가진 '컨테이너 개념'의 이용방식 덕분입니다.
이 컨테이너들은 다른 환경을 동일하게끔 만들어줍니다. 이용할 각 개발환경에 Docker를 설치하고, docker파일을 생성하고, docker image를 담고, docker Container안에서 실행하면 끝입니다.
더 자세히 보겠습니다.
1. 개발환경에 Docker를 설치한다 |
그럼 서버를 관리하는 방법은 Docker뿐이야?
그건 아닙니다. tmus, chef, puppet, ansible 등의 방법도 존재합니다.
그러나 docker가 가진 편리함이 더 도드라지기 때문에 최근 몇년간 개발자들에게 도커가 필수프로그램은 아니어도 필수개념으로 여겨져옵니다.
docker의 장점은 다음과 같습니다.
- docker 컨테이너들은 각각 분리되어 있으며 독립적이다
- 이 특징을 통해 한 서버에 여러 개의 컨테이너(서버)를 가질 수 있다
- 예를 들어, 한 곳에는 파이썬 서버를 만들고 다른 곳에서는 자바&node.js를 가진 서버를 만들어 모듈식 관리가 가능해진다 - 매번 새로운 서비스를 만들 때마다 새로운 서버를 사고 설정할 필요가 없다
-필요로 할 때마다 docker를 통해 기존 환경을 복제하고 생성하여 사용하면 된다
즉 각 컨테이너를 다른 환경으로 설정하는 것 뿐만아니라 분리 및 독립되어있으니 효율이 좋은 것이죠.
virtual machine(운영체제를 또 깐다는 건 무거운 일임)를 이용하는 것보다 가볍구요.
이를 알고보면 Docker의 로고에서 왜 고래가 등에 박스들을 얹고 있는지 이해할 수 있죠.
왜 고래인진 모름
개념은 알았으니 설치를 하러 가겠습니다 !~!
*참고영상