Dockerfile 어떻게 동작하지 하다가 Docker 정리글을 쓰게됐다.

2024. 8. 6. 10:15Kubernetes

사전에 궁금한거 

  1. Docker 란?
  2. Docker 이미지 의 역할은? 
  3. DockerFile 이란? 
  4. DockerFile 사용법
  5. Dockerizing 이란?

위 5개가 궁금해서 찾아보게 되었다!

 

1.Docker 란?

  공부 전 공부 후
내용 - 컨테이너 단위로 프로세스를 실행하는 체계이다.  

- OS 와 패키징된 소스의 묶음인 이미지를 가지고 컨테이너단위로 프로세스를 띄워서 일반 VM 보다 독립적이고, 가볍고 빠르게 서버를 띄울 수있다. 



- "리눅스 컨테이너"를 만들고 사용할 수있게 하는 컨테이너 기술이다. 
- Docker 를 사용하면 컨테이너를 매우 가벼운 모듈식 가상머신처럼 사용할 수있다.
- Docker 기술은 Linux 커널, Cgroup, 네임스페이스등의 커널의 기능을 사용하여 프로세스를 분리 함으로써 독립적으로 실행할 수있게한다. 

출처: https://www.redhat.com/ko/topics/containers/what-is-docker

 

2.Docker 이미지의 역할은?

  공부 전 공부 후
내용 이미지는 특정 소프트웨어의 버전과 기능을 하나의 패키지로 압축한 형태이다.
예를들어 python 이미지를 압축했다면 그 이미지를 도커에서 실행시켰을때, 소프트웨어에서 제공하는 기능을 사용할 수있다. 이때 도커의 장점은 어느 운영체제든간에 이미지를 실행시키면 일관성있게 동작한다는 것이다. 
- Docker 는 컨테이너에 소프트웨어를 패키징하는 플랫폼이다.
- Docker 이미지는 컨테이너에 애플리케이션을 실행하는 라이브러리, 종속성이 포함된 패키지다. 
(= Docker 이미지는 컨테이너 생성에 필요한 지침이 적힌 읽기전용 템플릿이다.)  
- 높은 호환성: 컨테이너를 사용하면 환경에 상관없이 모든 대상시스템에 어플리케이션을 실행시킬 수있다.
의문   컨테이너가 어떻게 동작하길래 운영체제와는 별개로 독립적으로 작동할 수있는건지 궁금하다.

 

3. DockerFile 이란? 

  공부 전 공부 후
내용 dockerfile 자체는 From ~ 절로 시작해서
RUN, CMD , Entrypoint 등의 명령어를 쓴다.

Docker 에서 이미지를 생성하기 위한 스크립트 파일이다. 
Dockerfile 을 작성 후 빌드하면 dockerfile에 적힌 스크립트가 순서대로 실행된다.

 

 

4.Dockerfile 명령어 구성 

명령어 역할 예시

출처: https://github.com/tiangolo/uwsgi-nginx-flask-docker/blob/master/docker-images/python3.11.dockerfile
FROM base 이미지로 쓸 이미지 선언 FROM tiangolo/uwsgi-nginx:python3.11
LABEL 라벨링 LABEL maintainer="Sebastian Ramirez <tiangolo@gmail.com>"
COPY 파일 복사 COPY requirements.txt /tmp/requirements.txt
WORKDIR 작업디렉토리가 없으면 생성하고, 있다면 작업디렉토리에서 명령어를 수행한다. CD 와 동일 WORKDIR /app 
RUN 새로운 레이어에서 명령어를 생성하고 새로운 이미지를 생성한다.  RUN pip install --no-cache-dir -r /tmp/requirements.txt

RUN chmod +x /entrypoint.sh
CMD 컨테이너가 시작할때 실행하는 명령어
(dockerfile에서 한번만 실행가능)
RUN 은 이미지를 빌드할떄 사용하고
CMD 는 이미 만들어진(빌드완료된) 이미지에서 실행할때 쓰는 명령어다.
CMD는 한 도커파일내 CMD 가 여러번 나올경우 마지막 CMD만 유효하다.
CMD ["/start.sh"]
ENTRYPOINT  CMD 와 동일하게 컨테이너 시작시 실행하나 CMD는 param으로 대체 가능하나 entrypoint 는 대체 할수없다.

ENTRYPOINT도 CMD와 동일하게 여러개일경우 마지막 명령어만 유효하다.
ENTRYPOINT ["/entrypoint.sh"]

 

5.Dockerizing 이란?

도커 라이징이란 Docker 컨테이너를 사용해서 응용프로그램을 패킹 , 배포 , 실행하는 전과정을 말한다.