1. 개요
Docker Alpine은 이미지 크기를 최소화해 가볍고 빠른 컨테이너 실행을 가능하게 하는 Docker 이미지다.
Windows 환경에서의 Server Core나 Nano Server와 유사한 개념이다.
2. 특징
3. 활용 예시
busybox처럼 약 8MB의 초소형 Linux 기반으로도 수백 개 서버 운영 가능
웹 서버 예시:
4. 요약
Docker Alpine = “작고 빠른 경량 Linux Docker 이미지”
→ 저장 공간 절약 + 다중 컨테이너 운영에 최적


docker ps한 결과
1/3 크기임.



컨테이너를 start했는데
ps에 뜨지않음.
그래서 log 해봄.
데이터베이스의 환경변수가 비어있는게 원인임을 알 수 있음.
역할:
특정 컨테이너의 활동 이력(로그)을 보여줌.
표준 출력(StdOut)과 에러(StdErr) 로그를 통해 컨테이너 내부 동작을 확인할 수 있다.
명령어 형식:
docker logs [OPTIONS] CONTAINER
주요 옵션:
-f : 실시간 로그 출력 (follow log output)-n : 마지막 n개의 로그만 출력 (tail string)-t : 로그에 타임스탬프 표시 (timestamps)기타:
로그 데이터는 외부 Ubuntu 노드 등에서 수집 및 관리 가능
정의:
다양한 로그를 수집 및 저장하는 오픈소스 로깅 툴.
컨테이너 로그를 AWS S3, Hadoop HDFS, MongoDB 등으로 전송 가능.
특징:
요약:
docker logs→ 컨테이너의 로그를 실시간 확인
fluentd→ 로그를 중앙 집중식으로 수집·저장 (AWS, Hadoop, MongoDB 등)

docker run -d --name flunetd -p 24224:24224 -v $(pwd)/fluent.conf:/fluent/etc/fluent.conf -e FLUENTD_CONF=fluent.conf alicek106/fluentd:mongo
docker images
docker run -d -p 8000:80 --log-driver=fluentd --log-opt fluentd-address=192.168.100.180:24224 --log-opt tag=docker.nginx.webser nginx:latest
Docker 이미지로 실행되는 컨테이너들은 수평적 개념으로 관리된다.
즉, 각 컨테이너가 CPU, RAM, HDD(Block I/O) 등의 리소스를 개별적으로 분할하여 사용하도록 설정할 수 있다.
✅ 따라서 컨테이너 생성 시 리소스 한정 옵션을 설정하는 것이 중요하다.
예: --memory, --cpus, --blkio-weight 등
컨테이너는 리소스를 명시적으로 제한하지 않으면 자원 경쟁이 발생할 수 있음.
따라서 CPU, RAM, I/O 등을 적절히 분배하여 효율적으로 운영하는 것이 핵심이다.
| 구분 | 명령어 | 설명 |
|---|---|---|
| RAM 제한 | docker run --memory="1g" ubuntu:16.04 | 컨테이너가 사용할 메모리(RAM)를 1GB로 제한 |
| CPU 제한 | docker run -it --cpu-shares 1024 ubuntu:16.04 | CPU의 가중치(비율)를 설정. 기본값은 1024 (1MB 기준) |
| 디스크 I/O 제한 | docker run -it --device-write-bps /dev/sda:1mb ubuntu:16.04 | HDD의 입출력 속도(초당 1MB) 제한 |
리소스 확인
docker inspect [컨테이너명 또는 ID]
→ 현재 컨테이너의 메모리, CPU, I/O 제한 설정을 확인 가능
리소스 변경
docker update [옵션] [컨테이너명]
→ 실행 중인 컨테이너의 리소스 제한 값을 동적으로 수정 가능
--memory: RAM 제한--cpu-shares: CPU 사용 비율 제한--device-write-bps: HDD I/O 속도 제한inspect: 설정 확인update: 설정 변경
docker run --name cpu-share --cpu-shares 1024 ubuntu:14.04
root@ubuntu18-1:/home/ubuntu# docker run --name cpu_1024 --cpu-shares 1024 alicek106/stress stress -cpu 1

htop

기존에는 Linux 서버에 직접 여러 서비스를 설치하여 운영했지만,
이제는 Docker 컨테이너를 이용해 동일한 서비스를 손쉽게 구축할 수 있다.
예시:
Nginx 웹 서버, FTP 서버, MySQL DB 서버 등을 각각 컨테이너로 분리 실행
| 구분 | Linux 기본 서비스 | Docker에서 사용 예시 |
|---|---|---|
| 웹 서버 | Apache2 | Nginx |
| FTP 서버 | vsFTP (기본) / pureFTP / wuFTP | pureFTP, wuFTP |
| DB 서버 | PostgreSQL, MariaDB | MySQL |
pureFTP, wuFTP 역시 널리 사용된다.https://hub.docker.com)에서Docker를 사용하면 웹 서버(Nginx), FTP 서버(vsFTP, pureFTP),
DB 서버(MySQL) 등을 컨테이너 단위로 손쉽게 구성하고
서비스 환경을 빠르게 배포·관리할 수 있다.
docker run -d 21:21 -p 30000-30002:30000-30002 --name=ftpd gimoh/pureftpd -c 3 -j -l puredb:/etc/pureftp.pdb -p 30000:30002
docker images
docker exec -it ftpd /bin/sh -l
adduer-ftp paul -m
paul
paul
ftp -p localhost 21








