• 로그인
  • 장바구니에 상품이 없습니다.

도커가 바꾼 개발바닥

 

 

 

 

도커와 컨테이너 이전에 살던 개발자들은 원시인과 다를 바가 없었습니다.

1. 어디 새로 취업하면 개발환경셋팅 맞추느라 하루종일 삽질하고

2. 업데이트 하면 항상 뭔가 망가져서 업데이트 전에 열심히 기도하고

3. 내가 코드짠걸 서버컴퓨터로 옮기기만 하면 컴퓨터가 폭발하기 때문에 고사도 지냈습니다.

 

하지만 도커와 컨테이너가 나오고 나서 이 짓거리가 거의 없어졌습니다.

그래서 개발자들이 가장 많이 쓰는 툴 1위를 매년 Docker가 차지하고 있고

코딩책을 보려고 해도 딥러닝 모델을 다운받아서 돌릴려고해도

도커명령어부터 보이는 경우가 많습니다.

 

 

 

 

Docker는 "리눅스 컨테이너를 기반으로 만든, OS 레벨 가상화 기술"인데

이따구로 설명하면 다 뒤로가기 누르니까 쉽게 이해해보도록 합시다.

 

 

 

 

 

치킨집

 

여러분이 코딩하다 망해가지고 서울에 치킨집을 차렸습니다.

근데 매우 잘되어서 부산에 분점을 냈습니다.

그럼 부산점은 어떻게 운영할 것입니까?

 

 

 

 

가장 쉽게 할 수 있는게 

내 레시피만 보내서 부산에서 그대로 따라하라고 하면 되는 것인데

그러면 또 인생이 망합니다.

지점마다 서로 주방시설, 도구 재료가 다르면

조리 과정에서 문제도 많이 생길거고 맛도 살짝 달라질 수 밖에 없으니까요.

 

 

 

 

제대로 장사하려면

여러분이 서울에서 쓰던 재료랑 레시피랑 이런걸 전부 밀키트로 준비해서 

그걸 부산으로 보내고 부산에서는 그냥 그걸 데우는 식으로만 운영하면 됩니다.

큰 프랜차이즈 치킨집들은 전부 이런 식으로 운영합니다.

 

 

 

 

 

 

개발할 때도 똑같음

 

개발할 때도 똑같습니다.

- 팀원끼리 협업할 때

- AWS에 있는 서버 컴퓨터에다가 내 코드를 배포할 때

같은 코드를 각각 다른 컴퓨터에서 실행해야 하는 경우들이 생깁니다.

하지만 내 컴퓨터에서 코드 잘돌아간다고 그걸 다른 컴퓨터에 대충 보내서 실행하면 의도대로 동작하지 않는 경우가 많습니다.

컴퓨터마다 OS도 다르고 설치된 기본프로그램들 버전도 다르고 그러니까요.

그럼 어떻게하게요? 

 

 

 

 

여러분들이 쓰던 OS랑 프로그램이랑 그런걸 컴퓨터마다 전부 똑같이 준비하면 됩니다.

그 다음에 코드를 그 위에서 실행하면 걱정할 필요가 없는데

이러기 위해서 옛날엔 VM이란걸 썼습니다.

어떤 OS위에 다른 OS를 설치하는 건데 굉장히 무겁고 성능도 좋지 않기 때문에 

요즘은 그거 대신 훨씬 가벼운 Docker와 컨테이너를 씁니다.

 

 

 

 

 

Docker는 

 

Docker를 쓰면 코드 밀키트같은걸 만들 수 있습니다.

 

 

 

거기다가 OS, 필요한 프로그램, 코드 이런걸 전부 담을 수 있고

Docker를 쓰면 그 밀키트를 버튼 딸깍으로 쉽게 실행해줄 수도 있습니다.

 

그래서 Docker는 쉽게 말하면

1. 코드 밀키트를 만들고

2. 코드 밀키트를 실행해주는 간단한 프로그램일 뿐입니다.

근데 VM 이런 것 보다 매우 가볍게 동작합니다.

 

 

 

 

 

 

어떻게 하냐면

 

말로만 씨부리면 이해가 어렵기 때문에 밀키트가 뭔지 어떻게 쓰는지 살짝 맛을 봅시다.

밀키트를 어떻게 만드냐면 파일이 하나 필요합니다.

 

 

 

Dockerfile 이라는 파일을 하나 만들고

- 무슨 OS를 설치할 것인지

- 어떤 프로그램이랑 라이브러리랑 SDK를 설치할건지

- 어떤 코드를 어떻게 실행할건지

쭉 적을 수 있습니다.

 

그 다음에 docker build 어쩌구 명령어를 입력하면 밀키트로 포장이 되고

그 다음에 docker run 어쩌구 명령어를 입력하면 밀키트를 실행할 수 있습니다.

밀키트를 실행하면 컨테이너라고 부르는 가상 컴퓨터가 하나 만들어지고

그 안에서 여러분들이 설정해둔 OS와 작업환경에서 코드가 실행이 됩니다.

