Journey to Security 132

[Docker Swarm] 도커 스택(Stack)을 배포해보자

이전 글에서 준비한 보안 데이터와 설정 객체를 사용하여 스택을 배포해보자.3개의 노드에 서비스를 분산하고, 장애 발생 시 시스템이 어떻게 스스로를 복구하는지도 살펴본다.1. Docker Compose와 Docker Stack의 차이점먼저 도커 컴포즈와 도커 스택의 차이를 알아야 한다.두 도구는 YAML 문법을 공유하지만, 설계 목적과 동작 환경에서 큰 차이가 있다. Docker Compose: 단일 호스트 환경을 위한 도구다. build 지시어를 통해 이미지를 직접 생성할 수 있으나, 여러 노드에 걸친 스케줄링이나 셀프 힐링 기능은 제공하지 않는다.Docker Stack: 도커 스웜 모드의 멀티 노드 환경을 위한 도구다. 사용자가 "목표 상태(Desired State)"를 선언하면, 매니저가 클러스터 전..

[Docker Swarm] 데이터 관리: 시크릿(secret)과 컨피그(config)

도커 스웜 모드에서 애플리케이션을 운영할 때, 가장 먼저 보안 데이터와 설정 파일을 어떻게 관리할 것인지 고려해야 한다.소스 코드에 포함해서는 안 되는 민감한 정보(비밀번호, API 키)와 환경에 따라 변하는 설정 파일(yml, txt)을 안전하고 효율적으로 관리하기 위해 도커는 Secret과 Config라는 객체를 제공한다.1. Docker Secret: 민감 정보의 암호화 저장데이터베이스 패스워드나 API 키와 같은 민감 정보는 docker secret을 통해 스웜 클러스터 내부에 안전하게 저장한다.# 1. 시크릿 생성echo "pswd1234" | docker secret create my_mysql_password - # 2. 시크릿 목록 확인docker secret ls# 3. 시크릿 상세 정보..

[Docker Swarm] Rolling Update - 서비스 업데이트와 복구

클라우드 인프라를 운영할 때 서비스 중단 없이 애플리케이션을 업데이트하는 기술이 필요하다.도커 스웜은 이를 위해 롤링 업데이트(Rolling Update) 기능을 제공한다.또한 문제가 발생했을 때 이전 상태로 되돌리는 롤백(RollBack) 기능도 지원한다. MariaDB 서비스를 예시로 롤링 업데이트와 롤백 기능의 동작 원리를 살펴보자. 1. 롤링 업데이트(Rolling Update)란?롤링 업데이트는 서비스의 전체 컨테이너를 한꺼번에 교체하는 것이 아니라, 일정 수(Parallelism)의 컨테이너를 순차적으로 업데이트하는 방식이다.이 방식을 통해 업데이트 도중에도 서비스는 항상 일정 수 이상의 가동 중인 컨테이너를 유지할 수 있어 무중단 배포(Zero-downtime Deployment)가 가능해진..

[Docker Swarm] 컨테이너 및 노드 장애 복구 메커니즘

Docker Swarm을 오케스트레이션 도구로 사용하는 가장 큰 이유는 서비스의 안정성을 보장하기 위함이다.Swarm 모드는 사용자가 선언한 'Desired State(목표 상태)'를 지속적으로 유지하려는 성질을 가진다.즉, 특정 컨테이너가 죽거나 노드 자체가 다운되더라도, Swarm 매니저는 이를 감지하고 스스로 복구(Self-healing)한다. Docker Swarm 클러스터를 구성하고, 컨테이너 강제 삭제와 노드 셧다운을 해 봄으로써 Swarm의 장애 복구 과정을 체험해보자.1. 테스트 환경 준비가상머신(VMware 등)을 이용해 master 노드 1대와 slave1, slave2 워커 노드 2대를 준비한다.테스트를 위해 nginx 이미지를 기반으로 한 testweb 서비스가 레플리카(Replic..

[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)라고 부르며, 구성 요소는 크게 매니저 노드와 워커..

우분투에서 도커로 MySQL 서버 구동하고 DBeaver로 실행하기

이번에는 도커를 이용해 MySQL 서버를 구동하고, GUI 툴인 DBeaver를 연동하여 데이터를 쉽게 관리하는 방법을 알아본다.1. Docker를 이용한 MySQL 컨테이너 구동가장 먼저 우분투(Ubuntu) 환경에서 도커를 사용하여 MySQL 데이터베이스 서버를 컨테이너 형태로 실행한다.docker run -p 3307:3306 --name my_db \-e MYSQL_ROOT_PASSWORD=1234 \-e MYSQL_DATABASE=my_db \-e MYSQL_USER=snowman \-e MYSQL_PASSWORD=snowman \-d mysql:5.7 -p 3307:3306: 호스트 머신의 3307 포트와 컨테이너 내부의 3306(MySQL 기본 포트) 포트를 연결(Port Forwarding..

도커 컨테이너 리소스 제한하기: 메모리, CPU, Block I/O 제어

도커 컨테이너는 호스트 OS의 커널을 공유하며 프로세스 단위로 격리되어 실행된다.리소스를 제한하지 않고 실행할 경우, 하나의 컨테이너가 호스트의 모든 자원을 독점하여 시스템 전체의 불안정성을 초래할 수 있다.따라서 안정적인 시스템 운영을 위해 컨테이너별로 CPU, 메모리, 디스크 I/O 사용량을 제어하는 방법과 원리를 알고 있어야 한다. 0. 사전 준비: 커널 파라미터 설정도커의 리소스 제한 기능은 리눅스 커널의 Cgroups(Control Groups) 기술을 기반으로 한다.특히 메모리 스왑(Swap) 제한 기능을 활성화하기 위해서는 부트로더 수준에서의 설정이 필요하다.# GRUB 설정 파일 수정sudo nano /etc/default/grub# 기존 설정에 cgroup_enable=memory swa..

우분투에 FTP 클라이언트 파일질라(FileZilla) 설치하고 실행해보기

지난 글에서 도커로 FTP 서버를 구축하고 테스트 파일을 업로드 해봤다.이번에는 리눅스(우분투) 환경에서 FileZilla를 설치하고, 로그를 검증해 본다.1. FileZilla란?FileZilla는 FTP, FTPS 및 SFTP 프로토콜을 지원하는 오픈 소스 기반의 크로스 플랫폼 GUI FTP 클라이언트이다. 터미널에서 ftp 명령어로도 접속이 가능하지만 FileZilla를 사용하는 이유가 있다.GUI: 내 컴퓨터(로컬)와 서버(리모트)의 파일 시스템을 좌우로 나란히 놓고 볼 수 있다. (아래 스크린 캡처 참고)Log: FTP 프로토콜이 오고 가는 과정을 실시간으로 상세하게 보여준다.Cross-platform: 오픈 소스로 윈도우, 맥, 리눅스를 모두 지원하는 FTP 클라이언트의 사실상 표준이라 할 수..

[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..