그러면 설치가 된다.





여기서도 볼 수 있음.
docker yml

version: '3.1'
services:
db:
image: mysql(:5.7)
restart: always
command: --lower_case_table_names=1 ## 대소문자 구분한다는 의미
container_name: mysql-db
environment:

yaml 파일 실행.

외부에서 생성 확인.
| 구분 | Dockerfile | docker-compose.yml |
|---|---|---|
| 목적 | 하나의 이미지를 만드는 스크립트 | 여러 컨테이너를 조합하여 실행 관리 |
| 실행 명령 | docker build, docker run | docker-compose up, docker-compose down |
| 초점 | 이미지 생성 | 컨테이너 orchestration (조합, 연결, 네트워크 설정 등) |
docker-compose up 명령어 하나로 전체 환경을 실행 가능version: '3'
services:
db:
image: mysql:8.0
container_name: mysql_db
environment:
MYSQL_ROOT_PASSWORD: mypw
MYSQL_DATABASE: mydb
ports:
- "3306:3306"
web:
image: nginx:latest
container_name: nginx_web
ports:
- "8080:80"
depends_on:
- db
docker-compose.yml은 여러 컨테이너를 한 번에 정의하고 관리하기 위한
YAML 기반 설정 파일로, 복잡한 환경을 자동화할 때 필수적이다.

edit connection(우클릭해서)


지금까지의 Docker 실습은 하나의 Ubuntu 노드(서버) 에서 컨테이너를 실행하는 방식이었다.
하지만 단일 노드에서 여러 컨테이너를 운영하면,
CPU·RAM·HDD 등의 자원이 부족해지거나 노드 자체에 문제가 생길 경우
모든 컨테이너가 동시에 장애를 겪을 위험이 있다.
이 문제를 해결하기 위해 여러 노드를 묶어 하나의 클러스터처럼 운영하는 방식이 바로
👉 Docker Swarm 이다.
| 구분 | 설명 |
|---|---|
| Swarm Cluster | 여러 Docker 노드를 묶은 집합 (Manager + Worker 구조) |
| Manager Node | 클러스터를 관리하고 작업(Task)을 스케줄링 |
| Worker Node | 실제 컨테이너(Task)를 실행하는 노드 |
| Service | 여러 개의 컨테이너를 묶어 하나의 애플리케이션 단위로 정의 |
| Task | 각 노드에서 실행되는 실제 컨테이너 인스턴스 |
| Load Balancing | 여러 노드에 컨테이너를 분산 배치하여 자원 효율성을 높임 |
Ubuntu 1세션을 Manager로 두고, Worker 1/2 노드 추가
masterworker1, worker2필요한 설정 파일
/etc/hostname/etc/network/interfaces (노드 간 통신 IP 설정)Hadoop 실습 구조처럼
master, slave1, slave2 형태로 동일한 구조를 사용 가능Multi-Kube나 Vagrant 활용 가능
vagrant up 으로 여러 VM을 동시에 띄워| 명령어 | 설명 |
|---|---|
docker swarm init | 현재 노드를 Swarm Manager로 초기화 |
docker swarm join | 다른 노드를 Worker로 클러스터에 참여 |
docker node ls | 클러스터에 등록된 노드 목록 확인 |
docker service create | Swarm 서비스(컨테이너 그룹) 생성 |
docker service ls | 실행 중인 서비스 목록 확인 |
docker service ps [서비스명] | 각 서비스의 Task(컨테이너) 상태 확인 |
Docker Swarm은 여러 노드를 하나의 클러스터로 묶어
자원 활용을 최적화하고, 장애 시 자동 복구 및 부하 분산을 수행하는 오케스트레이션 도구이다.
Kubernetes보다 간단하지만, 개념적으로 동일한 구조(Manager/Worker, Task, Service)를 가진다.
Docker Swarm Mode는 Hadoop의
master(NameNode) ↔ slave(DataNode) 구조와 비슷한 개념이다.
즉, 매니저(Manager) 노드와 워커(Worker) 노드로 구성된다.
| 구분 | 설명 |
|---|---|
| Manager Node (매니저 노드) | 워커 노드들을 관리하는 마스터 역할. 클러스터 제어, 스케줄링, 서비스 배포 관리 |
| Worker Node (워커 노드) | 실제 컨테이너(Task)를 실행하는 노드. 매니저의 명령에 따라 컨테이너를 생성/삭제 |
| Slave 역할 | Hadoop의 DataNode처럼, 실질적인 실행 담당 노드 |
💡 매니저 노드에서도 컨테이너를 실행할 수 있지만,
주로 워커 노드가 실제 서비스 수행을 담당한다.
예를 들어,
웹 서버 컨테이너 4개가 항상 실행되어야 한다면
Swarm은 매니저가 컨테이너 개수를 자동으로 유지(Replicas 관리)
또한, 컨테이너 업데이트나 업그레이드 시
순차적으로 하나씩 교체(rolling update)하여 서비스 중단 없이 업데이트 수행
Swarm Mode는
여러 노드(Manager + Worker)로 구성된 클러스터 환경에서
컨테이너를 자동 배치·복구·업데이트 하며
Hadoop의 master/slave 구조와 유사한 분산형 오케스트레이션 시스템이다.
Swarm 실습
docker swarm init --advertise-addr 192.168.100.180
