숫자 붙이기
숨기기
🐳 도커(Docker)란?
- Docker는 애플리케이션을 컨테이너(container)라는 단위로 실행할 수 있도록 도와주는 가상화 기술입니다.
- 컨테이너를 사용하면 애플리케이션과 필요한 모든 환경(라이브러리, 설정 파일 등)을 하나로 묶어 어디서든 동일한 환경에서 실행할 수 있습니다.
💡 Docker의 핵심 개념
1️⃣ 컨테이너(Container)
- 애플리케이션과 실행에 필요한 모든 요소(코드, 라이브러리, 설정 등)를 포함한 독립적인 환경
- 가상 머신(VM)과 달리 OS 전체를 포함하지 않고, 경량화된 실행 방식을 가짐
- 어디서 실행해도 동일한 환경 보장 (Windows, Mac, Linux 상관없이 실행 가능)
2️⃣ 이미지(Image)
- 컨테이너를 실행하기 위한 설정된 파일 시스템과 애플리케이션을 포함한 패키지
- 여러 개의 레이어(layer)로 구성되며, 변경이 필요할 경우 새 레이어를 추가하는 방식
- Docker Hub 또는 개인 저장소에 업로드 가능
3️⃣ Dockerfile
- 컨테이너를 만들기 위한 설정 파일
- 컨테이너를 생성할 때 실행할 명령어, 환경 변수, 설치 – 패키지, 실행 프로그램 등을 지정
- docker build 명령어를 통해 이미지 생성 가능
4️⃣ Docker Hub
- 공식적으로 Docker 이미지를 공유하는 클라우드 기반 저장소
- 다양한 운영 체제, 개발 프레임워크, 데이터베이스 등의 공식 Docker 이미지를 제공
- 웹사이트 URL: https://hub.docker.com
5️⃣ Docker Compose
- 여러 개의 컨테이너를 한 번에 실행하기 위한 오케스트레이션 도구
- docker-compose.yml 파일을 이용해 웹 서버, 데이터베이스, 캐시 서버 등을 한꺼번에 실행 가능
💎 Docker의 장점
1️⃣ 환경 일관성 유지
- 개발 환경, 테스트 환경, 배포 환경이 모두 동일하게 유지됨 (더 이상 “내 로컬에서는 잘 되는데?” 없음!)
- 개발자가 코드를 실행하는 환경과 실제 서버 환경이 동일하므로 예측 가능한 동작 가능
2️⃣ 가벼운 컨테이너 (vs 가상 머신)
- 가상 머신(VM)은 각각 별도의 OS를 설치해야 하지만, Docker 컨테이너는 호스트 OS의 커널을 공유하기 때문에 훨씬 가볍고 빠름
- VM보다 메모리 사용량이 적고, 실행 속도가 빠름
3️⃣ 빠른 배포 및 확장
- 컨테이너 기반의 애플리케이션을 손쉽게 복사하고 여러 서버에서 실행 가능
- 마이크로서비스 아키텍처(MSA)와 궁합이 잘 맞음
4️⃣ 의존성 문제 해결
- 특정 애플리케이션이 요구하는 라이브러리, 패키지, 설정 값을 컨테이너 안에서 완전히 독립적으로 유지 가능
- 예: Python 3.7 기반 프로젝트와 Python 3.9 기반 프로젝트를 동시에 실행 가능
5️⃣ 다양한 운영 체제 지원
- Docker 이미지를 만들면 Linux, Windows, Mac 어디에서든 실행 가능
- 클라우드, 로컬, 서버 어디서든 배포 가능
⚠️ Docker의 단점
1️⃣ GUI 애플리케이션 지원이 어려움
- Docker는 CLI(Command Line Interface) 환경에서 실행되므로, GUI 기반의 프로그램 실행은 어려움
2️⃣ 성능 저하 가능성
- 네이티브 실행보다는 약간의 성능 저하가 발생할 수 있음
- 특히 디스크 I/O, 네트워크 속도가 중요한 애플리케이션에서는 성능 문제를 고려해야 함
3️⃣ 초기 학습 필요
- Docker를 처음 접하는 개발자에게는 Dockerfile, Compose, 네트워크 설정 등이 어렵게 느껴질 수 있음
- 컨테이너 간의 네트워크 연결, 데이터 볼륨 관리 등을 익히는 데 시간이 걸림
🖥️ Docker 기본 명령어
1. Docker 설치 확인
docker --version
2. Docker 컨테이너 실행
- hello-world 컨테이너를 실행하여 정상적으로 설치되었는지 확인
docker run hello-world
3. 실행 중인 컨테이너 확인
- 현재 실행 중인 컨테이너 목록 조회
docker ps
4. 종료된 컨테이너 포함한 전체 목록 확인
docker ps -a
5. 컨테이너 중지
docker stop [컨테이너 ID]
6. 컨테이너 삭제
docker rm [컨테이너 ID]
7. 모든 컨테이너 강제 삭제
docker rm -f $(docker ps -aq)
8. Docker 이미지 목록 확인
docker images
9. Docker 이미지 삭제
docker rmi [이미지 ID]
10. Docker Compose 실행
- docker-compose.yml 파일을 기반으로 여러 개의 컨테이너를 실행
docker-compose up -d
11. Docker 컨테이너내부로 파일복사
docker cp 로컬경로 아이디:컨테이너내부경로
- 예시 (로컬의 run.sh파일을 컨테이너내부의 /tmp로 복사):
$ docker ps # 컨테이너 아이디 확인
CONTAINER ID IMAGE COMMAND ...
1060abab28f6 server "bash -c 'server…" ...
$ docker cp run.sh 1060:/tmp # 파일 복사
Successfully copied 337kB to 1060:/tmp
🏁 결론
- Docker는 애플리케이션을 쉽고 빠르게 배포할 수 있도록 도와주는 컨테이너 기술입니다.
- 가벼우면서도 환경 일관성을 유지할 수 있어 개발, 테스트, 운영 환경에서 매우 유용하게 활용됩니다.
✅ Docker가 필요한 경우
- 여러 개발 환경(Windows, Mac, Linux)에서 동일한 환경을 유지해야 할 때
- 배포 자동화를 원할 때
- 여러 개의 애플리케이션을 컨테이너로 관리하고 싶을 때
- 마이크로서비스 아키텍처(MSA) 기반의 애플리케이션을 구축할 때
💡 Docker는 현대 소프트웨어 개발에서 필수적인 도구 중 하나이며, DevOps, CI/CD(지속적 통합/배포)에도 자주 사용됩니다! 🚀
참고자료
- https://www.docker.com, Docker의 공식 웹사이트
답글 남기기