02. Week2 이론 (Docker, Yaml) - chuirang/DevOps GitHub Wiki
도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다. (from wiki)
Docker는 Linux 컨테이너를 만들고, 사용할 수 있도록 하는 컨테이너화 기술입니다. (from redhat)
client, daemon, container runtime, registry
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.
https://github.com/Haufe-Lexware/docker-style-guide/blob/master/DockerImage.md
https://phoenixnap.com/kb/list-of-docker-commands-cheat-sheet
https://linoxide.com/docker-commands-cheat-sheet/
Docker 만으로 어려운 이유 -> 오케스트레이션 필요
-
단순한 nw feature
-
scheduling 개념 필요
Docker 와 Kubernetes 의 연결관계
-
kuberentes 는 자체 컴포넌트가 아닌 부분은 모두 Interface 형태
-
Docker 는 container rumetime 으로 들어가는 CRI의 한 형태
-
Docker deprecated
시스템 간 데이터를 주고 받을 때 데이터를 구조화된 데이터 형식으로 전달할 필요가 있고, 그러한 약속으로 xml, json 과 같은 포맷을 사용해 왔고 최근 yaml도 많이 쓰이고 있습니다.
kubernetes 에서는 object를 생성할 때 kubectl 명령에 yaml 형식의 메니페스트 파일을 지정하여 apiserver 로 전달합니다.
yaml은 구조화된 형식의 parent - child 관계를 indent 로 구분합니다.
https://www.inflearn.com/questions/16184
$ kubectl get pod <pod_name> --oyaml
$ kubectl create deploy nginx --image=nginx --dry-run=client -oyaml > ginx-depoy.yaml
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