1. Docker란?
Docker는 컨테이너 기술을 활용해 애플리케이션을 신속하고 일관되게 배포할 수 있는 오픈소스 플랫폼이다. 애플리케이션과 해당 애플리케이션이 동작하는 데 필요한 라이브러리, 환경 설정, 의존성 등을 하나의 컨테이너에 패키징하여 어디서든 동일하게 실행할 수 있도록 한다.
2. Docker가 필요한 이유
(1) 환경 차이에 의한 오류 방지
- "내 로컬에서는 잘 되는데, 서버에서는 안 돼요" 문제를 해결할 수 있음
- 애플리케이션 실행에 필요한 환경을 컨테이너에 통째로 담아 어디서든 같은 환경을 재현할 수 있음
(2) 배포 및 확장 용이
- 컨테이너는 애플리케이션을 빠르게 배포하고, 필요할 때 쉽게 확장할 수 있음
- 스케일 아웃(Scale-out) 방식으로 동일한 컨테이너를 여러 개 띄워 트래픽을 분산 처리함
(3) 시스템 자원 절약
- 컨테이너는 가상 머신과 달리 OS를 공유하므로 가볍고 빠르게 실행됨
- 프로세스 단위로 동작하여 필요한 부분만 컨테이너화할 수 있음
(4) 일관된 개발 환경 유지
- 개발 환경, 테스트 환경, 배포 환경이 모두 동일하므로 환경 불일치로 인한 문제가 줄어듦
- 여러 명의 개발자가 동일한 컨테이너 환경에서 작업할 수 있음
3. Docker 작동 방식
Docker는 코드를 실행하는 표준 방식을 제공하며 컨테이너를 위한 운영 체제이다. 가상 머신이 서버 하드웨어를 가상화하는 방식과 비슷하게(직접 관리해야 하는 필요성 제거) 컨테이너는 서버 운영 체제를 가상화한다. Docker는 각 서버에 설치되며 컨테이너를 구축, 시작 또는 중단하는 데 사용할 수 있는 간단한 명령을 제공한다.
Hypervisor : 단일 물리적 머신에서 여러 가상 머신을 실행하는데 사용할 수 있는 소프트웨어
4. Docker를 사용하기 위한 툴
(1) Docker CLI
- Docker 명령어를 통해 컨테이너를 실행하고 관리하는 도구
(2) Docker Desktop
- Docker 엔진, CLI, Docker Compose 등을 포함한 GUI 기반 도구
(3) Docker Hub
- Docker 이미지를 저장하고 공유할 수 있는 공식 레지스트리
- MySQL, Nginx 등 여러 오픈소스 애플리케이션 이미지를 쉽게 받아와 사용할 수 있음
5. Docker Container와 Image
(1) Docker Container
- 이미지를 기반으로 실제 실행되는 인스턴스
- 컨테이너는 독립적으로 실행되며, 애플리케이션의 동작 환경을 제공함
- 가벼우며 빠르게 생성되고, 제거될 수 있음
(2) Docker Image
- 컨테이너 실행에 필요한 모든 것을 포함하는 불변(Immutable)의 패키지
- 애플리케이션, 라이브러리, 환경 설정 등을 담아 배포 및 실행의 표준이 됨
- 이미지는 빌드되어 Docker Hub 등 레지스트리에 업로드하거나 로컬에서 보관됨
레지스트리 : 도커 이미지를 관리하는 일종의 저장소
6. Docker Hub
- Docker 이미지를 공유하고 저장하는 클라우드 레지스트리 서비스
- 공식 이미지를 통해 애플리케이션을 쉽게 설치하고 활용할 수 있음
$ docker pull mysql
https://hub.docker.com/_/mysql
mysql - Official Image | Docker Hub
Quick reference Supported tags and respective Dockerfile links 9.1.0, 9.1, 9, innovation, latest, 9.1.0-oraclelinux9, 9.1-oraclelinux9, 9-oraclelinux9, innovation-oraclelinux9, oraclelinux9, 9.1.0-oracle, 9.1-oracle, 9-oracle, innovation-oracle, oracle8
hub.docker.com
7. Dockerfile이란?
- Docker 이미지를 만들기 위한 스크립트 파일
- 애플리케이션과 필요한 환경을 정의하여 이미지를 자동으로 생성함
- 코드 한 줄 한 줄이 이미지 생성 과정으로 기록됨
Dockerfile 예시
# 1. 베이스 이미지 설정
FROM eclipse-temurin:17-jdk
# 2. 작업 디렉토리 설정
WORKDIR /app
# 3. 의존성 캐싱을 위한 JAR 복사 및 빌드(gradle 사용)
COPY ./build/libs/*.jar app.jar
# 4. 컨테이너에서 실행할 명령어
CMD ["java", "-jar", "app.jar"]
# 5. 포트 개방
EXPOSE 8080
- FROM : 기반이 되는 이미지 지정
- COPY : 로컬 파일을 이미지에 복사
- CMD : 컨테이너가 실행될 때 수행할 명령를 설정
8. Docker Compose란?
- 여러 컨테이너를 동시에 관리하는 도구
- WAS, DB 등 복수의 컨테이너를 하나의 파일에서 정의하고 동시에 실행할 수 있음
- 컨테이너 간 네트워크, 볼륨 등의 설정을 쉽게 관리
docker-compose.yml 예시
version: '3.8'
services:
db:
image: mysql
container_name: mysql-container
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: roomescape
volumes:
- ~/mysql-data:/var/lib/mysql
ports:
- "3307:3306"
networks:
- roomescape-network
app:
build: .
container_name: roomescape-container
ports:
- "8081:8080"
depends_on:
- db
networks:
- roomescape-network
networks:
roomescape-network:
driver: bridge
- services : 컨테이너 정의 목록
- app : 애플리케이션 컨테이너 정의
- db : 데이터베이스 컨테이너 정의
- volumes : 데이터 영속화를 위한 볼륨 설정
참고 자료
https://tecoble.techcourse.co.kr/post/2022-09-20-docker-basic/
이론과 실습을 통해 이해하는 Docker 기초
본 포스팅은 도커에 대한 자세한 개념, 도커 기본 명령어, 컨테이너 실행 실습, 도커 컴포즈, 도커 이미지 빌드, 도커 허브에 이미지 배포 등 전반적인 도커 기초에 대한 내용을 다룬다. 도커 (Dock
tecoble.techcourse.co.kr
https://aws.amazon.com/ko/docker/
Docker란 무엇입니까? | AWS
Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리,
aws.amazon.com
https://www.dnsstuff.com/what-is-hypervisor
What Is a Hypervisor? Hypervisor Meaning, Types, and Examples - DNSstuff
Hypervisors allow for effective management of the virtual machine environment. Read definitions, examples, and types of hypervisor software on DNSstuff!
www.dnsstuff.com
'Backend > Infra' 카테고리의 다른 글
[Infra] 도커 스웜 (1) | 2025.01.11 |
---|---|
[Infra] 컨테이너 오케스트레이션 (0) | 2025.01.07 |
[Infra] 무중단 배포 적용하기(feat. Blud-Green Deployment) (1) | 2024.12.28 |
[Infra] 배포한 서버에 CI/CD 적용하기(feat. Jenkins) (0) | 2024.12.28 |
[Infra] WAS 서버를 배포하며 겪은 에러 해결 방법 (1) | 2024.12.28 |