원티드 프리온보딩 백엔드 챌린지에 신청하고
사전 과제로 도커에 대해 알아보고
도커를 설치하고 실행까지 해보았다..!
이 기회를 통해 조금 더 발전해보자!!
컨테이너 먼저 알아보자
컨테이너란 논리적인 공간을 만들어 다양한 어플리케이션을 설치해서 하나의 서버처럼 사용할 수 있는 패키지 이다.
클라우드 가상화 기술로서 도커와 쿠버네티스와 연관이 있다..!
단일 컨테이너는 작은 마이크로서비스 또는 소프트웨어 프로세스부터 대규모 애플리케이션에 이르는 모든 것을 실행하는 데 사용될 수 있다!
서버 나 가상머신의 방식과 달리 컨테이너에는 운영 체제 이미지가 포함되어 있지 않다. 그래서 더 가볍고 휴대성이 좋고 오버헤드가 현저히 낮다!
*오버헤드란*
* 오버헤드란~
프로그램의 실행흐름 도중에 동떨어진 위치의 코드를 실행시켜야 할 때 , 추가적으로 시간,메모리,자원이 사용되는 현상이다. 즉, 오버 헤드는 특정 기능을 수행하는데 드는 간접적인 시간, 메모리 등 자원을 말한다.
컨테이너의 장점
- 더 적은 오버헤드
- 휴대성 향상
- 보다 일관된 운영
- 효율성 향상
- 더욱 우수한 어플리케이션 개발
이 외에도 컨테이너와 VM(가상머신)이 비슷하다고 착각 할 수 있는데 매우 다른 차이점이 있다고 한다
자세한 내용은 아래 참고한 블로그링크를 통해 읽어보도록하자.
조금 더 이해가 된다면 블로그에 정리해서 컨테이너에 대해 자세히 다시 다뤄봐야지!
이제 도커에 대해서 알아보도록 하자!!
도커란?
도커란 간단히 말해 리눅스 컨테이너를 만들고, 사용할 수 있는 컨테이너화 기술이다.
도커를 공부하다 보면
도커 파일, 도커 이미지, 도커 컨테이너 같은 용어들을 접할 수 있다.
용어들을 아래에서 조금 더 자세히 알아보고
우선 도커의 장점으로는
1. 다루기 쉽다
2. 서버 관리가 용이하다.
3. 한 대의 물리 서버에 여러 대의 서버를 띄울 수 있다.
도커의 단점으로는
1. 리눅스용 소프트웨어 밖에 지원하지 않는다.
2. 호스트 서버에 문제가 생기면 모든 컨테이너에 영향을 받는다.
3. 컨테이너 하나를 장기간에 걸쳐 사용 할 경우 큰 장점을 느끼기 어렵다..
등 이 있다.
위와 같은 내용을 찾아보면서
도커의 라이프 사이클, 도커의 구조 등에 대해 내용을 보게 되었는데
이 내용들은 조금 더 익숙해진 다음 다른 포스트 에서 다뤄보도록 하자..!!
도커 파일이란?
도커 파일은 도커에서 이미지를 빌드 하기 위해 작성하는 파일이다.
docker build [옵션] [작성한 dockerfile 경로]
위 명령어를 이용해서 docker 이미지를 생성 할 수 있다.
예시
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
위와 같이 명령어들이 나열된 형태로 작성한다.
그리고 각 line 의 맨 앞은 대문자로 이루어진 지시어(Instruction) 로 시작한다.
지시어 들에 대해서는
참고한 아래 링크에서 확인 해보도록 하자!
도커 이미지란?
도커는 어플리케이션을 포장하고 전송하기 위해 도커 image를 사용한다.
도커 이미지는 파일로서 어플리케이션 실행에 필요한 독립적인 환경을 포함하고, 런타임 환경을 위한 템플릿의 일종이다.
이미지는 변경 불가능한 파일이다.
읽기전용으로 스냅샷이라고도 하며, 특정 시점의 어플리케이션과 가상환경을 나타낸다.
이러한 일관성은 도커의 큰 특징 중 하나로 개발자가 안정적이고 균일한 조건에서 소프트웨어를 테스트하고 실험할 수 있도록 한다.
이미지는 템플릿일 뿐이므로 시작하거나 실행할 수 없다. 컨테이너는 실행 중인 이미지일 뿐이기 때문이다.
컨테이너를 생성하면 쓰기 가능한 레이어가 immutable image(불변 이미지) 위에 추가된다. 즉, 컨테이너는 수정이 가능하다.
컨테이너를 생성하는 이미지 베이스는 별도로 존재하며 변경할 수 없다.
컨테이너 환경을 실행할 때는 기본적으로 컨테이너 내부에 해당 파일 시스템(도커 이미지)의 읽기-쓰기 복사본을 만든다.
이렇게 하면 이미지 전체 복사본을 수정할 수 있는 컨테이너 레이어가 추가된다.
하나의 베이스 이미지에서 도커 이미지를 무제한으로 생성할 수 있다.
이미지의 초기 상태를 변경하고 기존 상태를 저장할 때마다 추가 레이어가 있는 새 템플릿을 만든다.
따라서 도커 이미지는 여러 개의 레이어로 구성될 수 있으며, 각각은 다르지만 이전 레이어에서 비롯된다.
이미지 계층은 컨테이너 계층을 사용하여 가상 환경을 시작할 때 추가된 읽기 전용 파일을 나타낸다.
도커 컨테이너란?
도커 이미지를 기반으로 실행된 독립적인 실행 단위.(이미지를 실행한 상태)
사용자가 기본 시스템에서 애플리케이션을 분리할 수 있는 가상화된 런타임 환경이다.
이러한 컨테이너는 응용프로그램을 빠르고 쉽게 시작할 수 있는 portable units 이다.
중요 기능은 컨테이너 내부에서 실행되는 컴퓨팅 환경의 표준화다. (standardization of the computing environment running inside the container.)
응용 프로그램이 동일한 환경에서 작동하도록 할 뿐 아니라 다른 사람과의 공유도 단순화한다.
컨테이너는 자율적(autonomous)이기 때문에 strong isolation(강한 고립)을 제공하며 서로 방해하지 않는다. -> 격리
하드웨어 수준에서 가상화가 이루어지는 VM과 달리 컨테이너는 애플리케이션 계층에서 가상화된다.
하나의 머신을 활용하고 커널을 공유하며 분리된 프로세스를 실행하기 위한 운영 체제를 가상화할 수 있다.
따라서 컨테이너가 매우 가벼워져 리소스를 많이 사용하지 않을 수 있다.
[참고 ]
컨테이너
https://www.netapp.com/ko/devops-solutions/what-are-containers/
https://kk-7790.tistory.com/135
도커
- https://hoon93.tistory.com/48