개발자 꼬부기의 성장일기
도커 Docker 란 본문
도커는 데이터 또는 프로그램을 격리 시키는 기능을 제공한다.
도커는 리눅스 컴퓨터에서 사용한다. 윈도우나 Mac에 구동할 수는 있지만 이경우 내부적으로 리눅스를 설치해야한다.
격리해야하는 이유
프로그램 마다 실행환경이 다를 수 있다. 예를 들어 한 프로그램이 파이썬 3.8로 사용되었고 다른 프로그램은 3.10을 이용한 프로그램이 있다면 버전이 다른 것이 영향을 줄 수 있기 때문에 다른 환경에서 실행되어야 할 수 있다. 이 경우 도커를 사용하면 관리하기가 편하다. 물론 같은 버전일지라도 구분해도 상관 없다.
도커 컨테이너(Docker Container)
이미지를 실행한 상태로 응용프로그램의 종속성과 함께 응용프로그램자체를 패키징 또는 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술이다. 컨테이너는 응용프로그램을 빠르고 쉽게 시작할 수 있는 portable units 이다. 도커만 설치되어 있다면 컨테이너는 자유로이 옮길 수 있다. 하드웨어 수준에서 가상화가 이루어지는 VM과 달리 컨테이너는 애플리케이션 계층에서 가상화된다.
컨테이너와 도커엔진
조립형 창고를 컨테이너라고 한다면 이 컨테이너를 다루는 기능을 제공하는 소프트웨어가 도커이다.
도커를 사용하려면 도커 엔진을 설치해야한다. 그리고 도커 엔진을 사용해 컨테이너를 생성하고 구동시킬 수 있다.
컨테이너를 만들려면 빵틀과 같은 역할을 할 이미지가 필요하다.
도커 이미지
도커 이미지란서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행파일을 묶는 형태를 Docker Image라고한다.특정 프로세스를 실행하기위한( 즉, 컨테이너 생성(실행)에 필요한 ) 모든 파일과 설정값(환경)을 지닌것으로, 더 이상의 의존성 파일을 컴파일하거나 이것저것 설치할 필요 없는 상태의 파일을 의미한다.예를 들면 Ubuntu 이미지는 Ubuntu를 실행하기 위해 모든 파일을 가지고 있고, Oracle 이미지는 Oracle 실행하는데 필요한 파일과 실행명령어, port정보 등을 모두 가지고 있다.
- 이미지는 상태값을 가지지 않고 변하지 않는다.
- 가상머신의 이미지에 비하면 상당히 적은 용량을 가지고 있다.
- 하나의 이미지는 여러 컨테이너를 생성할수 있고, 컨테이너가 삭제되더라도 이미지는 남는다.
- 도커 이미지는 github와 유사한 서비스인 DockerHub를 통해 버전 관리 및 배포(pull&push)가 가능하다.
- 다양한 API가 제공되어 원하는 만큼의 자동화가 가능하다.
- 도커는 Dockerfile이라는 파일로 이미지를 만든다. Dockerfile에는 소스와 함께 의존성 패키지 등 사용했던 설정 파일을 버전 관리하기 쉽도록 명시되어진다.
이미지는 템플릿일 뿐이므로 시작하거나 실행할 수 없다. 컨테이너는 실행 중인 이미지일 뿐이기 때문이다.
컨테이너를 생성하면 쓰기 가능한 레이어가 immutable image(불변 이미지) 위에 추가된다.
즉, 컨테이너는 수정이 가능하다. 컨테이너를 생성하는 이미지 베이스는 별도로 존재하며 변경할 수 없다.
컨테이너 환경을 실행할 때는 기본적으로 컨테이너 내부에 해당 파일 시스템(도커 이미지)의 읽기-쓰기 복사본을 만든다.
이렇게 하면 이미지 전체 복사본을 수정할 수 있는 컨테이너 레이어가 추가된다.
이미지와 레이어
레이어란 기존 이미지에 추가적인 파일이 필요할 때 다시 다운로드받는 방법이 아닌 해당 파일을 추가하기 위한 개념이다.이미지는 여러 개의 읽기 전용(read only) 레이어로 구성되고, 파일이 추가되면 새로운 레이어가 생성된다.
도커는 여러개의 레이어를 묶어서 하나의 파일 시스템으로 사용할 수 있게 해준다.
그래서 같은 의미로도 사용된다.추가적으로 DockerHub 및 개인 저장소에서 이미지를 공유할 때는 바뀐부분(레이어)만 주고 받기 가능하다.
도커 이미지와 컨테이너 차이점
둘은 밀접한 관련이 있으며 도커 플랫폼에 의해 정의된 시스템의 일부이다.
컨테이너가 존재하려면 이미지를 실행해야 하는 반면, 이미지는 컨테이너 없이 존재할 수 있다.
따라서 컨테이너는 이미지에 종속되어 런타임 환경을 구성하고 애플리케이션을 실행하는 데 사용된다.
도커 이미지는 도커 컨테이너에서 코드를 실행한다. 실행 중인 컨테이너를 만들려면 도커 이미지에 핵심 기능의 쓰기 가능 계층을 추가한다.(Writable container)
도커 컨테이너는 실행 중인 이미지 인스턴스로 간주한다. 각각의 고유한 데이터와 상태를 가진 동일한 이미지에서 여러 개의 컨테이너를 만들 수 있다. 컨테이너 채택의 주요 이점은 개발, 운영 및 테스트의 표준화 및 단순화이다.
CI/CD 파이프라인은 컨테이너를 빌드, 테스트 및 패키징할 수 있다. 그런 다음 배포는 해당 컨테이너를 애플리케이션의 일부로 실행할 수 있는 런타임 환경에 배포한다.
도커 엔진
도커 엔진은 OS를 가상화하지 않는다. 논리적으로 자신만의 독립된 자원과 공간을 확보할 수 있고,
OS는 Host의 OS를 같이 사용한다. HOST의 커널을 공유하며,
도커 내부에서 애플리케이션을 위한 환경설정, 실행 파일, 라이브러리, 환경 변수들만 해당 도커 이미지를 내부적으로 사용하도록 만든다.
OS를 포함하지 않은 이미지는 굉장히 가벼워졌고 하이퍼바이저를 사용하지 않기 때문에 성능적인 손실 또한 최소화되었다.
도커와 가상화 기술의 차이
VirtualBox 나 VMware같은 가상화 기술은 가상의 물리서버를 만드는 것과 같다. 실질적으로 물리서버와 동등한것으로 당연히 운영체제도 아무것이나 설치할 수 있고, 그 위에서 어떤 소프트웨어를 구동해도 무방하다.
도커는 컨테이너에서 리눅스가 동작하는 것처럼 보이지만 실제 리눅스가 동작하는 것은 아니다. 운영체제의 일부 기능을 호스트 컴퓨터에 의존하기 때문에 물리 서버에도 리눅스 기능이 필요하며 컨테이너의 내용도 리눅스 운영체제가 될 수 밖에 없다.
Dockerfile, Image, Container?
Dockerfile --(Build)--> Image --(Create)--> Container
Dockerfile은 도커 이미지를 빌드하는 방법을 정의하는 스크립트이다.
Docker에서는 환경 정보를 저장하는 파일을 Dockerfile이라고 한다.
이 Dockerfile에는 컨테이너의 구동에 필요한 정보가 작성되어 있다.
Docker file을 빌드해서 이미지를 생성한다. 이미지는 특정 환경에 대한 정보가 변하지 않고 저장되는 정적인 형태의 파일이다.
이미지를 동적인 형태로 변경한 것이 컨테이너이며, 컨테이너가 구동된다는 것은 우리가 필요로 하는 OS와 특정 환경이 경량 가상화로 구현된다는 것을 의미한다. 컨테이너는 어플리케이션을 실행할 격리된 환경이다.
다시 말하면 컨테이너를 생성하는 것은 다른 환경과 분리시킨 환경을 만든다는 말이고, 컨테이너를 구동하는 것은 분리된 프로세스화하여 특정 환경을 만드는 것이다.
'언어공부 > 웹' 카테고리의 다른 글
Vue.js 3.0 개발가이드 정리(2) (0) | 2024.07.22 |
---|---|
Vue.js 3.0 개발가이드 정리(1) (0) | 2024.06.19 |
[러닝핏] 파이썬공부 7차시-8차시 변수 입력, 출력 (0) | 2023.03.18 |
[스파르타 코딩클럽] 웹개발종합반 개발일지(3주차) (0) | 2023.03.18 |
[스파르타 코딩클럽] 웹개발종합반 개발일지(2주차) (0) | 2023.03.12 |