DevOps/Docker 7

[Docker] Multi-stage Build (for Python Docker)

Multi-Stage Build란? Docker 17.05에서 도입된 기술로, 이미지의 용량을 줄이기 위한 목적 하나의 프로젝트를 만드는 빌드 과정에서, 순수 구동에 필요한 어플리케이션만 최종 추출하여 사용하는 방법 일전에는 Builder Pattern을 활용해 multi-statge와 비슷한 역할을 함 Multi-Stage Build 장점 - 이미지 사이즈를 줄일 수 있음 - 도커 이미지가 자주 변경시 빠르게 배포 가능 Dockerfile 구성 특징 FROM 1 : 빌드용 Base 이미지 (주로 AS builder 로 별칭을 붙임) FROM 2 : 어플리케이션 구동용 이미지 COPY --from = builder : 실제 어플리케이션을 위한 필요한 파일들만 복사 해온다. 나머지는 일반 Dockerfil..

DevOps/Docker 2023.03.21

[Docker] Docker-compose란? (작동 구조, yaml 구성)

Docker-compose 사용 이유 하나의 어플리케이션을 동작하기 위해 여러 컨테이너 기반 서비스가 실행 되어야 함 컨테이너 간 의존성, 네트워크, 볼륨 등을 정의하며 컨테이너를 순차적으로 생성 할 필요 존재 Docker-compose 작동 구조 Docker-compose 파일은 yaml 형태로 작성, 각 컨테이너의 Dockerfile들을 순차적으로 실행 Docker-compose yaml 파일 구성 Docker Compose 주요 항목 📁 1. 버전 정의 Version: ‘3.0’ : YAML 파일의 버전 ex) version : "3.5" 📁 2. 서비스 정의 큰 서비스 목록 (services) 아래의 서비스 들 존재. Image : 서비스의 컨테이너 생성 이미지 build : 서비스의 컨테이너 D..

DevOps/Docker 2022.08.17

[Docker] Docker Network 종류

Docker Container Network 특징 컨테이너는 subnet 172.17.0.0/16 기반의 내부 IP를 순차적으로 할당함 컨테이너는 기본적으로 loop back과 eth 인터페이스를 가진다. 컨테이너 생성시 docker daemon에서는 veth(virtual eth) 가상 네트워크 인터페이스를 만들고 각 컨테이너의 eth0과 연결 컨테이너 생성시 veth들은 docker0 브릿지에 자동 바인딩 되어 외부와의 통신이 가능 Docker Network 종류 - 브릿지 네트워크 기본적인 네트워크 세팅 ( docker - veth / veth - eth0 연결 등) 구조, 사용자가 임의의 브릿지 생성도 가능 브릿지 네트워크 생성 및 연결 # 브릿지 생성 docker network create -d..

DevOps/Docker 2022.08.17

[Docker] Docker Volume 3가지 구성 방법

Docker Volume은 왜 필요한가? 어플리케이션 구동시 컨테이너 자체에 데이터가 쌓이는데, 컨테이너 삭제 시 내부의 저장된 정보도 사라짐 컨테이너의 생명 주기와 관계없이 데이터를 영속적으로 활용하기 위해 볼륨 활용 컨테이너가 외부에 저장된 데이터로 동작하게 하는 방식을 Stateless한 컨테이너 설계 방식이라고 함 Docker Volume 활용 (1) Docker Volume Docker 내에 볼륨 공간 생성 (일반적으로 /var/lib/docker/) 및 컨테이너 마운트에서 관리 특징 하나의 정의된 볼륨을 여러 개의 컨테이너에 공유 및 활용 Volume을 정의하고 연결하여 사용하기 때문에 직접 관리시 번거로움 커스텀 폴더 구조화가 힘듬 (위치가 일반적으로 고정되어있으니 내가 직접 폴더 구조 생성..

DevOps/Docker 2022.08.16

[Docker] Dockerfile 빌드 과정, 문법 정리, Docker Layer

Dockerfile 이란? Docker image 생성(빌드)시 컨테이너에 설치될 패키지, 소스코드, 실행 명령어 등을 기록된 이미지 설정 파일 Dockerfile 문법 문법 역할 FROM Base 이미지 LABEL 이미지에 대한 LABEL RUN shell 명령어 실행 - 주로 package 설치나 기본 설정에 많이 사용 - chaining 활용하여 되도록 한줄에 작성하는 것이 권장 - 설치 과정에 -y 옵션 적용 필요 ex) RUN apk add curl ex) RUN ['python', 'manage.py', 'runserver'] CMD 컨테이너 내부에서 실행 명령 - Dockerfile에서 한번만 사용 가능 - 명령, 인자값 설정 가능하며 없을시 기본값으로 ENTRYPOINT 컨테이너 내부에서 ..

DevOps/Docker 2022.08.16

[Docker] Docker, Docker-compose 명령어

Docker Image 명령어 명령어 기능 docker pull 이미지 Docker hub에서 pull docker search 이미지 검색 docker images 이미지 목록 조회 docker build . Dockerfile 기반 이미지 생성 -t : tag명 -f : Dockerfile 위치 --no-cache : 캐시기능 off 빌드 (코드 살짝 수정해도 재빌드) docker create 이미지 기반 컨테이너 생성 docker run 이미지 기반 컨테이너 생성 --name : 컨테이너 이름 -it : 입출력 관련 옵션 -d : daemon 실행 (background) -p : 포트 바인딩 -v : volume 공간 설정 ex) docker run --name mongo_db -p 24017:24..

DevOps/Docker 2022.08.16

[Docker] Docker 란? (chroot, 생명주기 등)

Docker 란? 도커는 컨테이너(*애플리케이션 및 해당 구동 환경을 격리한 공간) 기반의 가상화 플랫폼 기존 가상 머신 vs Docker 기존의 가상 머신 Hypervisior에 의해 GuestOS 생성 라이브러리, 커널 등 완전히 독립된 공간과 시스템 자원 할당 받아 사용 대표 툴 : VirtualBox, VMware 도커 컨테이너 프로세스 단위의 격리 환경(chroot, namespace, cgroup 등), 호스트의 커널 공유 라이브러리 및 실행 파일만 할당 하여 가벼움 애플리케이션 운영 표준화 및 어디서나 안정적으로 실행 가능 Docker의 chroot chroot (Change root) root directory(A)의 기준을 실행할 애플리케이션의 하위 directory (B)로 변경하는 역..

DevOps/Docker 2022.08.16