이게 Docker 사용법 끝입니다.

 

 

 

 

 

 

그래서 세상이 변함

 

원래 군대에서도 몸이 편하면 가혹행위가 많습니다.

Docker 덕분에 개발과정이 편해지다보니까

개발자들이 프로그램을 가지고 이상한 짓을 하기 시작했습니다.

 

 

 

 

1. 밀키트 덕분에 배포가 쉬워지니까 요즘은 어떻게 서버를 개발하냐면

이전엔 서버기능을 하나의 프로그램 안에 다 쑤셔넣었는데

지금은 잘게 쪼개서 여러 프로그램으로 나누고 그걸 따로따로 배포해서 운영합니다.

그러면 여러명이서 분업하기도 좋고 기능 업데이트도 빨라진다는 장점이 있습니다.

이걸 마이크로서비스 아키텍쳐라고 하는데 요즘 백엔드 밥줄이 되었습니다.

 

 

2. 프로그램을 빌드하고 테스트하고 배포하는 작업이

도커 덕분에 초딩도 할 수 있을 정도로 쉬워졌기 때문에

원클릭 딸깍 자동 배포같은걸 도입하기 시작하는 곳들이 많아졌습니다.

 

 

3. 그리고 도커쓰면 원하는 프로그램을 원하는 버전으로 원하는 OS위에 쉽게 설치하고 깔끔하게 삭제도 할 수 있어서 

내가 만든 프로그램을 이거저거 버전별로 테스트해보기도 쉬워졌고

내 컴퓨터에 뭐 설치하기 싫어하는 결벽증 환자도 증가했고

덕분에 강의나 책같은거 만들기도 편해졌습니다.

 

 

 

 

 

 

Docker의 실체

 

Docker라는 프로그램의 실체는 별거 아닙니다.

리눅스 자체에 원래 가벼운 가상화기술같은게 있었습니다.

 

 

 

가상 파일시스템을 만들어주는 union filesystem, namespace

원하는 곳에 컴퓨터 자원을 할당해주는 cgroups 라는 기능을 쓰면

리눅스 컴퓨터 안에 가상 컴퓨터를 만들 수 있습니다.

그걸 쓸 수 있게 도와주는 프로그램도 누가 만들어놓은게 있습니다. (runc, containerd)

근데 그것들을 7살도 쓸 수 있게 짜깁기해서 만들어놓은게 Docker라는 프로그램일 뿐입니다.

거기에 빌드, push, 모니터링 등 편의기능도 추가했을 뿐이고요.

 

그래서 Docker대신 쓸 수 있는 프로그램도 있고 (podman, cri-o)

Docker 없이 직접 컨테이너(가상 컴퓨터)를 띄우는 것도 가능합니다.

 

 

 

 

 

 

단점

 

장점이 있으면 단점이 있기 마련인데

1. 컨테이너 침입과 같은 새로운 보안이슈를 챙겨야함

2. 컨테이너를 많이 사용하면 관리 시간과 서버비용이 증가함 

3. 안정적인 DB같은거 띄울 땐 컨테이너로 만드는게 딱히 이점이 없음

4. 컨테이너간 완전한 격리를 원하면 컨테이너 말고 가벼운 VM쓰는게 나을 수 있음

이런게 있습니다.

 

 

 

 

 

 

경고

 

그래서 코딩 처음하는 분들도 Docker로 환경셋팅해놓고 코딩 입문하고 그런 분들이 있는데

요즘은 학원들에서 그렇게 시키는거 같던데

나쁜 방법은 아닐 수 있습니다.

 

하지만 그 짓을 비유하자면

요리를 배우고 싶다면서 "누가 만들어놓은 주방에 치킨 밀키트만 가져와서 레시피대로 튀겨보기"

하는거랑 비슷합니다.

 

평생 치킨 밀키트 튀기기만 하다가 죽을거면 그래도 아무 문제가 없는데

나중에 나만의 치킨요리를 만들어서

분점도 내고 확장도 하고 그러고 싶으면

밀키트부터 쓰고 그런게 아니라 직접 처음부터 치킨을 만들어보는 경험도 중요합니다.

 

코딩 입문할때도 마찬가지로

나중에 나만의 이미지와 컨테이너를 자신있게 만들고 싶으면

도커없이 내 컴퓨터에 직접 설치하고 셋팅하고 노가다해보고 그런 과정이 매우 중요합니다.

그래야 나중에 Dockerfile도 맘대로 작성해볼 수 있게 됩니다.

 

그래서 알아서 잘하는 사람을 만들기 위해

이번 강의도 혼자 알아서 잘할 수 있는 방법을 주로 집어넣었고

Docker만 배우면 아무 쓸모가 없으니까 실제 웹서버를 만드는 상황에서 Docker를 사용해봅시다. 

뒤에 가서 docker compose와 orchestration 툴 사용법까지 좀 알아보도록 합시다.

 

 

 

 

 

SEE ALL Add a note
YOU
Add your Comment

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