Docker 기초

Junghun Park·2022년 7월 7일
0

Dev-Ops

목록 보기
1/9

k8s와 Docker는 함께 컨테이너 어플리케이션을 빌드하고 동작시킨다.
Docker는 컨테이너, k8s는 컨테이너 운영에 도움을 주는 오케스트레이션 시스템.

kubectl

  • API 서버를 통해서 k8s와 통신하는 것

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 실제 포트 바인딩

0개의 댓글