02. Week2 이론 (Docker, Yaml) - chuirang/DevOps GitHub Wiki

Docker 마스터

linux container와 docker

도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다. (from wiki)

Docker는 Linux 컨테이너를 만들고, 사용할 수 있도록 하는 컨테이너화 기술입니다. (from redhat)

Docker Architecture

Docker Architecture Diagram

client, daemon, container runtime, registry

Docker Objects

docker 가 제공해주는 기능은 이미지 관리(or build) 기능과 container runtime 관리 기능으로 나눈다

images: An image is a read-only template with instructions for creating a Docker container.

containers: A container is a runnable instance of an image.

관련 CLI 설명

Docker Engine Commands

https://github.com/Haufe-Lexware/docker-style-guide/blob/master/DockerImage.md

docker command cheat sheet

https://res.cloudinary.com/practicaldev/image/fetch/s--XlPOOC2x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jmg2rly6n0kyy9hkbty9.png

https://phoenixnap.com/kb/list-of-docker-commands-cheat-sheet

https://linoxide.com/docker-commands-cheat-sheet/

왜 Kubernetes 가 필요할까?

Docker 만으로 어려운 이유 -> 오케스트레이션 필요

  • 단순한 nw feature

  • scheduling 개념 필요

Docker 와 Kubernetes 의 연결관계

Yaml 마스터

시스템 간 데이터를 주고 받을 때 데이터를 구조화된 데이터 형식으로 전달할 필요가 있고, 그러한 약속으로 xml, json 과 같은 포맷을 사용해 왔고 최근 yaml도 많이 쓰이고 있습니다.

kubernetes 에서는 object를 생성할 때 kubectl 명령에 yaml 형식의 메니페스트 파일을 지정하여 apiserver 로 전달합니다.

yaml은 구조화된 형식의 parent - child 관계를 indent 로 구분합니다.

https://www.inflearn.com/questions/16184

특정 Object에 대한 yaml을 확인

$ kubectl get pod <pod_name> --oyaml

$ kubectl create deploy nginx --image=nginx --dry-run=client -oyaml > ginx-depoy.yaml

yaml 에서 살펴보는 kubernetes 컨셉

https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/kubernetes-objects/#%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-%EB%AA%85%EC%84%B8-spec-%EC%99%80-%EC%83%81%ED%83%9C-status

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2021-08-12T02:21:10Z"
  generation: 14
  labels:
    app: sampleapp
  name: sampleapp
  namespace: default
  resourceVersion: "7049194"
  uid: 115838a5-6e61-4a5a-891b-23e15c46807a
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: sampleapp-container
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: sampleapp-container
    spec:
      containers:
      - env:
        - name: PORT
          value: "18186"
        image: chuirang/sampleapp:latest
        imagePullPolicy: Always
        name: sampleapp
        ports:
        - containerPort: 18186
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  availableReplicas: 1
  conditions:
  - lastTransitionTime: "2021-08-12T02:21:16Z"
...
  observedGeneration: 14
  readyReplicas: 1
  replicas: 1
  updatedReplicas: 1
⚠️ **GitHub.com Fallback** ⚠️