[52, 53, 54] 바인드 마운트 (bind mount) 시작하기 바인드 마운트 (bind mount) 시작하기바인드 마운트(Bind Mount)를 활용한 개발 환경 구성 바인드 마운트 개념특징호스트 머신의 특정 경로와 컨테이너 내부 경로 직접 연결실시간 코드 변경 반영 가능개발 중 소스 코드 수정에 적합 일반 볼륨과의 차이경로 지정 : 호스트 경로 직접 지정 가능접근성 : 호스트에서 직접 파일 편집 가능용도 : 개발 중 소스 코드 변경 반영에 적합 바인드 마운트 설정기본 명령어# 익명 볼륨docker run -v 컨테이너 내의 경로# 명명 볼륨docker run -v 볼륨이름 : 컨테이너 내의 경로# 전체 경로 사용 (bind mount)docker run -v /호스트경로:/app 이미지명-- 볼륨 이름에 호스트경로 붙인것이 바인드 마운트# 단축 명령어# mac.. [50] 명명된(name) 볼륨으로 구조하기! 명명된(named) 볼륨으로 구조하기!Docker의 볼륨 유형과 데이터 관리 볼륨의 두 가지 유형익명 볼륨 (Anonymous Volumes)특징도커가 자동 관리임시적 특성컨테이너와 생명주기 연결생성 방법# Docekrfile에 적용VOLUME ["/app/feedback"]# 명령어에 적용docker run -v /app/feedback(컨테이너 내부 경로만) 이미지_이름한계컨테이너 제거 시 볼륨도 삭제 (--rm 사용 시)직접 접근 어려움컨테이너를 종료하고 수동으로 삭제하면, 볼륨이 삭제되진 않지만 새로 생성/실행할대마다 새 볼륨이 생성되기에 데이터 저장 안된다 명명된 볼륨 (Named Volumes)특징사용자가 이름 지정영구적 데이터 저장컨테이너 독립적생성 방법docker run -v feedba.. [47, 48] 볼륨 소개하기 볼륨 소개하기Docker의 데이터 지속성과 볼륨의 필요성 컨테이너 데이터 관리의 특징컨테이너 중지 vs 제거중지 시데이터 유지파일 시스템 보존재시작 시 데이터 접근 가능제거 시모든 데이터 삭제read-write 레이어 제거재생성 시 완전히 새로운 환경 데이터 저장 방식이미지 레이어: 읽기 전용컨테이너 레이어: read-write 가능컨테이너 제거 시 레이어 데이터 손실 볼륨(Volume) 솔루션볼륨의 개념호스트 머신의 폴더컨테이너와 연결 가능데이터 지속성 보장 볼륨 vs COPY 명령어COPY : 일회성 스냅샷볼륨 : 지속적인 양방향 연결 볼륨의 특징컨테이너 외부에 데이터 저장컨테이너 제거 후에도 데이터 유지양방향 데이터 동기화 장점데이터 지속성컨테이너 생명주기와 독립적안전한 데이터 보존재사용 가능 .. [46] 데모 앱 구축 & 이해하기 데모 앱 구축 & 이해하기Docker 컨테이너와 호스트 시스템 간의 파일 시스템 격리 이해하기 컨테이너 파일 시스템의 특징격리된 환경컨테이너는 독립적인 파일 시스템 보유호스트 시스템과 완전히 분리이미지 빌드 시점의 스냅샷 사용 파일 접근app.use(express.static('public'));// feedback 폴더에 엑세스할 수 있는 명령// 이 웹앱의 사용자는 이 폴더에 저장된 파일을 볼 수 있다.app.use('/feedback', express.static('feedback')); app.post('/create', async (req, res) => { const title = req.body.title; const content = req.body.text; const adjTitl.. [44] 데이터 카테고리 / 다양한 종류의 데이터 이해하기 Docker의 데이터 관리 방식 이해하기 데이터 종류애플리케이션 코드 및 환경특징이미지에 포함되는 소스 코드Dockerfile로 정의된 환경빌드 시점에 이미지에 포함속성읽기 전용변경 시 새 이미지 빌드 필요 임시 데이터특징애플리케이션 실행 중 생성되는 데이터컨테이너 내부에 저장컨테이너 종료 시 삭제 가능한 데이터속성읽기/쓰기 가능컨테이너의 추가 레이어에 저장컨테이너 생명주기와 연결 영구 데이터특징지속적으로 보관해야 하는 데이터사용자 계정, 데이터베이스 등컨테이너 재시작 후에도 유지 필요속성읽기/쓰기 가능볼륨을 통한 데이터 관리컨테이너 독립적 저장 데이터 저장 방식이미지 레이어읽기 전용빌드 시점에 고정모든 컨테이너가 공유컨테이너 레이어읽기/쓰기 가능컨테이너별 독립적임시 데이터 저장볼륨영구 데이터 저장컨테.. [38, 39, 40] 이미지 공유하기 - 도커 허브 이미지 공유하기 - 도커 허브 이미지 공유 위치Docker Hub공식 Docker 이미지 레지스트리공개/비공개 이미지 저장 가능무료로 사용 가능프라이빗 레지스트리기업 전용 저장소다양한 공급자 제공접근 제어 가능 Docker Hub 이미지 푸시 과정사전 준비도커 허브 가입레파지토리 생성# Docker Hub 로그인docker login 이미지 이름 설정아래에 들어가는 사용자명은 도커허브 가입시 사용자 이름아래에 들어가는 레포지토리명은 사용자가 만든 도커허브의 레파지토리 이름# 방법 1: 빌드 시 이름 지정docker build -t 사용자명/레포지토리명 .# 방법 2: 기존 이미지 태그 변경docker tag 기존이미지명 사용자명/레포지토리명기존 이름 변경은 기존 이미지에 덮어쓰기하는게 아니라 기존 이미.. [37] 컨테이너 이미지에 이름 지정/ 태그 지정하기 Docker 이미지와 컨테이너 이름 관리하기컨테이너 이미지에 이름 지정/ 태그 지정하기 컨테이너 이름 지정1. --name 옵션 사용# 컨테이너에 사용자 지정 이름 부여docker run --name myContainer 이미지ID# 예시docker run -p 3000:80 -d --rm --name goalApp 이미지ID2. 장점컨테이너 ID 대신 이름으로 참조 가능관리가 용이명령어 사용이 간편docker stop goalAppdocker start goalApp 이미지 태그 지정1. 태그 구조이름(repository):태그(tag)예: node:14, mysql:5.72. 이미지 빌드 시 태그 지정# -t 옵션으로 태그 지정docker build -t 이미지이름:태그 .# 예시docker b.. [36] 컨테이너에 / 컨테이너로 부터 파일 복사하기 Docker 컨테이너와 파일 복사하기 (docker cp)컨테이너에 / 컨테이너로 부터 파일 복사하기 docker cp 명령어 기본 사용법로컬 → 컨테이너로 복사docker cp 로컬경로 컨테이너이름:/컨테이너내부경로 컨테이너 → 로컬로 복사 docker cp 컨테이너이름:/컨테이너내부경로 로컬경로 사용 예시 파일 복사 # 단일 파일 복사docker cp test.txt 컨테이너이름:/app/# 특정 파일 추출docker cp 컨테이너이름:/app/log.txt ./logs/ 디렉토리 복사 # 전체 디렉토리 복사docker cp ./data 컨테이너이름:/app/# 디렉토리 추출docker cp 컨테이너이름:/app/data ./backup/ 사용 시나리오권장되는 사용 사례로그 파일 추출설정 파일 .. [33, 34] 이미지 & 컨테이너 삭제하기 [이미지 & 컨테이너 삭제하기, 중지된 컨테이너 자동 제거하기] 기본 명령어 정리# 실행 중인 컨테이너 목록docker ps# 모든 컨테이너 목록 (중지된 것 포함)docker ps -a# 모든 이미지 목록docker images 컨테이너 관리컨테이너 제거# 단일 컨테이너 제거docker rm 컨테이너이름# 여러 컨테이너 동시 제거docker rm 컨테이너1 컨테이너2 컨테이너3 자동 제거 설정새로 생성한 컨테이너에만 사용할 수 있어서 docker run 명령어에만 --rm 플래그 사용 가능docker start 명령어에선 사용 불가능# 컨테이너 종료 시 자동 제거docker run --rm 이미지이름 주의사항실행 중인 컨테이너는 직접 제거 불가제거 전 반드시 컨테이너 중지 필요docker stop 컨.. [32] 인터렉티브 모드로 들어가기 인터렉티브 모드로 들어가기Docker의 상호작용 모드 이해하기: Python 입력 앱 예제from random import randintmin_number = int(input('Please enter the min number: '))max_number = int(input('Please enter the max number: '))if (max_number Docker 실행 모드와 상호작용기본 실행의 문제점docker run 이미지ID출력은 보이지만 입력 불가사용자 입력이 필요한 앱은 실행 실패 상호작용 모드 실행# -i: interactive mode (입력 가능)# -t: terminal allocation (터미널 할당)docker run -it 이미지ID사용자 입력 가능터미널과 상호작용 가.. [29, 30] Attached & Detached 컨테이너 이해하기 Docker의 Attached & Detached 모드 이해하기 컨테이너 실행 모드1. Attached 모드컨테이너의 출력을 실시간으로 확인터미널이 컨테이너에 연결됨터미널 사용 불가 (블록됨)컨테이너는 포어그라운드에서 실행중2. Detached 모드백그라운드에서 컨테이너 실행터미널 사용 가능출력 결과 실시간 확인 불가컨테이너는 백그라운드로 실행중 주요 명령어 비교docker run# Attached 모드 (기본)docker run 이미지ID# Detached 모드docker run -d 이미지ID docker start # Detached 모드 (기본)docker start 컨테이너이름# Attached 모드docker start -a 컨테이너이름 컨테이너 관리 명령어컨테이너 목록 확인# 실행 중인 .. [26] 이미지 레이어 이해하기 도커 이미지의 레이어 아키텍처 이해하기\이미지 레이어 이해하기 레이어 기반 아키텍처기본 개념각 Dockerfile 명령어는 하나의 레이어 생성레이어는 순차적으로 쌓임한번 생성된 이미지는 읽기 전용캐싱 시스템도커는 각 레이어의 결과를 캐시변경되지 않은 레이어는 캐시 사용변경된 레이어부터 모든 후속 레이어 재실행 최적화 예시비효율적인 방식FROM nodeWORKDIR /appCOPY . /appRUN npm install문제점코드 변경시 npm install도 재실행불필요한 빌드 시간 증가 최적화된 방식FROM nodeWORKDIR /appCOPY package.json /appRUN npm installCOPY . /app장점종속성 설치 레이어 분리소스 코드 변경시 npm install 스킵빌드 시간 단.. 이전 1 2 3 4 다음