[Docker] 도커의 이해와 개념

Posted by 김성철

docker - 개념

참고 사이트  :  
	https://tecoble.techcourse.co.kr/post/2021-08-14-docker/  
	https://www.youtube.com/watch?v=LXJhA3VWXFA  
	https://www.youtube.com/watch?v=chnCcGCTyBg  
	https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html  
	https://jinjinyang.tistory.com/47?category=1011842  
	https://hoon93.tistory.com/48  
	https://velog.io/@markany/%EB%8F%84%EC%BB%A4%EC%97%90-%EB%8C%80%ED%95%9C-%EC%96%B4%EB%96%A4-%EA%B2%83-1.-%EB%8F%84%EC%BB%A4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80  
	https://velog.io/@kdaeyeop/%EB%8F%84%EC%BB%A4-Docker-%EC%99%80-VM%EC%9D%98-%EC%B0%A8%EC%9D%B4  

도커 사용 이전

하나의 서버에 여러개의 프로그램을 설치하여 관리하기 힘듬  
여러개의 프로그램을 설치 하였다 하더라도, 사용하는 라이브러리 버전이 달라서 이슈가 생김  
여러개의 서버에 각각 하나씩의 프로그램을 설치하게되며, 이렇게되면 관리해야 할 서버가 늘어남  
관리해야 할 서버가 늘어나면서 자연스럽게 낭비되는 자원들도 생김  
더욱이 나가서 MSA가 유행하기 시작하면서 프로그램은 더욱더 쪼개지기 시작하면서 서버관리에 대한 이슈가 많음  

도커의 이해

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼임  
컨테이너는 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여, 프로그램의 배포 및 관리를 단순하게 해줌  
백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화 할수 있음  
또한 조립PC , AWS , Azure , Google cloud 등 어디서든 실행할 수 있음  

컨테이너

https://github.com/kkimsungchul/study/blob/master/Docker/[Docker] 컨테이너와 가상머신의 차이.txt  
컨테이너는 격리된 공간에서 프로세스가 동작하는 기술  
Hypervisor , Guest OS 에서 발생하는 성능 문제를 개선하기 위해 등장  

이미지

컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않음  
컨테이너는 이미지를 실행한 상태라고 볼 수 있고, 추가되거나 변하는 값은 컨테이너에 저장됨  
같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 삭제되더라도 이미지는 변하지 않음  
컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 의존성 파일을 컴파일하고 설치할 필요가 없음  

레이어 저장방식

도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수백MB정도임  
처음 이미지를 다운받을 땐 크게 부담이 안되지만 기존 이미지 파일에 하나 추가했다고 다시 수백MB를 다운받는다면 비효율적임  
  
이런 문제를 해결하기위해 레이어 라는 개념을 사용하고, 유니온 파일 시스템을 이용하여 여러개의 레이어를 하나의 파일시스템으로 사용할 수 있게 해줌  
이미지는 여러개의 읽기 전용 레이어로 구성되고 파이ㅏㄹ이 추가되거나 수정되면 새로운 레이어가 생성됨  
  
컨테이너를 생성할 때도 레이어 방식을 사용하는데 기존의 이미지 레이어 위에 읽기/쓰기 레이어를 추가함  
이미지레이어를 그대로 사용하면서 컨테이너가 실행중에 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어이 저장되므로 여러개의 컨테이너를 생성해도 최소한의 용량만을 사용함  

이미지 경로

이미지는 URL 방식으로 관리하며 태그를 붙일 수 있음  
ubuntu 14.04 이미지는 docker.io/library/ubuntu:14.04 또는 docker.io/library/ubuntu:trusty 이고 docker.io/library는 생략가능하여 ubuntu:14.04 로 사용할 수 있음  

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"]  
=================================================================================================================  
  
도커는 이미지를 만들기 위해 Dockerfile 이라는 파일에 자체 DSL(Domain-specific language) 언어를 이용하여 이미지 생성 과정을 적음