Journey to Security/클라우드 44

[Docker Swarm] 서비스와 레플리카, 스케일링 및 글로벌 모드 이해하기

도커 스웜(Docker Swarm) 환경에서 컨테이너를 효율적으로 관리하기 위한 서비스(Service)의 개념과 레플리카(Replica), 스케일링(Scaling), 그리고 글로벌 모드(Global Mode)의 동작 원리를 살펴보자.1. 도커 스웜 서비스(Service)와 태스크(Task)의 이해도커 스웜에서 컨테이너를 실행하는 기본 단위는 '서비스'다.단일 노드에서 docker run으로 컨테이너를 실행하는 것과 달리, 스웜 모드에서는 docker service create를 통해 클러스터 전체에 컨테이너 배포를 명령한다.서비스: 동일한 이미지로 생성된 컨테이너들의 집합을 제어하는 논리적인 단위다. 사용자가 "nginx 컨테이너 5개를 유지하라"고 정의하면, 이 정의 자체가 서비스가 된다.태스크: 스웜..

[Docker Swarm] 도커 스웜으로 만드는 컨테이너 클러스터

단일 노드 환경에서 도커를 운영하면 설정은 간편하지만 분명한 한계가 있다.특정 노드의 하드웨어(CPU, RAM, HDD) 자원이 고갈되거나 노드 자체가 다운될 경우, 해당 노드에서 실행 중인 모든 컨테이너 서비스가 중단되기 때문이다.이러한 단일 장애점(SPOF, Single Point of Failure) 문제를 해결하고 서비스의 지속성을 보장하기 위해 여러 대의 서버를 하나의 자원 풀로 묶어 관리하는 기술이 필요하다.도커 스웜(Docker Swarm)은 이를 가능하게 하는 대표적인 컨테이너 오케스트레이션 도구이다.1. 도커 스웜의 핵심 개념과 구조도커 스웜은 여러 대의 도커 호스트를 하나의 가상 호스트로 추상화하여 관리한다.이를 클러스터(Cluster)라고 부르며, 구성 요소는 크게 매니저 노드와 워커..

[Docker] 도커 환경에서 FTP 서버 구축하기 (Pure-FTPd)

리눅스 환경에서 서비스를 운영하다 보면 환경에 따라 선호되는 소프트웨어 스택이 달라진다.예를 들어, 일반적인 리눅스(Bare Metal) 환경에서는 웹 서버로 Apache2를, FTP 서버로는 vsFTP를, 데이터베이스로는 PostgreSQL이나 MariaDB를 주로 사용한다.하지만 컨테이너 기반인 Docker 환경에서는 조금 다르다.웹 서버는 가벼운 Nginx가, FTP 서버는 설정이 간편하고 가벼운 Pure-FTPd나 wuFTP가, 데이터베이스는 MySQL이 주로 사용된다. 이번에는 Docker 환경에 최적화된 Pure-FTPd를 사용하여 FTP 서버를 구축하는 과정을 알아보자.특히 FTP의 동작 원리인 Passive Mode를 이해하고 이를 Docker 네트워크 설정에 반영하는 과정이 중요하다. 1..

[Docker] Nginx 로그를 Fluentd를 통해 MongoDB에 저장하기 (중앙 집중형 로그 관리)

