섹션 10 - Docker & 컨테이너 - 요약
컨테이너
정의: 코드 + 코드를 실행하는 데 필요한 환경
하나의 task에 집중
ex. 백엔드 컨테이너, 프론트 컨테이너, DB 컨테이너
공유 및 재생산 가능
Stateless: 볼륨을 제외하고 컨테이너가 종료될 때 컨테이너의 모든 데이터는 사라짐
컨테이너는 이미지로 생성됨
이미지는 Dockerfile로 만들거나 Docker Hub에서 가져옴
즉, 하나의 이미지로 다중 컨테이너 실행 가능
이미지는 한번 생성되면 변하지 않음 Read-only
이미지는 Layer 기반 구조 -> 캐시 기능
컨테이너는 이미지 위에 올라가는 레이어
핵심 명령어
이미지 빌드:
docker build -t NAME:TAG .이미지를 컨테이너로 실행:
docker run --name NAME --rm -d IMAGEDocker Hub로 이미지 푸시:
docker push REPOSITORY/NAME:TAGDocker Hub에서 이미지 풀:
docker pull REPOSITORY/NAME:TAG
컨테이너에서 데이터 다루기
컨테이너는 호스트 머신 파일시스템과 분리된 고유의 파일시스템을 가진다.
바인드 마운트를 통해 호스트 머신 폴더와 연결
-v /local/path:/container/path
컨테이너가 삭제되면 데이터는 사라진다.
볼륨을 사용해서 컨테이너에서 생성된 데이터를 저장
로컬 시스템의 폴더로 미러링 되지만 해당 경로를 알 수 없음
명명된 볼륨: 데이터 유지
익명 볼륨: 컨테이너 설정에 의해 오버라이트 되어지는 데이터를 저장하는데 유용
-v NAME:/container/path
네트워크 통신
HTTP 통신 방법
컨테이너 IP 주소와 통신 But 불편
도커 네트워크를 생성해서 컨테이너 추가 -> 컨테이너 이름으로 통신 가능
도커 컴포즈
컨테이너를 실행할 때 필요한 많은 명령어를 도커 컴포즈에 정리 가능
도커 컴포즈를 통해 컨테이너 시작 및 초기화
다중 컨테이너 환경에 유용
docker-compose updocker-compose down
로컬 호스트 vs. 리모트 호스트
두 호스트에서 모두 사용하기 쉬운 이유: 격리, 캡슐, 재생산 가능
로컬에서 개발 작업하며 도커를 사용하면 다른 프로젝트들의 런타임 환경 및 버전과 분리할 수 있음
리모트 호스트에서도 쉽게 컨테이너를 업데이트할 수 있음
배포 시 주의사항
바인드 마운트 대신 일반 볼륨 또는 COPY 명령어를 사용해야 함
바인드 마운트는 실행 중인 컨테이너로 변경된 소스 코드 또는 일부 구성을 수시로 미러링하기 위한 로컬 개방용 도구
다중/단일 컨테이너에 여러 호스트가 필요할 수도 있음
이 경우
docker run및 도커 컴포즈만으로는 충분하지 않음물론 같은 호스트에서 여러 컨테이너를 실행할 수도 있음 (애플리케이션, 하드웨어, 트래픽 사항에 따라)
Multi-stage builds
단일 Dockerfile에서 여러 빌드 단계를 정의
통제력 vs. 편의성
보안과도 관련
통제를 할 수 있다는 건 모든 것을 책임져야 한다는 것(보안 포함)
관리형 서비스를 사용하여 통제력은 떨어지지만 요구되는 책임을 줄일 수 있음
Last updated