도커,, 정말 지겹게도 많이 들어본 단어인데 아직도 정확히 뭔지 모른다.
궁금증이 극에 달할 때 마다 구글링을 해서 찾아봤었고, 아 이런거구나 싶었다가도 금방 다시 원상태로 복귀.
정확하게 무엇인지 이해를 못했으니..
오늘 또 궁금증이 극에 달하여 구글링을 시작했고, 이왕 이렇게 된거 포스팅을 정리하며 간단하게 정리해보고자 한다.
부디 이번에는 단기기억에서 장기기억으로 넘어갈 수 있도록 해보겠다.
장황하게 쓰지 않고 짧고 간단하게.
가능하면 도커 이해를 위한 미니프로젝트도 해보고 싶다.
왜냐면 나란 사람은 실제 코딩을 해봐야 와닿는 사람이기 때문에.. (부딪혀보고 보는 편)
일단, 아래 글을 정독하며 이해해보기로 한다.
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
글쓴이는 실제 아래와 같은 상황에서 어려움을 겪어다고 한다.
- Redhat Enterprise Linux 4에 Oracle 10g을 설치해야 하는데 설치가 잘 되지 않았다.
- 회사에서 사용하는 리눅스와 오라클 버전은 딱 정해져있다.
- 버전을 업데이트 하는 건 정말 어렵고 Risky함
- 서버 세팅은 정말 어렵
- 하나의 서버에 여러개의 프로그램을 설치하는 것은 어렵다.
- 라이브러리의 버전이 다르거나 동일한 포트를 사용하는 문제가 있기 때문에
- 서버 환경은 계속 바뀌고 있음 AWS -> Azure 혹은 CentOS -> Ubuntu
- 마이크로서비스 아키텍쳐로 프로그램이 많아져 서버 관리가 어렵다. (서버가 수백, 수천대)
이런 상황에 도커가 등장!
서버 관리 방식이 완전히 바뀌게 된다.
도커는 그래서 무엇인가 ?
- 컨테이너 기반의 오픈소스 가상화 플랫폼
- ^^ ㅋㅋㅋㅋㅋ 이게 뭔말인가
- 실생활의 컨테이너
- 네모난 화물 수송용 박스로 옷, 신발 등의 다양한 화물을 넣어서 배로 쉽게 옮기는 것
- 서버에서의 컨테이너
- 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다.
- PC, AWS, Azure, Google cloud등 어디에서든 실행가능
- 컨테이너
- 격리된 공간에서 프로세스가 동작하는 기술로 가상화 기술의 하나 (프로세스 격리 방법 or 격리된 공간)
- 기존의 가상화 기술과 다른 점은?
- 전체 OS를 가상화 한 것이 아님 (리눅스에서 윈도우를 돌림)
- 호스트 OS 위에 게스트 OS 전체를 가상화하는 방식 (구방식) -> 무겁&느림
- 게스트 OS 정도만 필요라 하는 거기 때문에 성능이 기존 가상화보다 성능이 향상됨
- 전체 OS를 가상화 한 것이 아님 (리눅스에서 윈도우를 돌림)
- 기존의 가상화 기술과 다른 점은?
- 하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행 (가벼운 VM느낌)
- 컨테이너를 띄워서 할 수 있는 것은 ?
- 실행중인 컨테이너에 접속해서 apt-get or yum으로 패키지 설치 가능
- 여러개의 프로세스를 백그라운드로 실행할 수 있음
- CPU나 메모리 사용량 제한 가능
- 호스트와 특정 포트와 연결하거나 호스트의 특정 디렉토리를 내부 디렉토리인 것처럼 사용 가능
- 새로운 컨테이너를 하나 만드는 데는 1-2초로 가상 머신과 비교할 수가 없음
- 격리된 공간에서 프로세스가 동작하는 기술로 가상화 기술의 하나 (프로세스 격리 방법 or 격리된 공간)
- 이미지
- 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것 (Immutable - 불변)
- 컨테이너 = 이미지를 실행한 상태
- 추가되고 변하는 값은 컨테이너에 저장
- 같은 이미지에서 여러개의 컨테이너를 생성할 수 있음
- 컨테이너의 상태가 변하거나 삭제되도 이미지는 변하지 않고 그대로 남아 있음
- 이미지는 컨테이너를 실행하기 위해 필요한 모~~든 정보를 가지고 있기 때문에 의존성 파일을 컴파일하고 이것저것 설치하지 않아도 된다.
- 그냥 이미지를 다운받고 컨테이너를 생성하면 된다.
- 이미지 저장 방식
- 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 도커 이미지는 용량이 굉장히 크다.
- 기존 이미지에 파일 하나를 추가 함으로써 전체를 다시 다운받는다면 매우 비효율적
- 그래서 레이어라는 개념을 사용
- 유니온 파일 시스템을 이용하여 어러개의 레이어를 하나의 파일시스템으로 사용함
- 읽기 전용 레이어로 구성되고 파일이 추가 되거나 수정되면 새로운 레이어가 생성됨
- 예
- ubuntu 이미지가 A + B + C의 집합이라면, ubuntu 이미지를 베이스로 만든 nginx 이미지는 A + B + C + nginx가 됩니다.
- 예
- 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 도커 이미지는 용량이 굉장히 크다.
- Dockerfile
- 도커는 이미지를 만들기 위해 Dockerfile 이라는 파일에 DSL 언어를 사용하여 이미지 생성 과정을 적음
- 서버에 어떤 프로그램을 설치하려고 이것저것 의존성 패키지를 설치하고 설정 파일을 만들었던 것을 이제는 Dockerfile로 관리할 수 있다.
vertx/vertx3 debian version
FROM subicura/vertx3:3.3.1
MAINTAINER chungsub.kim@purpleworks.co.kr
ADD build/distributions/app-3.3.1.tar /
ADD config.template.json /app-3.3.1/bin/config.json
ADD docker/script/start.sh /usr/local/bin/
RUN ln -s /usr/local/bin/start.sh /start.sh
EXPOSE 8080
EXPOSE 7000
CMD ["start.sh"]
'TIL (Today I Learned)' 카테고리의 다른 글
Redis (0) | 2021.12.08 |
---|---|
Docker mac에 설치해서 컨테이너 실행해보기 / Docker 문법 (0) | 2021.08.04 |
BigQuery - Cloud SQL , CSV 파일 (0) | 2019.10.18 |
Google Kubernetes Engine(GKE) (1) | 2019.10.15 |
NGINX (0) | 2019.10.15 |