본문 바로가기
카테고리 없음

도커(Docker)

by Testengineer 2025. 2. 18.
반응형

도커는 소프트웨어 컨테이너의 형태로 애플리케이션을 배포할 수 있는 오픈 소스 프로젝트다. 도커를 이용하면 애플리케이션과 실행환경(파일, 코드 라이브러리 등)을 통합해서 실행할 수 있다. 즉, 도커를 이용하면 가상화처럼 애플리케이션을 어디서든 실행 가능한 이미지로 패키징 할 수 있다.

 

컨테이너화 VS 가상화

도커를 사용하지 않고도 가상머신이라 부르는 하드웨어 가상화로 프로세스를 격리하는 작업을 할 수 있다. 대표적으로 버추얼박스나 VM웨어, 패러렐즈 등이 있다. 가상 머신은 컴퓨터의 아키텍처를 모방하는 방식으로 실제 컴퓨터와 같은 기능을 제공한다.
애플리케이션을 독립된 가상머신 이미지에 배치함으로써 완벽하게 격리된 환경에서 실행할 수 있다. 이미지에는 필요한 모든 의존성 요소와 게스트OS(운영체제)가 들어있다. 이미지의 실행은 실제 컴퓨터 아키텍처를 모방하는 역할을 하는 하이퍼바이저가 맡는다. 
그러나 가상화에는 '낮은 성능','높은 자원 소비'와 '큰 파일 크기'라는 단점이 존재한다.

반면 컨테이너화는 이런 문제를 전혀 다르게 해결한다. 각 애플리케이션에는 운영체제가 아닌 의존성 요소만 포함한다. 애플리케이션 인터페이스는 호스트 OS와 직접 연결되며, 게스트 OS 같은 추가 레이어가 없다. 그러므로 성능은 향상되고 리소스도 낭비되지 않는다. 게다가 도커 이미지는 파일 크기도 매우 작다.
컨테이너화의 경우 호스트OS 프로세스 수준에서 격리가 되는 것을 볼 수 있다. 그러나 컨테이너들이 의존성 요소를 공유하지는 않는다. 컨테이너는 각자 맞는 버전의 라이브러리를 갖고 있으므로 그중 하나가 업데이트되어도 다른 라이브러리에는 영향을 끼치지 않는다. 도커 엔진에서는 컨테이너용 리눅스 네임스페이스와 컨트롤 그룹을 생성해 이를 처리하는데, 이는 도커의 보안이 리눅스 커널 프로세스 격리를 기반으로 하는 이유이기도 하다. 이런 솔루션은 검증되었지만 가상 머신이 제공하는 전체 os기반 격리보다는 덜 안전하다고 여겨지기도 한다.

 

도커 다운로드

도커의 내부는 리눅스 기반으로 하기 때문에 맥이나 윈도우에서 도커엔진을 설치하려면 가상머신을 사용해야 한다.
도커는 로컬 머신이나 서버에 설치하는 방법이 있는데, 나는 공부용으로 사용할 목적이기 때문에 로컬머신인 도커 데스크톱을 설치했다. 이 방법이 가장 간단한 설치 방법이긴 하다. 원래 도커를 구동하는 데에는 리눅스 커널이 필요하고, 도커 엔진은 VM 내부에 설치된다. 그러나 도커 데스크톱을 사용하면 어려운 설정을 하지 않고도 도커 명령을 사용할 수 있다.

아래 사이트에서 자신이 원하는 os에 알맞은 파일을 선택해서 설치하면 된다. 

https://docs.docker.com/get-started/get-docker/

 

Get Docker

Download and install Docker on the platform of your choice, including Mac, Linux, or Windows.

docs.docker.com

이메일로 로그인까지 해주어서 진입이 된다면, 이제 실행할 준비가 되었는지 확인해본다.
docker info 명령어를 실행해보고 다음과 같은 출력 메시지가 나타난다면 준비된 상태이다.

그 외에 필요에 따라 사용할 수 있는 명령어들은 아래 페이지를 통해서 확인할 수 있다.

https://docs.docker.com/reference/

 

Reference

Find reference documentation for the Docker platform’s various APIs, CLIs, and file formats

docs.docker.com

 

 

 

도커 컴포넌트

도커는 사실 여러개의 컴포넌트로 구성되어 있다. 
우선 도커 엔진은 3개의 컴포넌트로 구성된다. 백그라운드에서 실행되는 도커 데몬(서버), 명령툴로 실행되는 도커 클라이언트, REST API이다. 도커를 설치한다는 것은 모든 컴포넌트를 설치해 도커 데몬이 마치 서비스처럼 컴퓨터에서 항상 실행되어 있다는 것을 뜻한다.

이미지는 도커 세계에서는 stateless(상태를 저장하지 않음) 방식의 구성요소이다. 이미지라는 것은 애플리케이션을 실행하는데 필요한 모든 파일들과 그것을 실행하는 방법을 한데 묶어놓은 것이다. 이미지는 네트워크로 전송하거나 레지스터리로 저장할 수도 있고 이름이나 버전을 지정할 수도 있으며 파일로 저장할 수도 있다. 이미지는 계층화할 수도 있으므로 다른 이미지를 포함하는 이미지를 만드는 것도 가능하다.

컨테이너는 이미지의 실행 인스터스를 말한다. 동일한 애플리케이션의 인스턴트를 많이 만들고 싶다면 하나의 이미지에서 인스턴트를 많이 만들면 된다. 컨테이너는 stateful(상태를 저장함) 방식으로 컨테이너를 사용하면서 상태를 변경할 수 있다.

반응형

댓글