애플리케이션의 배포, 확장 및 관리를 자동화하기 위해 설계된 오픈 소스 플랫폼
👉 컨테이너
라고 부르는 애플리케이션 자동화 기술을 쉽게 사용할 수 있게 고안됨
👉 애플리케이션이 격리된 환경에서 실행될 수 있게 함
컨테이너 : 소프트웨어를 실행하는 데 필요한 모든 것을 포함하는 경량의 독립 실행형 패키지 (코드, 런타임, 시스템 도구, 라이브러리 및 설정 등)
이미지 : 컨테이너를 생성하는데 사용되는 불변 템플릿, 특정 시점의 컨테이너 스냅샷
Dockerfile : 도커 이미지를 빌드하기 위한 일련의 명령어가 포함된 텍스트 파일
Docker Hub (public) : 도커 사용자가 컨테이너 이미지를 찾고 공유할 수 있는 클라우드 기반 저장소
볼륨 : 컨테이너의 파일 시스템 외부에 데이터를 저장하는 데 사용할 수 있는 영구 저장소
네트워크 : 컨테이너가 서로 및 외부 시스템과 통신하는 방식을 정의하는 설정
👉 Dockerfile → 이미지 파일 → 컨테이너 만들기
* 편리한 관리 : 서비스 환경 이미지만 관리
* 확장성 : 이미지 하나로 서버를 계속 복제
* 경량화
VM 과 똑같은데 guestOS가 없다
이미지 파일을 대상으로 프로세스를 기동
컨테이너를 효율적으로 생성, 실행 및 관리하기 위해 세 가지 핵심 구성 요소인 도커 엔진, 호스트 운영체제, 도커 이미지 캐시를 활용
도커의 컨테이너화 기술을 가능하게 하는 핵심 구성 요소
🌟도커 데몬(dockerd)
도커 CLI(docker 명령)
docker build | run | ps
등 명령어를 통해 도커 데몬에 명령 전달 호스트 OS에서 작동하지만, 전통적인 OS 환경의 종속성 관리를 추상화하여 격리와 효율성 제공
네임스페이스를 통한 격리
cgroups을 통한 자원 할당
[Docker] 도커 컨테이너를 이루는 기술: namespace, cgroups, network 이 외에도 많은 블로그를 참고해봤지만... 실제로 이게 어떻게 쓰이는지 잘 모르겠다... 뭔지 감이 안 잡힘... 뿌앵
대략적으로 네임스페이스를 통해 컨테이너를 독립적으로 구분할 수 있다...? cgroup을 통해서 관리를 한다...? 지금 한 번에 다 알려고 하지 말고 공부 하다보면서 차차 알아가봐야겠음...
유니언 파일 시스템(UnionFS)
👉 캐싱 메커니즘을 통해 빌드 속도를 높이고 효율성 개선 (CI/CD 파이프라인에서 유용)
이미지 레이어 캐싱
중간 레이어
멀티 스테이지 빌드
상호작용 방식
이미지 빌드 과정
- 개발자가 Dockerfile을 작성하여 빌드 단계 정의, 도커 CLI가 이를 도커 데몬에 전송 => 이미지가 레이어별로 생성
컨테이너 실행 과정
- 컨테이너가 시작되면 도커 데몬은 이미지 캐시에서 이미지를 불러와 네임스페이스와 cgroups를 사용하여 격리된 환경에서 실행
캐시된 레이어 재사용
- 이전 Dockerfile과 유사한 새 이미지를 빌드할 때, Docker는 캐시된 레이어를 재사용하여 빌드 시간을 줄인다
Docker 이미지의 저장소 역하을 하는 클라우드 기반의 서비스
이미지 저장 및 배포
자동 빌드
👉 GitHub나 Bitbucket과 연동하여 소스 코드가 변경될 때마다 자동으로 이미지를 빌드하고 업데이트 (CI/CD)
이미지 검색
커뮤니티 및 공식 이미지
Docker 이미지를 만들기 위해 사용하는 텍스트 파일
FROM
- 베이스 이미지 지정, 모든 Dockerfile은 이 명령어로 시작 RUN
- 컨테이너 내부에서 명령어 실행 COPY
WORKDIR
- 작업 디렉토리 설정 CMD
- 컨테이너가 시작될 때 실행할 명령어 지정EXPOSE
- 컨테이너가 리슨할 포트 지정 ENV
- 환경 변수 설정 컨테이너화된 애플리케이션을 실행하는데 필요한 모든 것을 포함한 읽기 전용 템플릿
장점
특징
1. 레이어와 레이어링 시스템
도커 이미지는 여러 레이어로 구성
각 레이어는 이전 레이어 위에 쌓여 효율적인 구조 형성
Dockerfile이 처리될 때 도커가 각 명령을 읽고 각 레이어를 빌드하여 최종 이미지 생성
이미지 저장소와 레지스트리
이미지를 사용해 도커 컨테이너 실행
이미지 버전관리 및 태그
애플리케이션과 그 종속성을 함께 패키징하여 다양한 컴퓨팅 환경에서 안정적으로 실행할 수 있게 하는 경량 가상화 형태
OS레벨의 가상화 👉 프로세스를 격리시켜 동작하는 방식
작동 방식
Dockerfile (이미지 생성을 위한 설정 파일) > Docker Image (컨테이너의 실행 가능한 템플릿) > Docker Container (이미지를 기반으로 실행되는 독립된 프로세스)
장점
본 포스팅은 글로벌소프트웨어캠퍼스와 교보DTS가 함께 진행하는 챌린지입니다