Docker
기본 정보
- 이름: Docker
- 분류: 컨테이너(Container) 플랫폼
- 개발사: Docker Inc.
- 최초 공개: 2013년
- 주요 용도: 애플리케이션 배포 및 실행 환경 관리
- 관련 주제: #Docker #Container #DevOps #클라우드 #배포
개요
Docker는 애플리케이션과 실행 환경을 하나의 컨테이너(Container)로 패키징하여 어디서나 동일한 환경에서 실행할 수 있도록 하는 플랫폼이다.
개발 환경과 운영 환경의 차이로 발생하는 문제를 줄일 수 있으며, 마이크로서비스(MSA), CI/CD, 클라우드 환경에서 널리 활용된다.
현재 DevOps와 클라우드 네이티브 개발의 핵심 기술 중 하나로 자리 잡고 있다.
주요 특징
- 운영체제 수준의 가상화
- 빠른 실행 속도
- 높은 이식성
- 이미지 기반 배포
- 버전 관리 가능
- 마이크로서비스 아키텍처 지원
- 클라우드 환경에 최적화
Docker 구조
Docker Client
↓
Docker Engine
↓
Docker Image
↓
Docker Container
↓
Application
기본 개념
Image
애플리케이션 실행에 필요한 파일과 설정을 포함한 템플릿이다.
예시
- nginx
- mysql
- redis
- ubuntu
- node
Container
Image를 실행한 실제 인스턴스이다.
컨테이너는 독립된 실행 환경을 제공한다.
Docker Engine
Docker를 실행하고 관리하는 핵심 프로그램이다.
Docker Hub
공식 이미지 저장소이다.
수많은 공개 이미지를 다운로드하여 사용할 수 있다.
동작 과정
Dockerfile
↓
docker build
↓
Image 생성
↓
docker run
↓
Container 실행
Dockerfile
예제
FROM php:8.3-apache
WORKDIR /var/www/html
COPY . .
EXPOSE 80
Docker 이미지를 생성하기 위한 설정 파일이다.
대표 명령어
이미지 조회
docker images
컨테이너 조회
docker ps
전체 컨테이너 조회
docker ps -a
이미지 다운로드
docker pull nginx
컨테이너 실행
docker run -d -p 80:80 nginx
컨테이너 중지
docker stop container_id
컨테이너 삭제
docker rm container_id
이미지 삭제
docker rmi image_name
Docker Compose
여러 컨테이너를 동시에 관리할 수 있는 기능이다.
예제
version: "3"
services:
nginx:
image: nginx
mysql:
image: mysql
php:
image: php:8.3-fpm
실행
docker compose up -d
종료
docker compose down
Volume
데이터를 영구적으로 저장하기 위한 기능이다.
docker volume create mysql_data
컨테이너를 삭제해도 데이터는 유지된다.
Network
컨테이너 간 통신을 지원한다.
docker network create app_network
대표 이미지
- nginx
- apache
- php
- mysql
- mariadb
- postgres
- redis
- node
- python
- ubuntu
웹 서비스 구성 예시
Browser
↓
Nginx
↓
PHP-FPM
↓
MySQL
↓
Volume
PHP 기반 CMS나 웹서비스에서 많이 사용하는 구조이다.
Docker와 Kubernetes
Docker
↓
Container
↓
Kubernetes
↓
Container 관리
Auto Scaling
Load Balancing
Rolling Update
Docker는 컨테이너를 만들고, Kubernetes는 다수의 컨테이너를 관리한다.
Docker의 장점
- 개발 환경 통일
- 배포가 간편
- 빠른 실행 속도
- 리소스 효율성
- 높은 이식성
- CI/CD 구축에 적합
- 클라우드 환경과 높은 호환성
Docker의 단점
- 초기 학습 비용
- 볼륨 관리 필요
- 컨테이너 네트워크 이해 필요
- 운영 환경에서 보안 설정 중요
- GUI 기반 애플리케이션에는 제한이 있을 수 있음
주요 활용 분야
- 웹 서비스
- REST API
- ERP
- AI 서버
- CI/CD
- DevOps
- MSA
- 테스트 환경 구축
- 개발 환경 통일
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
- Alpine 기반 이미지 사용
- 멀티 스테이지 빌드 적용
.dockerignore설정- 환경 변수는
.env파일로 관리 - 데이터는 Volume에 저장
- 이미지 크기 최소화
- Root 사용자 실행 지양
- Health Check 설정
- Docker Compose 활용
- Kubernetes 연계 고려
Docker와 함께 사용하는 기술
대표 활용 사례
- Laravel 개발 환경
- Spring Boot 배포
- Node.js API 서버
- WordPress 운영
- 그누보드 운영
- GitLab Runner
- Jenkins CI/CD
- AI 모델 서버
- Redis 캐시 서버
관련 문서
출처
- Docker 공식 홈페이지
- Docker 공식 문서
- Docker Hub Documentation