교육/[온라인] KOSTA EDU

도커와 쿠버네티스 입문과 활용

코드몬스터 2024. 10. 28. 09:22
728x90

 

강의 내용과 개인적으로 실습하면서 작성한 내용을 정리한 내용입니다.

 

 

교육 날짜: 10/28 ~ 10/30(총 3일)

교육 시간: 09:00 ~ 18:00


 

예시) 개발은 python으로 하고 고객사 서버는 python3만 사용하도록 하면 어떻게 진행할 것인가?

 

Q: 패널티를 감수하고 다시 python 코드를 python3 문법으로 수정할 것인가?

A: 이러한 문제를 해결하기 위해 DevOps 로 처리했다.

 

여러 상황이 있겠지만, 도커 같은 컨테이너를 사용하는 이유에 대해 설명해주시려고 한 것 같다..!!


Docker

1. Container VS Virtual Machine

Simply put, containers are isolated processes for each of your app's components. Each component - the frontend React app, the Python API engine, and the database - runs in its own isolated environment, completely isolated from everything else on your machine.

 

Here's what makes them awesome. Containers are:

  • Self-contained. Each container has everything it needs to function with no reliance on any pre-installed dependencies on the host machine.
  • Isolated. Since containers are run in isolation, they have minimal influence on the host and other containers, increasing the security of your applications.
  • Independent. Each container is independently managed. Deleting one container won't affect any others.
  • Portable. Containers can run anywhere! The container that runs on your development machine will work the same way in a data center or anywhere in the cloud!

 

 

2. Image

 

3. Docker 개요

컨테이너 개념을 사용하여 애플리케이션 생성과 배포 과정을 단순화하는데 사용되는 오픈 소스 컨테이너화 도구.

 

3.1) 리눅스 명령어

파일 및 디렉터리를 나열하는 명령어

  • ls -l
    • 현재 디렉터리의 모든 파일과 디렉터리의 상세 정보를 나열한다.
    • 파일에 대해 권한이 없이 없으면 명령어를 사용할 수 없다.
  • ls -ld
    • 지정한 디렉터리의 정보만 보여주고, 내부 파일 목록은 표시하지 않는다.
  • 출력 결과
    • d는 해당 파일이 디렉토리를 의미
    • r(읽기), w(쓰기), x(실행) 권한을 의미한다.
    • 첫 rwx는 소유자의 권한
    • 두 번째 rwx는 소유 그룹의 권한
      • x 실행 권한만 있다.
    • 세 번째 rwx는 기타 사용자의 권한
      • --- 는 아무 권한이 없다.
    • 12는 디렉터리에 있는 하위 파일과 디렉터리의 수입
명령어: ls -ld /var/lib/docker
결과: drwx--x--- 12 root(소유자) root(소유 그룹) [프로세스번호] [시간] [디렉토리 경로]



3.2) Docker가 사용하는 리눅스 기술

  • namespace
    • 프로세스가 시스템 리소스의 특정 그룹에 대해 독립적인 환경을 갖도록 하여 격리된 작업을 수행할 수 있게 하는 기능입니다.
    • 커널 리소스의 범위를 제한하여 프로세스가 서로 영향을 미치지 않도록 합니다. 네임스페이스로 격리된 프로세스는 격리된 리소스만 볼 수 있기 때문에 마치 별도의 운영 환경이 있는 것처럼 동작합니다.
  • cgroups(Control groups)
    • 각 프로세스가 사용할 수 있는 자원에 대한 제어를 가능하게 해주는 리눅스 커널 (fs → systemd)
    • 리소스 제한, 우선순위 설정, 격리 및 모니터링을 통해 개별 프로세스나 프로세스 그룹이 시스템 자원을 지나치게 점유하는 것을 방지하고, 각 프로세스가 필요한 만큼의 자원을 안정적으로 확보할 수 있도록 돕습니다.
  • Union filesystem
    • 리소스 제한, 우선순위 설정, 격리 및 모니터링을 통해 개별 프로세스나 프로세스 그룹이 시스템 자원을 지나치게 점유하는 것을 방지하고, 각 프로세스가 필요한 만큼의 자원을 안정적으로 확보할 수 있도록 돕습니다.

3.3) Docker Architecture

docker cli 

          → dockerd 

                    → containerd (Container Runtime Interface, CRI) 

                              → containerd-shim, runc (Open Container Initiative, OCI)

 

3.4) Docker Command

docker --help 명령어를 작성하면 아래와 같이 나온다.

[educafe@docker2614:~]$ docker --help
 
Usage:  docker [OPTIONS] COMMAND
 
A self-sufficient runtime for containers
 
Common Commands:
  run         Create and run a new container from an image
  exec        Execute a command in a running container
  ps          List containers
  build       Build an image from a Dockerfile
  pull        Download an image from a registry
  push        Upload an image to a registry
  images      List images
  login       Log in to a registry
  logout      Log out from a registry
  search      Search Docker Hub for images
  version     Show the Docker version information
  info        Display system-wide information
  
  
  이하 생략...

 

 

명령어 예시

  • image build는 명령어 그대로 이미지를 빌드하겠다는 의미
  • . 은 현재 디렉터리를 의미하며, 디렉터리 내에서 Dockerfile과 관련된 파일을 참조
  • -t 는 태그 옵션으로, 빌드하는 이미지에 이름을 붙이는 역할
docker image build . -t educafe/myapp:v1

 

4. Docker Image Build

 

 

 

 

 

 

Dockerfile 

주요 명령어 예시

FROM python:3.12
WORKDIR /usr/local/app

# Install the application dependencies
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# Copy in the source code
COPY src ./src
EXPOSE 5000

# Setup an app user so the container doesn't run as the root user
RUN useradd app
USER app

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]

 

 

FROM

WORKDIR

COPY

RUN

EXPOSE

 

 

 


메모

resolv.conf 가 있다는 것은 DNS 사용이 가능하다는 것이다.

overlay????

 

diff 는 이전 레이어하고 차이가 있다는 것을 의미한다.

 

파일 마지막에 -init 으로 되어 있는 것은 무엇일까

컨테이너를 실행시키면 init layer를 똑같은거 두 개를 만든다?????

 

도커 내의 모든 명령어는  root 가 실행시키고 있다.

→RUN useradd -m educafe -s /bin/bash 로 해줘야 한다.

→ USER educafe

→ -it 라는 플래그가 필요하다.

 

 

merged 라는 곳에서 확인했는데 컨테이너를 지우면 사라진다.

→ 그래서 볼륨을 사용해서 data를 처리한다/

 

 

overlay

 

-----------

29일 화요일

호스트에서 데이터를 만들면 컨테이너 모델이 동시에 호스트 데이터를 사용해서 여러 번 학습시킬 수 있다.