도커 컨테이너는 기본적으로 휘발성을 가진다.컨테이너가 삭제되면 내부의 로그 파일도 함께 사라지기 때문에, 운영 환경에서는 로그를 외부 저장소에 영구적으로 보관할 방법이 필요하다. 이러한 로그 수집의 예시로 웹 서버(Nginx)에서 발생하는 로그를 수집기(Fluentd)를 거쳐 데이터베이스(MongoDB)에 중앙 집중적으로 저장하는 파이프라인을 구축해 보자.1. 전체 아키텍처 및 데이터 흐름시스템의 전체적인 로그 데이터 흐름은 다음과 같다. Nginx: 클라이언트 요청을 처리하고 표준 출력(Stdout)으로 로그를 뱉는다.Docker Log Driver: 컨테이너의 로그를 받아서 파일로 쌓는 대신 Fluentd로 전송한다.Fluentd: 수신한 로그를 버퍼링하고 MongoDB가 이해할 수 있는 포맷(js..

[k8s] NestJS 앱을 도커라이징해서 Pod로 띄우기

로컬 환경에서 개발한 애플리케이션을 컨테이너화하고, 이를 쿠버네티스 클러스터 위에서 실행시키는 것은 클라우드 네이티브 개발의 기초가 되는 과정이다. 이번에는 NestJS 프레임워크로 간단한 백엔드 서버를 만들고, 이를 도커 이미지로 빌드한 뒤 쿠버네티스 파드(Pod)로 배포하여 접속하는 전체 워크플로우를 정리해보자.1. NestJS 프로젝트 생성 및 로컬 테스트가장 먼저 컨테이너에 담을 앱이 필요하다.Node.js 기반의 프레임워크인 NestJS를 사용하여 기본 서버를 생성한다.프로젝트 생성NestJS CLI를 전역으로 설치하고 새로운 프로젝트(nest-server)를 생성한다.# NestJS CLI 설치sudo npm i -g @nestjs/cli# 프로젝트 생성cd ./Documentsnest new..

[Docker] 리소스 모니터링 도구 - events, stats, system, cAdvisor

도커 환경을 운영하다 보면 단순히 컨테이너를 실행하고 종료하는 것을 넘어, 현재 시스템 내부에서 어떤 일이 벌어지고 있는지, 리소스는 얼마나 사용되고 있는지 파악해야 할 때가 있다.특히 다수의 컨테이너를 관리하거나 성능 최적화가 필요할 때 모니터링은 필수다. 도커 기본 모니터링 명령어(events, stats, system)와 구글이 만든 컨테이너 모니터링 도구인 cAdvisor를 활용하는 방법을 알아보자. 1. 실시간 이벤트 스트림 확인: docker events도커 데몬은 컨테이너의 생성, 시작, 정지, 삭제 등 모든 생명주기 변경 사항을 '이벤트(Event)'로 처리한다. docker events 명령어는 이러한 이벤트를 실시간 스트림으로 보여주는 도구로, 윈도우 서버의 '이벤트 뷰어'와 유사한 역..

[Docker] 파이썬 코드로 도커 제어하기: Docker SDK 활용 기초

일반적으로 도커를 사용할 때는 터미널에서 docker run, docker ps와 같은 CLI 명령어를 주로 사용한다.하지만 복잡한 MSA(Microservices Architecture) 환경을 구축하거나, 자체적인 인프라 관리 도구를 개발해야 할 때는 쉘 스크립트만으로 제어하는 데 한계가 있다.이때 유용한 것이 프로그래밍 언어를 통한 도커 제어다.Docker는 Python, Go, Java 등 다양한 언어에 대한 SDK를 제공하며, 이를 통해 컨테이너의 생성, 실행, 종료 등을 프로그래밍 로직 안에서 처리할 수 있다. 이번에는 Python의 docker 라이브러리를 사용하여 Nginx 컨테이너를 생성하고 실행해보자.1. 동작 원리 및 아키텍처먼저 파이썬 코드가 어떻게 도커 데몬을 제어하는지 이해할 필..

[Docker] 이미지 커밋(commit)과 Docker Hub 공유(push)

이번에는 베이스 이미지를 실행하여 파일을 생성하고, 이를 커밋(commit)하여 새로운 이미지로 만든 뒤 Docker Hub에 배포(push)하고 다른 환경에서 내려받아(pull) 확인하는 전체 라이프사이클을 살펴본다.Workflow작업의 전체 흐름은 로컬 환경에서 컨테이너를 변경하고 이미지를 생성하는 단계(build/commit), 원격 저장소로 업로드하는 단계(push), 그리고 타 환경에서 이를 실행하는 단계(run/pull)로 나뉜다. 1단계: 베이스 이미지 실행 및 변경사항 발생가장 먼저 베이스가 될 OS 이미지를 실행하고, 컨테이너 내부에서 파일 생성 등의 작업을 수행한다.여기서는 ubuntu:16.04를 사용했다.docker run -it --name comm_test1 ubuntu:16...

[Docker] Private Registry 구축 및 이미지 배포 워크플로우

도커를 사용하다 보면 Docker Hub와 같은 퍼블릭 레지스트리가 아닌, 사내망이나 개인 환경에서만 접근 가능한 Private Registry(사설 저장소)가 필요한 수 있다.보안상의 이유나 네트워크 대역폭 절약, 혹은 배포 속도 향상을 위해서다. 이번에는 공식 registry 이미지를 사용하여 로컬 환경에 사설 저장소를 구축하고, 서로 다른 두 개의 호스트간에 이미지를 푸시(Push)하고 풀(Pull)하는 전체 과정을 알아본다.특히 SSL 인증서 없이 HTTP로 통신할 때 발생하는 문제와 이를 해결하기 위한 데몬 설정(daemon.json)에 대해서도 알아보자.1. Private Registry 컨테이너 구동가장 먼저 할 일은 이미지를 저장할 레지스트리 서버를 띄우는 것이다.도커는 공식적으로 레지스트..

[Docker] Dockerfile을 이용해서 이미지 빌드하고 실행하기 (3) - 웹 페이지 배포

이번에는 단순한 텍스트 파일 대신, 스타일과 스크립트가 포함된 index.html을 작성해서 간단한 웹 페이지를 배포한다.1) index.html 생성작업 경로(/home/username/dockerfile)에 nano 편집기를 열어 index.html 파일을 작성하고 저장한다.ChatGPT 등을 이용해 간단한 CSS와 JavaScript가 포함된 HTML 파일을 작성한다. 예시: 🐳 Hello Docker! 이미지가 컨테이너에서 실행 중입니다. 상태 확인하기 시스템 정상 작동 중! ✅ 2) Dockerfile2 작성FROM ubuntu:16.04RUN apt up..

1 2 3 4 5