종종
47
2019-10-01 18:31:28
6
1867

도커에 대해서 잘 아시는분 계신가요? ㅠㅠ


이제 막 프로그래밍을 배우고 있는 병아리입니다 

어떻게든 풀스택으로 홈페이지 하나 만들어내야 해서

이것저것 왔다갔다 하면서 배우다 보니 

개념들이 전부 둥둥 떠다닙니다 흑흑


일단 도커를 잘 알고 개발단계부터 적용해두면 

추후에 정말 편할거 같은데요 

영 개념이 안서네요 

이게 가상머신도 아닌게..

그런데 또 가상머신처럼 돌아가는거 같기도 하고 ..

 

질문은 이겁니다

프론트엔드 프레임워크 - 자바스크립트 리액트

백엔드 프레임워크 - 파이썬 장고

데이터베이스 - mariadb


이런 친구들을 사용해서 웹을 만들어 보려는데요 

도커에서 개발을 한다고 하면 

컨테이너 1개에 우분투 설치하고 그위에 리액트, 장고, db클라이언트 다 설치해서 

하나의 컴퓨터 환경인것처럼 개발이 가능할까요? 

가상머신(vmware같은?)에서는 이렇게 개발이 가능할거같은데말이죠..


혹은 장고-컨테이너하나, 리액트-컨테이너하나 이런식으로 

각각 컨테이너에 분리해서 설치한뒤

각각 엮어서 최종적으로 하나의 개발환경을 만드는 건가요? 


현업에서는 어떻게 활용하고 있는지 궁금합니다! ㅠ

1
  • 답변 6

  • ISA
    5k
    2019-10-01 18:52:17

    저도 궁금하네요

  • 바히
    617
    2019-10-01 19:07:43

    저도 도커는 공부중이라 자세히는 모르지만

    개념적으로는 VM과 도커가 비슷한데 커널(OS)를 도커 같은경우에는 컨테이너에서 서버 OS커널을 공유해서 사용하기 때문에 이미지에 OS가 설치되지 않아 더 빠르다고 알고 있습니다.

  • Jaccobby
    141
    2019-10-01 22:52:53 작성 2019-10-01 22:54:24 수정됨
    아래 오실 고수분들이 잘 설명해주실 것 같으니,

    짧게 말하자면...

    container orchestration를 해주는 kubernetes와 같은 시스템을 사용합니다. (이하 쿠버)

    쿠버 위에서는 container가 기본 빌딩 블럭 중에 하나입니다.

    저희 회사 기준에서, 말씀하신 것 처럼, 백엔드, 프론트, 디비 따로 분리해서 띄웁니다. 사실 DB는 관리형 서비스를 사용합니다.

    개발 환경에서는 로컬에서 별 다른 설정을 하지 않을 경우 배포되어있는 개발서버에 게이트웨이를 통해 찌를 수 있게 설정해두고, 개발 편의성을 위해서 어디든 찌를 수 있는 설정셋?같은 것을 관리합니다.

    프러덕션 환경과 개발환경의 분리는 설정만 갈아서 끼우는 방식으로 관리합니다. 
  • charlatan
    4k
    2019-10-01 22:53:06

    게스트 OS(예를 들어 리눅스)를 설치하고 그 위에 가상환경을 만드는 것이 VMWare같은 것이고... 도커는 게스트 OS 없이 "컨테이너"라고 하는 것을 도커 위에 올려서 가상환경을 만드는 형태입니다.

    도커를 개발에 활용한다고 해도 어차피 코딩은 지금처럼 호스트 OS에서 하고(예를 들어 윈도우에 설치된 vscode) 다만 그것을 도커 컨테이너(리눅스)에서 실행하는 식이 되는 것이죠.

    컨테이너와 호스트OS는 디렉토리가 공유되니까  결국 로컬 개발환경과 큰 차이는 없게 되고...  DB가 실행되는 컨테이너, 웹서버가 실행되는 컨테이너 등등, 각각의 컨테이너들을 독립적으로 실행할 수 있으니... 호스트OS에 전부 설치해서 개발환경셋팅을 할 필요가 없다는 장점이 있는데...

    사실 개발자 입장에선 그냥 로컬에서 전부 해도 크게 상관없겠다 싶은데... 도커를 개발에 활용할 수 있는 더 효율적이고 적합한  상황이 있긴 하겠죠. 잘 쓰면 유용한 것만은 틀림 없습니다.

    이런 여러 컨테이너들을 한번에 올리고 내리는 것이 docker-compose고요.

     

  • 타키투스
    886
    2019-10-02 09:36:20

    도커하고 가상화하고는 다른 개념 입니다.


    도커는 커널에서 제공해주는건데, 커널의 Namespace, cgroup 기능으로 작동합니다. 프로세스 격리모드로 해서 또다른 공간을 제공해준다고 보시면 됩니다. namespace 는 자원에대한 격리를 가능하게 해줌으로 이걸 이용해서 컨테이너라는 격리공간으로 만들어내는 거죠..


    그래서 도커를 이용해 컨테이너를 만들면 네트웤, 파일시스템 등이 격리되어서 동작하게 됨으로 인해서 마치 또 하나의 운영체제가 있는것처럼 느끼게 됩니다. 


    컨테이너는 아주 작은 단위로 동작이 가능해서 대부분 한 단위의 기능만을 위해서 만들어집니다. 예를들어 Nginx 를 이용한 웹서버가 필요하다거나 장고만을 위한 컨테이너를 만드는게 대표적입니다. 


    그런데, 이런 컨테이너들은 작은 단위로 한 개의 기능만 작동되도록 하고 있는데 이것을 여러개 묶어서 동작시키면 하나의 서비스가 만들어 질거예요. 거기다, 이 컨테이너들에 대한 상태도 정검해서 잘못된거는 지우고 다시 생성, 모니터링도 하고 등등 추가적인 기능을 붙여서 여러 컨테이너들을 관리할 수 있도록 하면 운영하기도 쉬울거란 말이죠. 이것이 바로 도커 오체스트레이션 이라고 불리는 건데 도커 스웜, 쿠버네티스 입니다.


    쿠버네티스의 경우에 도커들의 묵음을 pod 라는 기본원자 단위로 생성하고 이걸 기반으로 '서비스' 라는 것을 만들어지고 운영하게 됩니다. pod 에 대한 상태 체크, 리플리카 셋, 디플로이먼트, 모니터링 등등을 대쉬보드를 통해서 살펴볼 수 있구요.



  • StartDV
    133
    2019-10-03 19:09:33

    도커에 관한 설명은 윗분들께서 잘 해주셔서 더 설명드릴게 없네요.


    질문하신 내용중 "프론트,백,디비를 하나에 컨테이너에서 개발가능 한가" 라는 질문의 답은 아마 가능은 한 것으로 알고있습니다.

    실제로 제가 도커에 관해 잘 모를때 단순한 가상머신으로 이해하고 질문내용처럼 그냥 싹다 컨테이너에 올려서 개발한적이 있거든요.  그때 디비까지는 연동하질 안하서 디비까지 하나에 컨테이너에 올린적은 없으나 가능할 것으로 보입니다.


    현업에서는 제가 웹쪽 개발자는 아니여서 웹쪽은 잘 모르겠으나 보통 여러 컨테이너로 나누어서 배포하는것으로 알고있습니다.
  • 로그인을 하시면 답변을 등록할 수 있습니다.