- Java
- CKA
- gochannel
- DevOps
- SMTP
- kubernetesscheduling
- JVM
- Kubernetes
- aws
- aws ses
- SAA-CO3
- kubernetesstudyguide
- dMarc
- cloudnative
- SAA-CO2
- EKS
- kubernetes admission controller
- Lambda
- go
- nodeaffinity
- Certified Solutions Architect
- K8S
- kubernetes 클러스터 보안
- Fargate
- SPF
- containerorchestration
- DKIM
- kubernetesadmin
- 메일 인증 프로토콜
- Today
- Total
DevOps Tasks
Docker 란? 본문
Docker 란?
컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 컨테이너 도구
도커는 서비스를 운용하는데 필요한 실행환경, 라이브러리, 소프트웨어, 시스템 도구, 코드 등을 컨테이너라는 표준화된 단위로 추상화한다.
Dockerizing
Docker 컨테이너를 사용하여 응용프로그램(application)을 패킹 ( packing ), 배포 ( deploying ), 실행 ( running ) 하는 전 과정
한 마디로 우리가 작업하던 Docker 관련 일들이 모두 도커라이징 과정의 일부
Docker와 Virtual Machine
Virtual Machines
물리적 컴퓨터에서 실행하는 모든 소프트웨어를 실행하는 데 사용할 수 있는 ”소프트웨어 컴퓨터”
Docker Host
하나의 HostOS 위에 Docker를 설치하여 그 위에 각각의 Application 환경들을 설치 / 운영하는 형태
VM에는 Guest OS가 깔리고 Docker Conatiner는 그렇지 않다.
VM은 하나씩 늘 때마다 OS를 위한 자원을 할당해주어야 하는 반면에 도커는 Appliation을 구동하는데 필요한 패키지만 있으면 컨테이너를 구동시킬 수 있다.
Docker의 컨테이너는 Host OS의 커널을 공유한다.
자원의 효율성 측면에서 차이가 난다.
Docker Image Layers
docker pull 시 여러 개로 분리된 조각을 내려받는 것처럼 보인다.
이렇게 분리된 조각을 Layer 라고 부른다.
Layer는 도커 이미지가 빌드될 때 Dockerfile에 정의된 명령문을 순서대로 실행하면서 만들어진다.
이미지를 빌드할 때마다 이미 생성된 레이어가 캐시 되어 재사용되기 때문에 빌드 시간을 단축할 수 있다.
RUN, ADD, COPY 이 3가지 명령어들로 생성된 Layer는 파일 용량을 커지게 만들고 이미지 생성하는 시간도 길어지게 한다.
배포 파이프라인을 단축하기 위해선 해당 부분들도 고려하여 Dockerfile을 최적화해야 한다.
Dockerfile
FROM ubuntu:22.04
base 이미지 지정, 일반적으로 잘 알려진 공개 이미지 사용
이미지 경량화를 위해 alpine과 slim 형식 등의 이미지 사용
ENTRYPOINT ["java","-jar","/app.jar"]
이미지를 컨테이너로 띄울 때 항상 실행되어야 하는 커맨드 지정
이 커맨드로 실행된 프로세스가 죽을 때, 컨테이너도 따라서 종료
RUN make /app
SHELL에서 커맨드를 실행하는 것처럼 이미지 빌드 과정에서 필요한 커맨드 실행
CMD python /app/app.py
이미지를 컨테이너로 띄울 때 디폴트로 실행할 커맨드
컨테이너 실행 시 실행
ENV FOO=/bar
컨테이너 안의 환경 변수를 정의 (환경변수)
ARG FOO=hello
ARG FOO=${var}
이미지 빌드를 할 때 사용하는 변수
Dockerfile에서의 변수
EXPOSE 8080
컨테이너가 노출하는 포트
# Dockerfile
# 2 Layer Create
RUN apt-get update
RUN apt-get install vim
# 1 Layer Create
RUN apt-get update && apt-get install vim
RUN 명령을 여러 개 지정하는 경우 여러 개의 Layer가 생성한다.
RUN 명령을 한 줄로 지정하는 경우 하나의 Layer 생성한다.
- && 등을 이용해 명령어를 연결해 주는 것으로도 이미지의 크기를 줄일 수 있다.
'Docker' 카테고리의 다른 글
Docker Command (1) | 2023.12.24 |
---|---|
Docker Multi-Stage Build 로 이미지 사이즈 및 빌드 속도 최적화하기 (2) | 2023.12.23 |