k8s와 Docker는 함께 컨테이너 어플리케이션을 빌드하고 동작시킨다.
Docker는 컨테이너, k8s는 컨테이너 운영에 도움을 주는 오케스트레이션 시스템.
kubectl
kustomize
- 컨테이너 기반의 어플리케이션을 효율적으로 운영할 수 있도록 도와주는 오케스트레이션 시스템, 매니페스트 파일을 좀 더 효율적으로 관리할 수 있도록 도와주는 도구
minikube
- 가상환경을 사용하여 쿠버네티스 클러스터 구현
- 드라이버를 선택하여 원하는 가상환경에서 구성 가능
도커 이미지와 컨테이너
- 이미지와 컨테이너는 도커에서 사용하는 가장 기본적인 단위
- 이미지와 컨테이너는 1:N 관계 ( 동일한 이미지를 여러 방법으로 실행 )
이미지
- 이미지는 컨테이너를 생성할 때 필요한 요소
- 컨테이너의 목적에 맞는 바이너리와 의존성이 설치됨
- 여러개의 계층으로 된 바이너리 파일로 존재
컨테이너
- 호스트와 다른 컨테이너로부터 격리된 시스템 자원과 네트워크를 사용하는 프로세스
- 이미지는 읽기 전용으로 사용
- 변경사항은 컨테이너 계층에 저장
- 컨테이너에서 무엇을 하든 이미지는 영향 받지 않음
이미지와 컨테이너의 관계 비교:
- 이미지 vs 컨테이너
- 프로그램 vs 프로세스
- 클래스 vs 인스턴스
도커 이미지의 이름 구성
저장소 이름/이미지 이름/이미지 태그
ex) fastcampus/nginx:1.21
도커 이미지 pull/push 시에 저장소 이름을 생략하면 기본 저장소인 도커 허브로 인식
도커 이미지 태그를 생략하면 최신 리비전을 가리키는 latest
도커 컨테이너의 라이프 사이클
실제로는 더 복잡하지만 기본적으로는 그림과 같음
컨테이너 명령어 모음
컨테이너 시작
- create / run 명령어 모두 이미지가 없을 경우 자동으로 pull을 먼저 수행하여 이미지를 다운받음
- create 생성, start 시작
- run 생성 및 시작 (docker run nginx)
Docker run options
- -i 호스트의 표준 입력을 컨테이너와 연결 (interactive)
- -t TTY 할당 (터미널 명령 정상 수행 가능)
- —rm 컨테이너 실행 종료 후 자동 삭제
- -d 백그라운드 모드로 실행 ( detached)
- —name hello-world 컨테이너 이름 지정
- -p 80:80 호스트-컨테이너간의 포트 바인딩
- -v /opt/example:/example 호스트-컨테이너간 볼륨 바인딩
- fastcampus/hello-world:latest 실행할 이미지
- my-command 컨테이너 내에서 실행할 명령어
컨테이너 상태 확인
- Docker inspect id || name
컨테이너 종료
- 컨테이너 종료 (SIGTERM 시그널 전달)
docker stop [container]
- 컨테이너 강제 종료 (SIGKILL 시그널 전달)
docker kill [container]
- 모든 컨테이너 종료
docker stop $(docker ps -a -q)
도커 엔트리 포인트, 커맨드
엔트리 포인트
- 도커 컨테이너가 실행할 때 고정적으로 실행되는 스크립트 혹은 명령어
- 생략할 수 있으며, 생략될 경우 커맨드에 지정된 명령어로 수행
커맨드
- 도커 컨테이너가 실행할 때 수행할 명령어 혹은 엔트리포인트에 지정된 명령어에 대한 인자 값
도커 환경변수
- -e, --env list
Set environment variables
- --env-file list
Read in a file of environment variables
도커 expose vs publish
- expose 문서화 용도
- publish 실제 포트 바인딩