목록DevOps/docker (19)
내 잡다한 노트
Docker Stack은 Docker의 오케스트레이션 도구 중 하나로, 주로 Docker Swarm 모드에서 여러 컨테이너 서비스를 관리하고 배포하는 데 사용됩니다. Docker Stack을 사용하면 복잡한 애플리케이션을 여러 서비스로 구성하고, 이를 하나의 스택으로 정의하여 쉽게 배포, 확장, 관리할 수 있습니다. 다음은 Docker Stack에 대한 주요 설명입니다.주요 개념스택(Stack)스택은 여러 개의 서비스, 네트워크, 볼륨 등을 하나의 단위로 묶은 구성입니다. 예를 들어, 웹 서버, 데이터베이스, 캐시 서버 등을 하나의 스택으로 정의할 수 있습니다.Compose 파일docker-compose.yml 파일과 유사한 YAML 파일을 사용하여 스택의 구성을 정의합니다. 이 파일에는 각 서비스의 이..
오버레이 네트워크는 물리적 네트워크 위에 가상 네트워크를 생성하여 여러 호스트 간 통신을 가능하게 하는 네트워크 기술입니다. 이 가상 네트워크는 물리적 네트워크를 캡슐화(encapsulation)하여 논리적으로 격리된 네트워크 환경을 제공합니다. 오버레이 네트워크는 컨테이너나 VM과 같은 가상 환경 간의 통신을 지원하며, 다음과 같은 주요 구성 요소로 이루어져 있습니다:1.1. 가상 네트워크 (Virtual Network)물리적 네트워크와 독립적으로 작동하며, 각 컨테이너나 VM은 가상 네트워크를 통해 통신합니다.논리적으로 구성되기 때문에 네트워크를 세분화하고, 격리된 환경을 제공할 수 있습니다.1.2. 캡슐화 (Encapsulation)네트워크 트래픽은 VXLAN(또는 GRE, IPsec) 프로토콜을 ..
Docker BuildKit는 Docker의 빌드 엔진으로, Docker 이미지 빌드 프로세스를 개선하고 최적화하기 위해 도입된 혁신적인 기능입니다. BuildKit은 기존의 Docker 빌드 시스템에 비해 여러 가지 장점과 기능을 제공하며, 더 효율적이고 빠른 이미지 빌드를 가능하게 합니다. 1. Docker BuildKit 소개Docker BuildKit은 Docker의 새로운 이미지 빌드 시스템으로, Docker Engine과 통합되어 더 빠르고 효율적인 빌드 프로세스를 제공합니다. BuildKit은 기본 Docker 빌드 시스템보다 향상된 기능과 성능을 제공하며, 복잡한 빌드 요구 사항을 더 잘 처리할 수 있도록 설계되었습니다.주요 특징병렬 빌드: 여러 단계의 빌드를 병렬로 실행하여 빌드 시간을..
먼저, 가상화란? -> 하나의 물리적 서버에서 여러 운영체제와 애플리케이션을 실행할 수 있도록 하는 기술 컨테이너나 VM의 근본적인 기술은 가상화이다. 컨테이너는 호스트 OS 커널을 공유한다. 그리고 컨테이너 간에는 프로세스 수준의 격리를 사용한다. (cgroups, namespaces ) 그에 비해, 가상화는 하이퍼바이저 위에서 완전한 운영 체제를 실행한다. 애플리케이션과 해당 OS를 모두 포함하므로 크기가 크다.하드웨어만 공유를 하게 된다. (호스트 OS와 게스트 OS는 별개)그리고, 각 VM은 하드웨어 수준에서 완전히 격리된다. 둘은 성능의 차이도 나는데,컨테이너는 호스트 OS 커널을 공유하므로 부팅 과정이 필요가 없고, 애플리케이션 수준에서 바로 실행이 가능하다.또한, 가볍게 사용할 수 있다. ..
**멀티스테이지 빌드(Multi-stage Build)**는 Dockerfile에서 단계별로 빌드 환경을 분리하고, 최종 실행에 필요한 최소한의 파일만 포함하여 경량화된 이미지를 생성하는 방식입니다. 멀티스테이지 빌드란?멀티스테이지 빌드는 Dockerfile 내에서 여러 베이스 이미지를 정의하고, 각 단계(stage)에서 작업을 수행하며, 최종 단계에서는 필요한 파일만 가져옵니다.빌드 도구(컴파일러, 패키지 매니저 등)는 중간 단계에서만 사용하고, 최종 이미지는 실행 파일이나 애플리케이션 코드만 포함.최종 이미지는 작고, 불필요한 파일(빌드 도구 등)이 제거된 상태로 배포. 멀티스테이지 빌드를 사용하는 이유이미지 크기 최소화빌드 과정에서 필요한 도구(예: gcc, make)가 최종 이미지에 포함되지 않..
Dockerfile 최적화는 이미지 크기를 줄이고, 빌드 속도를 개선하며, 실행 성능과 보안을 강화하는 데 중점을 둡니다. 잘 최적화된 Dockerfile은 효율적인 CI/CD 파이프라인과 배포 환경을 구축하는 데 필수적입니다. 1. 이미지 크기 줄이기2. 빌드 속도 개선3. 실행 성능4. 보안 이걸 중점으로 최적화를 하도록 하자. 1. 이미지 크기 최적화(1) 경량 베이스 이미지 사용항상 필요한 최소한의 구성 요소만 포함된 경량 베이스 이미지를 사용합니다.예:ubuntu 대신 debian:slim 또는 alpine 사용.Python 프로젝트의 경우 python:3.9-slim 사용. (2) 멀티스테이지 빌드빌드 단계와 실행 단계를 분리하여 최종 이미지에서 불필요한 빌드 도구를 제외.멀티스테이지 빌드..
Dockerfile에서 UID를 설정하거나 명시적으로 처리하는 이유는 컨테이너의 사용자 권한 관리 및 보안성을 강화하기 위해서입니다. 아래 주요 이유를 살펴보겠습니다.1. 호스트와의 파일 권한 충돌 방지컨테이너에서 생성된 파일은 기본적으로 컨테이너 내부의 사용자 ID(UID)와 호스트 시스템의 사용자 ID가 다를 수 있습니다. 이 경우, 컨테이너가 생성한 파일이 호스트에서 읽기/쓰기 불가능하거나, 접근 권한 문제를 일으킬 수 있습니다.예: 컨테이너에서 UID가 1001인 사용자가 생성한 파일은 호스트에서 다른 사용자처럼 보일 수 있습니다.해결: Dockerfile에서 컨테이너 내부의 사용자와 UID를 명시적으로 설정하면, 호스트 시스템과의 호환성을 높일 수 있습니다.2. 보안 강화컨테이너는 기본적으로 r..
**DooD(Docker out of Docker)**는 Docker 컨테이너에서 호스트 시스템의 Docker 엔진을 직접 사용하는 설정 방식입니다. 이는 컨테이너 내부에서 별도의 Docker 설치 없이, 호스트 시스템의 Docker를 활용하여 컨테이너를 실행하거나 관리할 수 있도록 해줍니다. DooD의 원리DooD는 두 가지 주요 요소를 공유하여 동작합니다:Docker CLI 실행 파일 공유:/usr/bin/docker를 컨테이너에 마운트하여 Docker CLI(Command Line Interface)를 사용 가능하게 함. volume:- /usr/bin/docker:/usr/bin/dockerDocker 데몬 소켓 공유:/var/run/docker.sock을 컨테이너에 마운트하여 컨테이너 내부에서..