일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MSA
- Timsort
- stack
- 해시함수
- 힙
- 삽입정렬
- 선택정렬
- 15552번
- 프로그래머스
- 코딩테스트
- LinkedList
- 거품정렬
- 코테준비
- 스택
- 연결리스트
- 파싱
- 퀵정렬
- 트라이
- 분할정복
- 이진트리탐색
- 팀정렬
- collections.sort
- 자료구조
- 백준
- heap
- 코테
- 우선순위 큐
- 큐
- 스터디
- divide and conquer
- Today
- Total
Little bIT awesome
[Docker] 도커란? 본문
도커
Go언어로 작성된 리눅스 컨테이너를 기반으로 하는 오픈소스 가상화 플랫폼
다시 말해, 특정한 서비스를 패키징학 배포하는데 유용한 오픈소스 프로그램이다.
컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는데 필요한 모든 것이 포함되어 있다.
가상 머신에 비해 꼭 필요한 것만 담겨서 구동되기 때문에 이미지를 만들 경우 용량이 대폭 줄어들게 된다.
하이퍼바이저 vs 컨테이너
하이퍼바이저
호스트 하드웨어에 설치되어 호스트와 게스트를 나누는 역할을 하고
각각의 게스트는 하이퍼바이저에 의해 관리되며 시스템 자원을 할당받게 된다.
이 때, 하이퍼바이저에 의해 생성된 게스트는 호스트나 다른 게스트와 상호 간섭하지 않고 완전히 분리된 환경에서 구동된다.
하이퍼바이저를 활용하면 마치 하드웨어가 여러 개인 것처럼 하나의 서버를 여러 명이 나눠 쓸 수도 있고,
컴퓨터 한 대에서 서로 다른 OS를 동시에 사용할 수도 있다.
하지만 가상 머신으로 무언가 하려면 반드시 하이퍼바이저를 거쳐야 하기 때문에 속도 저하가 필연적이다.
또 가상 머신은 해당 환경을 구동하는 데 필요한 파일을 모두 포함하고 있기 때문에,
가상 머신을 배포할 때 만들어지는 이미지의 크기가 매우 커진다는 한계점이 있다.
컨테이너
가상의 OS를 만드는 것은 아니다.
컨테이너는 베이스 환경의 OS를 공유하면서 필요한 프로세스만 격리하는 방식으로,
커널을 공유하기 때문에 호스트 OS의 기능을 모두 사용할 수 있다.
그렇기 때문에 컨테이너 위에서는 호스트 OS와 다른 OS를 구동할 수 없다.
대신 격리시킬 애플리케이션과 거기에 필요한 파일이나 특정 라이브러리 등 종속 항목만 포함하기 때문에
배포를 위해 생성되는 이미지의 용량이 작아진다는 장점이 있다.
운영체제가 아닌 프로세스이며, 하이퍼바이저를 거칠 필요가 없어 실행 속도가 빠르다.
도커를 왜 사용할까?
- 애플리케이션 독립성을 가진다. 호스트 OS, 다른 컨테이너와도 독립된 공간을 보장받아 충돌이 발생하지 않는다.
- 컨테이너 내부에 작업 후 배포하려 한다면 도커 이미지로 만들어서 운영서버에 전달만 하면 된다.
- 마이크로 서비스 구조로 변화가 쉽다. 컨테이너 하나당 하나의 기능을 제공하는 모듈로 만드는 등 조정이 가능하다.
다시 말해 Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포, 확장할 수 있다.
Docker 구성요소
Docker Client : 도커를 설치하면 그것이 Client이며, build, pull, run 등의 도커 명령어를 수행한다.
DOCKER_HOST : 도커가 띄워져있는 서버를 의미한다. DOCKER_HOST에서 컨테이너와 이미지를 관리하게 된다.
Docker daemon : 도커 엔진이다.
Registry : 외부 (remote) 이미지 저장소.
다른 사람들이 공유한 이미지를 내부 (local) 도커 호스트에 pull 할 수 있다.
이렇게 가져온 이미지를 run 하면 컨테이너가 된다.
도커 엔진
컨테이너를 생성하고 관리하는 주체로서
이 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 프로젝트
도커의 생태계에 있는 여러 프로젝트들은 도커 엔진을 좀 더 효율적으로 사용하기 위한 것에 불과하기 때문에
도커의 핵심은 도커 엔진이라고 할 수 있다.
도커 이미지, 컨테이너란?
도커 이미지 (Docker Image)
컨테이너를 실행할 수 있는 실행파일, 설정 값들을 가지고 있는 것으로,
더 이상 의존성 파일을 컴파일하거나 이것저것 설치할 필요가 없는 상태의 파일을 의미한다.
Image를 컨테이너에 담고 실행시키면 해당 프로세스가 동작한다.
도커 이미지 생성 방식
도커 이미지는 기존 이미지에 추가적인 구성이 필요할 때 다시 다운로드하는 방법이 아닌
기존 이미지에 레이어를 추가하여 구성을 올려주는 방식으로 생성된다.
다시 말해, 이미지는 여러 개의 읽기 전용 레이어로 구성되고
파일이 추가되면 새로운 레이어가 생성되어 추가된다.
이미지와 컨테이너의 차이
간단하게 설명하면 도커 이미지는 설계서, 컨테이너는 설계서로 만들어진 상품이다.
게다가 이미지가 중간에 바뀌게 되더라도 기존 컨테이너는 더 이상 이미지에 영향을 받지 않는다.
도커 이미지와 컨테이너는 1 : N 의 관계이다. (같은 이미지로부터 다수의 컨테이너 생성)
도커 이미지
컨테이너를 생성할 때 필요한 요소, 가상 머신을 생성할 때 사용하는 iso 파일과 비슷한 개념
이미지는 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용되며 여러 계층으로 된 바이너리 파일로 존재한다.
도커에서 사용하는 이미지의 이름은 기본적으로 아래의 형태를 가짐
[저장소 이름]/[이미지 이름]:[태그]
- 저장소 이름 : 이미지가 저장된 상소, 명시되지 않은 이미지는 도커 허브의 공식 이미지를 뜻함
- 이미지 이름 : 해당 이미지가 어떤 역할을 하는지 나타내며 필수로 정해야 한다.
ex) ubuntu:latest → 우분투 컨테이너를 생성하기 위한 이미지라는 것을 나타냄
- 태그 : 이미지의 버전을 나타냄. 태그를 생략하면 도커 엔진은 latest로 인식
컨테이너의 정의 및 특징
Docker Container란
이미지를 실행한 상태로 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징 or 캡슐화하여
격리된 공간에서 프로세스를 동작시키는 기술이다.
특징
- 컨테이너는 이미지 레이어에 읽기/쓰기 레이어를 추가하는 것으로 생성됨
- 종료되었다고 해도 삭제되지 않음 → 읽기/쓰기 레이어 보존
- 컨테이너를 삭제한 것을 생성파일이 사라지는 것
- 한 서버는 여러 개의 컨테이너를 가져도 상관없으며 독립적으로 실행
- 컨테이너는 커널 공간과 호스트 OS 자원을 공유
도커 파일
Docker File은 이미지 생성 출발점으로,
이미지를 구성하기 위한 명령어들을 작성하여 이미지를 구성할 수 있다.
다시 말해, 만들 이미지에 대한 정보를 기술한 템플릿이라고 보면 된다.
이를 빌드하면 자동으로 이미지가 생성된다.
그러므로 도커 파일을 통해 애플리케이션 빌드 및 배포를 자동화할 수 있다.
Docker File 예시
FROM python:3.8.3-alpine
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /app
# dependencies for psycopg2-binary
RUN apk add --no-cache mariadb-connector-c-dev
RUN apk update && apk add python3 python3-dev mariadb-dev build-base && pip3 install mysqlclient && apk del python3-dev mariadb-dev build-base
RUN apk add linux-headers libffi-dev musl-dev
RUN apk add --no-cache python3-dev libffi-dev gcc
# By copying over requirements first, we make sure that Docker will cache
# our installed requirements rather than reinstall them on every build
COPY requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
# Now copy in our code, and run it
COPY . /app/
'백엔드' 카테고리의 다른 글
[용어 정리] HTTP 쿠키 & 세션 (0) | 2023.12.26 |
---|---|
[용어 정리] 파싱(Parsing) (0) | 2023.12.26 |
HTTP 수료증 (0) | 2023.07.14 |
캐시와 조건부 요청 (0) | 2023.07.14 |