엔진
이미지
컨테이너
허브 가 있음.
...
버거킹을 사용하여 Docker의 주요 구성 요소를 비유하면
Docker Engine: 버거킹의 전체 운영 시스템
Docker Image: 버거킹의 표준화된 레시피
Docker Container: 실제로 준비된 햄버거
Docker Hub: 버거킹의 전세계 프랜차이즈 레시피 가이드북
따라서 Docker를 사용하면, 버거킹처럼 어디서든 일관된 품질과 경험을 제공할 수 있는 애플리케이션 환경을 구축할 수 있다!
YES.
Docker 컨테이너와 전통적인 VM (Virtual Machine)은 비슷한 격리와 리소스 할당 기능을 제공하지만, 아키텍처와 기술적 특징에는 큰 차이가 있습니다. 이러한 차이점으로 인해 Docker 컨테이너는 VM에 비해 여러 이점을 가집니다:
물론, Docker 컨테이너와 VM은 각기 다른 케이스와 요구 사항에 따라 적합할 수 있습니다. 보안, 완전한 격리, 하드웨어 가상화 등의 특정 요구 사항이 있는 경우 VM을 사용하는 것이 좋을 수 있습니다. 하지만 빠른 배포, 높은 이식성, 리소스 효율성 등을 원하는 애플리케이션 개발 및 배포에는 Docker 컨테이너가 더 적합할 수 있습니다.
로컬에 없던 "Hello World" 메뉴 (즉, Docker의 "hello-world" 이미지)는 Docker Hub라는 중앙 저장소에서 가져왔습니다.
Docker Hub는 Docker 이미지들이 저장되어 있는 공개적인 저장소입니다. 개발자들은 자신들이 만든 Docker 이미지를 Docker Hub에 올려서 다른 사람들과 공유할 수 있습니다. 반대로, 사용자들은 Docker Hub에서 필요한 이미지를 검색하고 다운로드하여 사용할 수 있습니다.
레스토랑 비유로 돌아가보면, Docker Hub는 큰 중앙 주방이나 공급 업체로 생각할 수 있습니다. 레스토랑은 메뉴에 없는 특별한 재료나 요리를 중앙 주방이나 공급 업체로부터 주문하여 가져올 수 있습니다.
따라서 docker run hello-world 명령을 실행할 때, 로컬에 "hello-world" 이미지가 없으면 Docker는 자동으로 Docker Hub에서 해당 이미지를 다운로드하여 로컬에 저장하고, 그 이미지를 기반으로 컨테이너를 실행하게 됩니다.
대표적인 이미지
Base OS 이미지:
ubuntu, debian, centos, alpine 등 다양한 리눅스 배포판을 기반으로 하는 기본 OS 이미지입니다.웹 서버 및 프록시:
nginx: 웹 서버, 리버스 프록시, 로드 밸런서 등 다양한 용도로 사용되는 소프트웨어입니다.apache, httpd: 널리 사용되는 웹 서버 소프트웨어입니다.데이터베이스:
mysql, postgres, mongo, redis 등 다양한 데이터베이스 소프트웨어 이미지입니다.개발 언어 및 프레임워크:
node, python, ruby, java, golang 등의 프로그래밍 언어 런타임 이미지.django, express, flask 등의 웹 프레임워크 이미지.도구 및 서비스:
jenkins: CI/CD(지속적 통합/지속적 배포) 작업을 위한 자동화 서버입니다.elasticsearch: 검색 및 로그 분석을 위한 서비스입니다.rabbitmq, kafka: 메시지 큐 및 스트리밍 플랫폼입니다.vsc, docker desktop 사용
Docker Desktop 설치함 & 실행
vsc 확장에서 Docker(ms배포)설치
vsc에서 장고 프로젝트 디렉토리 생성
requirements.txt생성
pip freeze > requirements.txt프로젝트 루트에 Dockerfile이라는 파일 생성 및 아래와 같이 작성함(확장자 없이 Dockerfile)
FROM python:3.9
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]프로젝트 루트 경로에서 아래 명령어로 이미지 빌드
docker build -t mydjangoapp .
2~3분 걸림
리눅스 환경에 설치되지 않는 라이브러리의 경우 충돌 일어남 >> 꼭 필요하지 않다면 requirements.txt에서 제거
빌드완료
컨테이너 실행하기
docker run -d -p 8000:8000 mydjangoapp
localhost:8000주소로 들어가서 장고서버 실행되고 있는 것 확인
현재 실행되고 있는 컨테이너리스트 확인하기
docker ps
실행되고 있는 컨테이너 리스트가 출력됨
모든 컨테이너 리스트 확인하기(실행여부 관계없이)
docker ps -a컨테이너 중지시키기
docker stop [컨테이너 ID or 이름]컨테이너 삭제시키기(먼저 중지 필요!)
docker rm [컨테이너 ID or 이름]컨테이너 리스트 확인으로 삭제된 것 확인