도커.. 도커 환경에서... 도커 이미지...
이제 4학년인 IT대 학생으로서 수업에서도 꽤나 듣던 도커
항상 대충 알려주신 대로 얼렁뚱땅 써본 적은 있어도,
왜 쓰는지, 어떻게 쓰는지 공부해본 적은 없어서 쓸 때마다 새로운 느낌이었다... 하하;;
써본 적은 있어도, 막상 쓸 줄은 모르는 Docker😭
이런 애매한 상태에서 원티드에서 진행하는 4월 프리온보딩 백엔드 챌린지가 '도커로 배포 경험'이라는 것을 보았고, 도커를 외면하며 꼭두각시처럼 사용했던(?) 지난 과거를 청산하고자 신청하게 되었다. 이번 기회로 도커를 왜 쓰는지 명확하게 나만의 답을 말할 수 있으며, 실제 적절한 상황에서 사용할 수 있길 바라며 블로그에 정리해보겠다. 첫 글은 Docker란...
🧐 가상화 (Virtualization)
1) 가상화
- 실체가 없는 것을 마치 존재하는 것처럼 보이게 하는 기술
- 물리적 시스템에 대한 가상 표현을 생성하는 데 사용할 수 있는 기술
예를 들어, 1대의 물리 서버에 가상 서버 여러 대를 구축할 수 있다.
가상화를 사용하면 유연하게 환경을 구축할 수 있고, 가상 환경 별 백업이 가능하다.
가상화는 서버 가상화, 네트워크 가상화 등이 있습니다.
2) 서버 가상화
- 물리 서버 하나에 가상 서버를 여러 대 구축하는 기술
- 호스트 OS형 가상화, 하이퍼바이저형 가상화, 컨테이너형 가상화
호스트 OS형 | 물리 서버에 설치된 호스트 OS에서 가상 서버 가동 |
하이퍼바이저형 | 호스트 OS 없이 가상화 소프트웨어를 이용하여 가상 서버 가동 |
컨테이너형 | OS 단위가 아닌 애플리케이션 단위의 가상화 가상 하드웨어와 게스트 OS가 없음 ex) Docker |
3) 컨테이너형 가상화
- 애플리케이션 단위로 가상화하는 기술
- 애플리케이션을 실행하는 데 필요한 코드, 런타임, 시스템 도구, 시스템 라이브러리 등을 포함하는 가벼운, 격리된 환경을 생성하는 기술
- 컨테이너: 운영 체제에서 실행되는 프로세스
- 컨테이너에는 여러 응용 프로그램을 도입할 수 있지만 하나의 컨테이너에 하나의 애플리케이션 단위로 구축하고, 여러 컨테이너를 결합하는 것이 좋다.
- 리눅스의 핵심 기능인 Cgroups와 Namespace를 활용
- Cgroups (Control Groups)
- 프로세스 그룹의 리소스 사용량을 모니터링하고 제한하는 기능
- 컨테이너가 할당된 자원을 초과하여 사용하는 것 방지
- Namespace
- 프로세스에게 제한된 시스템 뷰를 제공하여, 프로세스가 자신의 네임스페이스 내에서만 시스템 리소스를 볼 수 있도록 함
- 파일 시스템 마운트, 네트워크, 사용자 ID, 호스트 이름 등을 각 컨테이너마다 독립적으로 할당하고 관리 -> 컨테이너를 격리된 환경으로 만들어주는 핵심 기술
- Cgroups (Control Groups)
- 장점
- 가상머신, 게스트 OS가 필요 X
- 컨테이너와 데이터 분리, 데이터를 저장할 호스트 OS 디렉토리 지정 가능
🧐 도커 (Docker)
1) 도커
- 컨테이너를 실행하거나 컨테이너 이미지를 만들고 배포하는 플랫폼
- 응용프로그램을 실행 환경 단위로 패키지화해 컨테이너 이미지 생성
2) 도커 이미지, 도커 컨테이너, 도커파일, 도커 허브
- 도커 이미지 (Docker Image)
- 컨테이너를 실행하기 위한 템플릿
- 코드, 런타임, 애플리케이션 관련 라이브러리, 환경 변수 및 설정 파일 등 포함
- 도커 컨테이너 (Docker container)
- 도커 이미지의 실행 인스턴스
- 이미지 기반 실행, 격리된 환경에서 애플리케이션과 의존성 캡슐화
- 도커 파일 (DockerFile)
- 도커 이미지를 자동으로 빌드하기 위한 스크립트 파일
- 기본 이미지 설정, 실행할 명령어, 추가할 파일 및 디렉토리, 환경 변수 설정 등 이미지 생성에 필요한 지시어 담음
docker build
명령어로 새로운 도커 이미지 생성
- 도커 허브 (Docker Hub)
- 도커 이미지를 찾고, 공유하고, 관리할 수 있는 공식적인 클라우드 기반 서비스 및 저장소
3) 도커 엔진
- 컨테이너를 생성하고 관리하는 기능을 제공하는 클라이언트-서버 형태의 애플리케이션
- 아래 세 가지로 구성
- 도커 클라이언트: REST API : 사용자 인터페이스
- 도커 데몬: 도커 객체 관리
- 컨테이너 레지스토리: CLI 클라이언트: 컨테이너 이미지 관리
다음 시간엔 도커를 써보자
[Docker] Docker로 배포하기: 2. 도커 컨테이너 생성, 도커 컴포즈 실행
'Server > Docker' 카테고리의 다른 글
[Docker] Docker로 배포하기: 2. 도커 컨테이너 생성, 도커 컴포즈 실행 (0) | 2024.04.14 |
---|