목록DevOps/docker (16)
내 잡다한 노트
먼저, 가상화란? -> 하나의 물리적 서버에서 여러 운영체제와 애플리케이션을 실행할 수 있도록 하는 기술 컨테이너나 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을 컨테이너에 마운트하여 컨테이너 내부에서..
주요 Dockerfile 지시어1. FROM형식: FROM :설명: 베이스 이미지로 사용할 이미지를 지정합니다. 모든 Dockerfile은 FROM 지시어로 시작해야 합니다.예시: FROM ubuntu:20.042. RUN형식: RUN 설명: 컨테이너 내에서 명령어를 실행하여 이미지에 적용합니다. 주로 패키지 설치나 설정 변경에 사용됩니다.예시: RUN apt-get update && apt-get install -y python33. CMD형식: CMD ["실행 파일", "인자1", "인자2", ...]설명: 컨테이너가 시작될 때 기본으로 실행할 명령어를 지정합니다. Dockerfile에서 하나의 CMD만 사용할 수 있으며, 여러 개가 있을 경우 마지막 것이 적용됩니다.예시: CMD ["python3"..
1. 도커 이미지의 중요성애플리케이션 컨테이너화: 도커 이미지는 애플리케이션과 그 의존성을 패키징하여 컨테이너로 배포하는 데 사용됩니다.배포와 스케일링: 이미지를 기반으로 여러 컨테이너를 생성하여 애플리케이션을 배포하고 확장할 수 있습니다.재사용 및 공유: 이미지는 개발자와 조직 간에 공유되어 효율적인 개발과 배포를 가능하게 합니다.2. 도커 이미지를 보호해야 하는 이유2.1 보안 취약점의 전파취약점 포함 가능성: 이미지에 보안 취약점이 있는 패키지나 라이브러리가 포함될 수 있습니다.취약점의 확산: 취약한 이미지를 사용하면 해당 취약점이 모든 컨테이너와 서비스에 전파됩니다.공격 대상 확대: 공격자는 취약점을 이용하여 시스템에 접근하거나 악성 코드를 실행할 수 있습니다.2.2 이미지 변조 및 위변조신뢰성 ..
이 디렉토리는 도커에서 사용하는 파일 시스템의 일부이다.overlay2 스토리지 드라이버가 관리하는 파일 및 디렉토리를 포함하고 있다. 디렉토리 구조 및 주요 요소1. Layer 디렉토리sha256 해시 값으로 이름이 지정된 디렉토리가 여러 개 존재하는데, 각 디렉토리는 이미지 또는 컨테이너의 파일 시스템 레이어를 나타낸다.읽기 전용 또는 읽기-쓰기 레이어로 구성된다. 여러 레이어가 쌓여서 최종적으로 컨테이너의 파일 시스템을 형성한다. 2. diff 디렉토리각 레이더 디렉토리 내에는 diff 라는 서브 디렉토리가 있으며, 여기에는 해당 레이어의 파일 시스템 변화 내역이 저장되어 있습니다. 즉, 이 레이어에서 추가되거나 수정된 파일과 디렉토리가 이곳에 저장됩니다. 3. link 디렉토리link 파일은 도커..