일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- dataframe
- 세그먼트 트리
- 백준
- springboot
- 다익스트라
- BFS
- 위상정렬
- pandas
- docker
- 파이썬
- 포트앤어댑터 아키텍처
- java
- series
- 알고리즘
- DP
- 헥사고날 아키텍처
- ddd
- UML
- spring security
- 자바
- equals
- 문자열
- 스프링
- Redis
- 이펙티브 자바
- 데이터 flow
- dfs
- disjoint set
- JPA
- 비트마스크
- Today
- Total
코딩못하는사람
Docker란? 본문
Docker란?
Docker는 "컨테이너 기반의 오픈소스 가상화 플랫폼"이다.
다양한 프로그램,실행환경을 컨테이너에 추상화하여 동일한 인터페이스를 제공함으로써
배포 및 관리를 쉽게 할 수 있도록 도와준다.
예를 들어 mySQL,Ubuntu 환경등을 컨테이너(이미지)로 만들어 놓고 쉽게 꺼내 쓸 수 있게 도와준다.
컨테이너(Container)란?
컨테이너란 격리된 공간에서 프로세스가 동작하는 기술이다. 우리가 사용하던 Virtual Machine과 비슷하지만 차이가 있다.
기존 VM은 OS를 가상화하는 방식이였다. 예를 들어 윈도우에서 리눅스를 돌릴 수 있게 해주거나 그 반대가 가능하게 해주지만 운영 체제의 전체 자원뿐만 아니라 운영 체제가 실행해야 하는 모든 하드웨어의 가상 자원이 필요하기 때문에 많은 RAM과 CPU를 사용하게 된다(무겁고 느리다).
이것을 개선하여 전체OS 를 가상화 하지 않고 단일 OS를 공유하며 CPU 가상화 기술을 사용해 프로세스 실행에 필요한 기능만을 넣어서 성능을 향상시킨 컨테이너를 만들었다. 실행에 필요한 파일과 라이브러리만 포함되어 있으므로 가볍고 빠르다. 현재 클라우드 컴퓨팅 기술의 기반이 되었다.
컨테이너 아키텍쳐
VM 아키텍쳐
컨테이너는 독립적으로 실행되어 가벼운 VM을 사용하는 것 같고 각 컨테이너에 접속하여 명령어를 입력하고 패키지를 설치할 수 있으며 백그라운드에서 여러 프로세스를 실행할 수 있습니다.
이미지란?
제일 처음 언급했던것 처럼 다양한 프로그램,실행환경을 추상화하여 동일한 인터페이스로 만들어 놓은것이 이미지이다. 필요한 이미지를 Docker hub나 개인이 dockerfile로 만든 이미지를 다운받고 컨테이너에 넣어 실행시키게 되면 하나의 프로세스가 실행되는 구조이다. 예를 들어 ubuntu이미지를 docker hub에서 다운받아 오면 이미지는 ubuntu를 컨테이너에서 구동하기 위한 모든 파일과 명령어가 들어가있어서 쉽게 ubuntu를 여러개를 사용할 수 있게 된다.
이렇게 서버에 많은 프로세스가 필요할 때 이미지를 컨테이너로 실행하기만 하면 되므로 VM보다 유지보수성이 좋다.
Layer 저장방식
도커 이미지는 수백MB로 이미지가 많아질수록 부담이 될 수 있지만 중복을 줄여주는 layer방식을 통해 효율적으로 이미지를 관리시켜준다.
예를 들어 ubuntu가 A,B,C로 이루어진 이미지라면 nginx를 만들때는 A,B,C,nginx이므로 nginx만 다운받아도 되게 해주는 방식으로 가상화의 특성상 이미지 용량이 크고 여러대의 서버에 배포하는걸 감안하면 단순하지만 좋은 설계이다.
공부한 곳
subicura.com/2017/01/19/docker-guide-for-beginners-1.html
docs.microsoft.com/ko-kr/virtualization/windowscontainers/about/containers-vs-vm