-
애플리케이션을 컨테이너(Container) 단위로 패키징하고 실행할 수 있게 해주는 기반 가상화 플랫폼
소프트웨어 개발, 배포, 실행 환경을 표준화
어디서나 일관되게 동작하도록 도움Docker란?
- 리눅스의 컨테이너 기술(Linux Containers, LXC)을 기반
- 개발 환경, 테스트 환경, 배포 환경 간의 불일치를 제거
- 컨테이너
- 애플리케이션과 그 의존성을 포함한 경량화된 독립 실행 환경
- 실행 중인 Docker 이미지.
- 애플리케이션과 실행 환경이 포함
- 이미지
- 컨테이너를 생성하기 위한 템플릿(애플리케이션과 의존성의 스냅샷)
- Dockerfile을 통해 이미지를 생성
- Dockerfile
- 이미지를 생성하기 위한 스크립트.
- 각 명령어가 이미지의 새로운 레이어를 생성
FROM ubuntu:20.04 RUN apt-get update && apt-get install -y nginx CMD ["nginx", "-g", "daemon off;"]
특징
- 경량성
- 컨테이너는 호스트 OS의 커널을 공유하므로 가상머신(VM)보다 가볍고 빠름
- 이식성
- 한 번 패키징한 컨테이너는 OS와 관계없이 어디서나 실행(Docker가 설치된 환경).
- 빠른 실행
- 컨테이너는 가상머신처럼 부팅할 필요 없이 즉시 시작
- 이미지 재사용
- Docker 이미지는 계층 구조로 되어 있어 변경된 부분만 업데이트
- 환경 격리
- 서로 다른 컨테이너는 독립된 환경에서 실행되므로 충돌을 방지
장점
- 개발 및 배포 효율성
- 개발 환경, 테스트 환경, 프로덕션 환경 간의 불일치 문제를 해결
- 컨테이너 이미지를 사용해 일관된 배포가 가능
- 리소스 효율성
- VM에 비해 가볍고 빠르며 하나의 서버에서 더 많은 컨테이너를 실행
- 확장성
- 애플리케이션의 마이크로서비스 아키텍처 구현을 지원하며, 필요에 따라 컨테이너를 쉽게 확장하거나 축소
- 자동화된 워크플로우
- CI/CD 파이프라인에서 빌드, 테스트, 배포 작업을 자동화
- 오픈소스 및 풍부한 생태계
- 오픈소스로 제공되며 Docker Hub 같은 다양한 레지스트리에서 미리 작성된 이미지를 활용
단점
- 복잡한 네트워킹
- 여러 컨테이너 간의 통신을 설정하거나, 외부 네트워크와 연결하려면 추가 설정이 필요
- 호스트 OS 의존성
- 컨테이너는 호스트 OS의 커널을 공유하므로, 리눅스 기반이 아닌 애플리케이션의 실행은 제한적(윈도우 컨테이너는 별도 지원)
- 학습 곡선
- Docker의 기본 개념은 쉽지만, 실제로 Compose, Swarm, Kubernetes 등을 사용하려면 추가적인 학습이 필요
- 데이터 영속성 관리
- 컨테이너는 기본적으로 비휘발성데이터 영속성을 유지하려면 볼륨(Volume)이나 바인드 마운트를 사용
Docker를 사용하는 이유
Docker는 개발, 테스트, 배포의 전 과정을 효율적으로 관리
이를 통해 소프트웨어 개발의 복잡성을 줄이고 일관성을 유지
더 빠르고 효율적인 배포가 가능+) 명령어
1) 이미지 관련 명령어
- docker pull <이미지>
- 이미지를 다운로드
- docker build -t <이미지 이름>
- Dockerfile로 이미지 빌드
- docker images
- 로컬에 저장된 이미지 목록 확인
2) 컨테이너 관련 명령어
- docker run <이미지>
- 컨테이너 실행
- docker ps
- 실행 중인 컨테이너 목록 확인
- docker stop <컨테이너>
- 컨테이너 중지
- docker rm <컨테이너>
- 컨테이너 삭제
3) 기타 명령어
- docker logs <컨테이너>
- 컨테이너 로그 확인
- docker exec -it <컨테이너> bash
- 실행 중인 컨테이너에 접속
'CS > 웹개발' 카테고리의 다른 글
데이터 빠르게 찾기 - 인덱스 설정하기 (0) 2025.03.12 TDD (0) 2025.01.23 JPA N+1 문제 (0) 2025.01.19 CI/CD (1) 2025.01.16 JPA Dirty Checking (0) 2025.01.13 댓글