docker

류지수·2023년 4월 24일
0

Study

목록 보기
2/10
post-thumbnail

docker

Docker란?

리눅스 컨테이너를 기반으로 하여 특정한 서비스를 패키징하고 배포하는데 유용한 오픈소스 프로그램

Docker의 장점


  1. 가상화를 통해 환경을 신경 쓸 필요가 없습니다.
  2. 실행이 항상 보장 되기 때문에 빠르게 필요한 프로그램을 빌드 할 수 있습니다.
  3. 복잡한 환경 구성을 할 필요 없이 간단하게 적용 할 수 있습니다.

팀원 및 서버와 개발 환경을 쉽게 동기화할 수 있다.

→ 기존에 환경 설정으로부터 겪던 고충을 말끔히 해결

Docker의 구성


  • Docker Client: 사용자가 Docker를 사용하기 위해 입력하는 명령들을 전달하는 역할을 합니다.
  • Docker Daemon: Docker Client로부터 전달받은 명령을 수행하는 역할을 합니다.
  • Docker Image: 컨테이너를 생성하기 위해 필요한 파일들을 모아놓은 하나의 실행 파일입니다.
  • Docker Container: Docker Image를 기반으로 생성되며, 실제로 실행되는 컨테이너입니다.
  • 프로그램의 입장에서 이미지: 클래스, 컨테이너: 인스턴스 로 이해하면 쉽습니다.

Docker Image

Docker Image란 컨테이너를 실행할 수 있는 실행파일, 설정 값 들을 가지고 있는 것

→ Image를 컨테이너에 담고 실행을 시킨다면 해당 프로세스가 동작

  • 하나의 이미지는 여러 컨테이너를 생성할 수 있음.
  • 도커는 dockerfile이란 파일로 이미지를 만듬.

Container

Image를 실행한 상태, 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징 or 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술

  • 컨테이너는 이미지 Layer에 읽기/쓰기 (read-write) Layer를 추가하는 것으로 생성/실행됨. 따라서 여러 개의 컨테이너를 생성해도 최소한의 용량만 사용되며, 바낀 부분을 읽기/쓰기 Layer에 적음
  • 컨테이너는 종료되었다고 메모리에서 삭제되지않고 남아있음. 삭제하려면 명시적으로 삭제해야 함. 즉, 종료가 되어도 컨테이너 & 읽기/쓰기 Layer 또한 그대로 존재하기 때문에 다시 시작할 수 있음.
  • 컨테이너를 삭제했다는 것은 컨테이너에서 생성한 파일이 사라진다는 것. 예) DB라면 그동안 쌓였던 데이터가 모두 사라진다는 뜻과 동일
  • 한 서버는 여러 개의 컨테이너를 가져도 당연히 상관없으며, 컨테이너는 각각 독립적으로 실행됨.
  • 컨테이너는 커널 공간과 호스트 OS 자원(시스템 콜)을 공유

[쉬운 예시]

Docker Image를 레시피로 생각, Docker container를 레시피로 만든 케이크로 생각

→ 하나의 레시피로 많은 케이크를 구울 수 있는 것처럼, 하나의 Docker Image로 여러 개의 Docker Container를 만들 수 있음.

하지만, 레시피를 바꿔도 기존 케이크의 맛은 변하지 않고, 새로 구운 케이크만 수정된 레시피를 사용.

→ Docker Image를 변경해도 이미 실행 중인 Docker Container에는 영향을 미치지 않음


1. Dockerfile

Dockerfile은 Docker 이미지를 빌드하기 위한 설정 파일입니다. Dockerfile은 이미지를 빌드할 때 필요한 모든 정보를 제공합니다. Dockerfile은 다음과 같은 명령어로 작성됩니다.

- FROM: Docker 이미지를 빌드할 때 사용할 베이스 이미지를 설정합니다.
- RUN: Docker 이미지를 빌드할 때 실행할 명령어를 설정합니다.
- COPY: 호스트 머신의 파일을 Docker 이미지 내부로 복사합니다.
- CMD: Docker 컨테이너를 실행할 때 실행할 명령어를 설정합니다.

Dockerfile 안에서의 명령어는 Dockerfile을 실행하는 환경에서 실행되며, 이미지를 빌드할 때마다 실행됩니다. 따라서 Dockerfile을 사용하여 이미지를 빌드할 때마다 동일한 이미지를 생성할 수 있습니다.

예시)

# Dockerfile

FROM ubuntu:latest
RUN apt-get update && apt-get install -y \\
    python3 \\
    && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY hello-world.py abc.py # local에 있는 hello-world.py를 이미지 안에 abc.py파일로 복사해줌
CMD ["python3", "abc.py"] # = python abc.py

이 Dockerfile은 Python 애플리케이션을 위한 이미지를 빌드합니다. 우분투 최신 버전을 베이스 이미지로 사용하며, Python 및 필요한 라이브러리를 설치합니다. 그런 다음 애플리케이션 코드를 이미지에 복사하고, 필요한 라이브러리를 설치합니다. 마지막으로, 컨테이너가 시작될 때 Python 애플리케이션을 실행합니다.

2. 작성 된 Docker File로 Image 만들기

$ docker build -t [만들고싶은 이미지]

Docker Hub

Docker Hub에서는 이미지를 저장하고 관리해줍니다. 위에서도 많은 회사들이 Docker로 소프트웨어를 배포하기 시작했고 공개이미지들을 공유할 수 있습니다. Docker Hub를 이용하면 누구나 쉽게 이미지를 만들고 배포할 수 있습니다. 또한, 손쉽게 pull 받아 컨테이너에 적용 시킬 수 있습니다.

Container 실행

$docker run -it --name [container이름] [image 이름]
profile
AI Engineer가 될테야

0개의 댓글