본문 바로가기
기술 단어장/Docker

[네트워크] Docker에 관한 호기심

by MFDO 2021. 7. 6.

개인적으로 공부한 내용이므로 틀린 내용이 존재할 수 있습니다.

오류내용은 댓글을 통해 알려주시길 바랍니다.

 

 

 

이번 내용은 스스로가 도커를 공부하며

궁금한 내용을 모아 적었기 때문에 내용이 순차적이지 않음.

 

 

 

운영체제 구조 간략화

root : 관리자 모든걸 다 깔 수 있다.
root, userA, userB는 모두 서로 접근 불가능함
 => 그럼에도 userA,B 모두에게 아파치가 설치 불가능. root에 저장하고 A,B에 공유하는 방식
 => APM을 여러개 만들어서 하나의 user에게 능동적으로 부여하고 싶다~

 

 

 

 

Q. VM과 Docker의 차이는 무엇일까?

VM과 Docker의 가장 특징적인 차이는 '가상화'로 둔다.

  • VM :
     - 각각에게 OS를 할당(메모리, CPU 등)하여 동작하도록 함.
     - 자신에게 할당된 공간의 사양만큼을 사용할 수 있어 할당 시 "최소사양"을 고려해야함.
     ex) App1이 메모리 2GB,  App2가 메모리 1GB, App3가 메모리 4GB를 사용 시 각각 설정함.  
     => App1, 2의 요구사양이 변경돼 각 1GB, 3GB가 된다면 App1은 공간이 낭비되고 App2는 부족
     => 공간 재할당이 요구됨

  • Docker : 
     - 모든 동작이 공통된 리소스를 이용
     - 개별적 할당의 불필요성
    ex) App1, App2, App3가 다 다른 메모리 사양을 요구하여도 통합하여 7GB를 요구하는 사양만 존재하면 됨
    => App1, App2의 요구사양이 바뀌어도 능동적인 대처가 가능
    => 공간을 재할당 하지 않아도 됨

 

 

 

Q. 컨테이너와 컨테이너 이미지의 차이는 무엇일까?

  • 컨테이너
    - 하나의 Application 프로세스로 각각 분리(Isolate)되어 있음
    - 도커호스트 : 리눅스 커널에 도커를 설치해 데몬이 동작되는 곳 
    - 여러개의 컨테이너에 각각의 H/W를 할당하고, 하나의 커널에서 동작됨

  • 컨테이너 이미지
    - 컨테이너 구성 파일 시스템, 어플리케이션 설정 레이어를 하나로 합친 것
    - 컨테이너를 생성하는 템플릿 역할
    - Base Image Layer : 프로세스 구동을 위한 기본 베이스 설정
    - Source Image Layer : 구동할 프로그램 소스들

컨테이너 이미지가 하드디스크에 레이어별로 파일형태로 저장되어 있으면,
컨테이너는 메모리에 하나의 프로세스로 동작하게 된다.
따라서, 컨테이너 이미지는 저장된 '파일'이고, 컨테이너는 동작하는 프로세스이다.

 

 

 

Q. 서버에서의 도커 활용법은 무엇일까?

도커는 서버에서 많이 쓴다고 하던데?
그냥 가상머신 처럼 보이는데 왜 서버에서 많이 쓴다고 하지?

 => 서버에서 배포를 위해서 사용!

해당 내용은 이해를 위해 예시를 든 것일 뿐 실제 구현은 모두 다를 것이다.

  1. 개발자가 git에 자신이 작성한 코드를 commit한다.
  2. 코드 테스트 서버에서 올바르게 코드가 작동하는 지에 대한 테스트를 진행한다.
  3. 코드 테스트 통과 후 테스트 서버에서 실제 테스트를 진행해본다.
  4. 테스트 서버에서 각각 실제 테스트를 진행해본다.
    이 때 도커를 사용하는데, 각 테스트 서버를 만드는게 번거로운 이유도 있지만,
    테스트 서버를 통해 성공적으로 수행한 결과를 컨테이너째로 그대로 옮겨
    배포서버에 적용할 수 있다는 장점을 이용하기 위함이 크다.

 

 

Q. 도커는 가상환경이라 서로 연결이 불가능한데 어떻게 통신할까?

위의 운영체제 간략화에서 말하듯 각 유저간은 서로 통신이 불가능 하였다.

그런데 가상환경의 도커는 서로간 통신을 진행한다. (한 커널에 여러 컨테이너)

 

도커는 이 문제를 해결하기 위해 폴더와 호스트의 파일을 연결해서 통신한다.

=> 바로가기 기능과 유사

 

ex)

Docker에서 /home/test/a.cpp 파일을 변경하면,
Host에서 /User/MFDOO/Desktop/jinjoo/a.cpp 파일이 변경이 되길 원하는 상황

=> /home/test 폴더와 /User/aoikazto/Desktop/jinjoo 폴더를 링크하여 통신한다.

 

<Docker Desktop을 이용한 실습 부분 생략>

댓글