👨💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.
도커 (Docker) 의 주요 개념 중 컨테이너 (Container) 는 무엇이고, 어떻게 활용할 수 있는지 간략히 알아보았습니다.
질문 >
도커 (Docker) 의 주요 개념 중 컨테이너 (Container) 는 무엇이고, 어떻게 활용할 수 있나요?
답변 >
도커 컨테이너 (Docker Container)란?
도커 컨테이너(Docker Container)는 이미지를 기반으로 실행되는 독립적이고 가벼운 애플리케이션 실행 환경입니다. 애플리케이션 실행에 필요한 모든 것을 포함하며, 격리된 환경에서 작동합니다. 컨테이너는 프로세스 단위로 실행되며, 필요에 따라 쉽게 생성, 시작, 중지, 삭제할 수 있습니다.
컨테이너는 기본 운영 체제 커널을 공유하므로 가상 머신보다 가볍고, 실행 속도가 빠릅니다. 한 시스템에서 실행된 컨테이너는 다른 시스템에서도 동일하게 작동합니다.
컨테이너의 특징
- 격리성
- 컨테이너는 호스트 시스템 및 다른 컨테이너와 독립된 환경에서 실행됩니다.
- 파일 시스템, 네트워크, 프로세스 등이 격리되어 있어 충돌 가능성이 낮습니다.
- 가벼움
- 컨테이너는 가상 머신처럼 전체 운영 체제를 포함하지 않고, 필요한 라이브러리와 애플리케이션만 포함합니다.
- 빠른 실행
- 컨테이너는 수 초 안에 실행되며, 시작과 종료가 매우 빠릅니다.
- 일관성
- 동일한 컨테이너는 개발 환경, 테스트 환경, 운영 환경에서 동일하게 작동합니다.
컨테이너의 활용 방법
1. 애플리케이션 실행
컨테이너는 애플리케이션을 실행하기 위해 가장 기본적으로 사용됩니다. 이미지를 기반으로 컨테이너를 생성하고 실행할 수 있습니다.
docker run -it ubuntu:20.04 bash
- docker run: 컨테이너 생성 및 실행.
- it: 대화형 모드로 실행.
- ubuntu:20.04: 사용할 이미지 이름 및 태그.
- bash: 실행할 명령어.
2. 개발 환경 구축
개발 환경을 컨테이너로 구성하면, 개발자 간의 환경 불일치 문제를 해결할 수 있습니다.
docker run -it -v $(pwd):/app -w /app python:3.9 bash
- v $(pwd):/app: 현재 디렉토리를 컨테이너 내부의 /app 디렉토리에 마운트.
- w /app: 컨테이너의 작업 디렉토리를 /app으로 설정.
3. 테스트 및 디버깅
컨테이너를 사용하면 테스트 환경을 쉽게 생성하고, 실패한 환경을 쉽게 재현할 수 있습니다.
docker run -it my-app bash
4. 다중 컨테이너 서비스
여러 컨테이너를 함께 실행하여 마이크로서비스 환경을 구성할 수 있습니다. 예를 들어, 웹 서버, 데이터베이스 서버, 캐시 서버 등을 각각 컨테이너로 실행합니다.
docker network create my-network
docker run -d --name db --network my-network mysql:latest
docker run -d --name app --network my-network my-app
5. 컨테이너 데이터 관리
컨테이너 내부에서 생성된 데이터를 저장하거나 유지하기 위해 볼륨(Volume)을 사용합니다.
docker run -v my-volume:/data my-app
컨테이너 관리 명령어
- 컨테이너 실행
- 새 컨테이너를 생성하고 실행합니다.
docker run [옵션] 이미지명 [명령어]
- 컨테이너 목록 확인
docker ps # 실행 중인 컨테이너 목록
docker ps -a # 모든 컨테이너 목록 (중지된 컨테이너 포함)
- 컨테이너 중지
docker stop 컨테이너ID
- 컨테이너 삭제
docker rm 컨테이너ID
- 컨테이너 재시작
docker restart 컨테이너ID
- 컨테이너에 접속
docker exec -it 컨테이너ID bash
- 컨테이너 로그 확인
docker logs 컨테이너ID
컨테이너 활용 사례
- 마이크로서비스 아키텍처
- 각 서비스(예: 사용자 인증, 데이터베이스, 프론트엔드)를 개별 컨테이너로 분리하여 독립적으로 개발, 배포, 확장 가능.
- CI/CD 파이프라인
- 테스트 및 빌드 환경을 컨테이너로 실행하여 일관된 배포 환경 유지.
- 애플리케이션 샌드박싱
- 새로운 애플리케이션을 기존 시스템에 영향을 주지 않도록 테스트.
- 서버리스 컴퓨팅
- 특정 작업을 수행하는 단일 컨테이너를 실행하여 유연하게 서버 역할 수행.
컨테이너 실행의 예
1. 간단한 Nginx 서버 실행
docker run -d -p 8080:80 nginx
- d: 백그라운드에서 실행.
- p 8080:80: 호스트의 8080 포트를 컨테이너의 80 포트와 연결.
2. 데이터베이스 실행 (MySQL)
docker run -d -e MYSQL_ROOT_PASSWORD=root --name mysql-container mysql:latest
- e: 환경 변수 설정.
- -name: 컨테이너 이름 지정.
3. 웹 애플리케이션 실행
docker run -d -p 5000:5000 my-python-app
- 로컬 머신의 5000 포트를 컨테이너의 5000 포트와 연결.
컨테이너 관리 팁
- 중복된 컨테이너 제거: 필요하지 않은 컨테이너를 정리하여 시스템 자원을 확보.
docker rm $(docker ps -a -q)
- 리소스 모니터링: 실행 중인 컨테이너의 CPU 및 메모리 사용량 확인.
docker stats
- 볼륨 데이터 유지: 데이터를 컨테이너가 아닌 볼륨에 저장하여 데이터 유실 방지.
도커 컨테이너를 효과적으로 활용하면 애플리케이션 실행 환경을 안정적이고 효율적으로 관리할 수 있습니다. 😊
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."