4. IT 개발자의 삶/4-1. Kubernetes

[Kubernetes#1] 도커(Docker)란 무엇인가?

Jack-go 2023. 8. 26. 06:00
728x90
반응형

도커(Docker)

도커 (Docker) 이미지란?

도커 이미지는 마치 소포를 포장하는 것과 비슷하게, 애플리케이션을 실행하는 데 필요한 모든 것을 내장한 패키지입니다. 예를 들어, 웹 애플리케이션을 실행하기 위해서는 웹 서버, 데이터베이스, 설정 파일, 실행 스크립트 등이 필요한데, 도커 이미지는 이 모든 것을 하나의 패키지로 포장합니다.

 

도커 (Docker)의 등장

서버를 관리하는 일은 매우 복잡하고 어려운 작업입니다. 만약 서버를 개발할 때 개발 환경이 바뀌게 된다면 컴퓨터 세팅이나 프로그램 등을 처음부터 다시 설정해야 합니다. 시스템 환경, 방화벽, 네트워크 설정, Dependency, 각종 개발 프로그램 설정 등... 이러한 방식은 매우 번거롭다는 문제점이 발생합니다.

 

특히 DevOps나 MSA가 유행하면서 Micro Service들이 잘게 나뉘면서 관리가 더욱 복잡해지게 되었습니다. 게다가 새로운 툴은 끊임없이 나오고, 클라우드의 발전으로 설치해야 할 서버가 매우 많아지는 상황에서 서버 관리 방식의 변화가 필요했습니다.

이러한 상황 속 어려움을 해결해줄 도커(Docker)가 등장하게 되었습니다.

 

도커(Docker)

  1. 컨테이너 기술을 지원하는 다양한 프로젝트 중에 하나.
  2. 컨테이너 기술을 이전에도 있었으나 도커로 인해 많이 알려짐.
  3. 컨테이너 기술의 표준.
  4. 2014년 가장 인기 있는 클라우드 오픈 소스 2위.
  5. 다양한 운영체제에서 사용 가능. (리눅스, 윈도우, MacOS)
  6. 애플리케이션에 국한 되지 않고 의존성 및 파일 시스템까지 패키징하여 빌드, 배포, 실행을 단순화.
  7. 리눅스의 네임 스페이스와 cgroups와 같은 커널 기능을 사용하여 가상화.

 

도커 이미지의 구성

도커계층

도커 이미지는 여러 계층으로 구성됩니다. 예를 들어, 웹 애플리케이션 이미지를 생각해보겠습니다. 이미지의 첫 번째 계층은 운영체제(OS)입니다. 그 다음 계층에는 웹 서버를 설치하고 설정하는 명령들이 포함됩니다. 세 번째 계층에서는 애플리케이션의 소스 코드와 필요한 라이브러리들이 추가됩니다. 이렇게 계층을 나누면 운영체제 계층은 변경되지 않으면서, 애플리케이션 계층만 업데이트할 수 있습니다.

 

개발/실행 환경이 달라도 컨테이너로 규격화한 프로그램들이 정상적으로 작동할 수 있는 이유는 무엇일까요? 그것은 도커 컨테이너들이 (정확히는 도커 이미지들) 도커 엔진(Docker Engine)위에서 실행되기 때문입니다. 이 덕분에 도커가 설치되어 있는 곳이라면 실행환경에 상관없이 모든 환경에서 동일하게 작동할 수 있습니다. 

 

도커 이미지의 활용 방법

  1. 도커 파일 작성 : 도커 이미지를 빌드하기 위한 도커 파일을 작성합니다. 도커 파일에는 베이스 이미지, 애플리케이션 설치 및 설정 명령들이 포함됩니다. 예를 들어, 도커 파일에서는 어떤 운영체제를 사용할지, 어떤 라이브러리를 설치할지 등을 정의합니다.
  2. 도커 이미지 빌드 : 작성한 도커 파일을 사용하여 이미지를 빌드합니다. 도커 빌드 명령어를 실행하면 도커 엔진은 도커 파일에 정의된 내용을 바탕으로 이미지 계층을 생성하고 패키징합니다.
  3. 도커 이미지 실행 : 빌드한 이미지를 사용하여 컨테이너를 생성하고 실행합니다. 컨테이너는 도커 이미지의 인스턴스로 생각할 수 있으며, 애플리케이션을 실행하는 환경을 제공합니다.

 

도커 이미지의 중요성

도커이미지

도커 이미지는 개발, 테스트, 운영 환경 간의 차이를 줄여주어 환경 일관성을 유지할 수 있습니다. 또한 이미지 레지스트리를 통해 이미지를 저장하고 공유함으로써 팀원들과 협업하며 배포 프로세스를 간소화할 수 있습니다.

 

도커 이미지는 애플리케이션을 격리된 환경에서 실행하고 배포하기 위한 효율적인 방법을 제공합니다. 이미지의 구성과 활용 방법을 이해하면, 여러 환경에서 일관성 있게 애플리케이션을 관리하고 확장할 수 있습니다.

 

 

도커 라이프사이클

도커라이프사이클

  1. pull을 통해 이미지를 다운로드 받고 push를 통해 Registry 에 이미지 저장이 가능. (Push할 때 권한 필요)
  2. pull된 이미지를 실행하려면 create 를 통해 container를 생성해야하며, start 를 통해 container를 메모리에서 실행 가능.
  3. run 명령어를 통해 pull , create , start 가 한 번에 수행되어 애플리케이션이 실행됨.
  4. 이미 pull 되어 있는 이미지의 경우 run 명령어를 사용하며 create 와 start 가 다시 실행됨.
  5. run 을 수행할 때마다 container가 생성되므로, create 가 필요할 때만 사용하기.
  6. stop 을 통해 container 중지 가능하며, 삭제를 원하는 경우 rm 을 사용하면됨.
  7. 이미지 삭제를 원하는 경우 rmi 를 사용하면 됨.
  8. 쓰고 있던 container에 대한 파일들을 이미지로 만들고 싶은 경우 commit 사용.

 

도커의 한계

서비스가 커지면 커질 수록 관리해야 하는 컨테이너의 양이 급격히 증가 합니다. 그리고 도커를 사용하여 관리를 한다 하더라도 쉽지 않은 형태 입니다. 

728x90
반응형