ssung_데이터 엔지니어링/10주차_Docker

Docker_(1) feat. vi (or vim)

ssungcohol 2023. 12. 18. 20:30

Docker가 왜 필요할까?

  • 문제점
    • 개발자는 한 명이 아니다! 여러 사람이 협업해서 만들어간다!
    • 설령, 한 명의 개발자가 만든 프로그램의 컴퓨터 환경과 다른 개발자의 컴퓨터 환경은 다르다!
  • 나의 컴퓨터 환경을 그대로 패키징하여 다른 사람이 사용할 수 있게!
    • Docker Image : 독립적으로 완전하게 만들어진 패키지
    • Docker Container : Docker Image를 독립된 환경에서 실행한 것
  • Docker의 목표 = 소프트웨어를 일관되게 빌드하고 실행하고 배포하는 것!

VM (Virtual Machine)과 Docker Container

Virtual Machine (VM)

  • 하드웨어를 추상화하여 한 컴퓨터 위에 가상의 컴퓨터를 올리는 것
  • AWS의 EC2가 대표적인 VM
  • 장점
    • 소프트웨어를 실행하기 위한 독립적이고 분리된 공간 제공
    • 다수의 소프트웨어를 각 VM 단에서 독립적으로 실행가능
  • 단점
    • 각 VM은 자신만의 OS를 필요로 함 (가상의 하드웨어 위에서 작동하기 때문)
    • 자원을 많이 사용 (여러 개의 VM 구동 시 VM들끼리 자원을 나눠 사용)

Docker Container

  • 소프트웨어를 실행하기 위한 독립적이고 분리된 공간
  • 장점
    • 소프트웨어를 실행하기 위한 독립적이고 분리된 공간을 제공
    • 자원 소비가 적음
    • 호스트 OS를 사용 (별도 비용 발생 X)

Docker 사용 프로세스

  • 대상 소프트웨어 선택
     - 다수의 컴포넌트로 구성되는 소프트웨어라면 각각 Image로 만들어야할 수 있음
  • Image로 빌드 시작 (= Dockerization)
    • Dockerization - 텡스트 파일로 세부 정보를 기술
      (해당 소프트웨어를 이미지로 바꾸기 위한 Docker에게 주는 명령들을 포함)
    • Docker Image는 하나의 Docker Container 안에서 실행
       - Dockerfile을 기분으로 만들어지며 소프트웨어를 실행하기 위해 필요한 모든 것을 포함

Docker의 구성요소

  • 기본 OS (리눅스라면 ubuntu, 데비안 ...)와 같은 소프트웨어의 실행환경
  • 소프트웨어 자체(코드)
  • 필요 라이브러리
  • 파일 시스템 스냅샷 : 이는 스택화 된 형태로 구현
  • 환경 설정 변수 : 빌드할 때의 변수, 실행할 때의 변수 두 가지가 존재
  • 메타 데이터 : 이미지 자체에 대한 정보 (버전, 작성자, 설명...)

Docker Hub

  • Docker가 제공해주는 서비스로 Docker Image를 공유하고 찾기 위한 서비스
  • Teams & Organizations 사용 가능
  • Public, Private 두 가지 선택 가능
  • Github과 연동을 통한 Automated Build 제공

Dockerfile

  • Dockerfile이란?
     - Docker의 인프라 구성을 기술한 파일을 Dockerfile이라고 부름
  • Docker 이미지를 작성하기 위해 필요한 내용
     - 베이스가 될 Docker 이미지
     - Docker 컨테이너 안에서 수행한 조작 (명령)
     - 환경변수 등의 설정
     - Docker 컨테이너 안에서 작동시켜둘 데몬 실행

Dockerfile 기본 구문

  • Dockerfile은 텍스트 형식의 파일로 에디터 등을 사용하여 작성
  • 확장자는 필요 없고, 'Dockerfile' 이라는 이름의 파일에 인프라 구성 정보를 작성
  • Dockerfile 이외의 파일로 이미지를 작성할 시 이미지를 빌드할 때 파일명을 명시적으로 지정해야 함

주요 명령어

명령어 설명
FROM 베이스 이미지 지정
RUN 명령 실행 (이미 생성 시 실행)
CMD 컨테이너 실행 명령 (생성된 컨테이너 안에서 명령 실행)
LABEL 라벨 설정
EXPOSE 포트 익스포트
ENV 환경변수
ADD 파일/디렉토리 추가
COPY 파일 복사
ENTRYPOINT 컨테이너 실행 명령
VOLUME 볼륨 마운트
USER 사용자 지정
WORKDIR 작업 디렉토리
ARG Dockerfile 안의 변수
ONBUILD 빌드 완료 후 실행되는 명령
STOPSIGNAL 시스템 콜 시그널 설정
HEALTHCHECK 컨테이너의 헬스체크
SHELL 기본 쉘 설정

Dockerfile 만들기

  • mac의 경우 터미널 실행 후 원하는 폴더에 들어가 vi 명령어를 사용해 생성
vi Dockerfile
  • 윈도우의 경우 vi 명령어가 없어 따로 vim을 설치하여야 한다.
    (필자의 경우 한참..찾았음..)
     - 설치 링크 : https://www.vim.org/download.php
     - 링크에 접속 후 'PC:MS-DOS and MS-Windows' 클릭하여 이동
     - 최상단의 gvim숫자.exe 파일 다운 후 설치
     - 설치 시 Typical, Minimal, Full, Custom을 선택하여 설치가 가능한데 Full을 선택하여 설치했음
  • vim 설치 후 아래와 같은 화면이 보일텐데 Powershell, cmd에서 사용하려면 별도의 설정이 필요

  • Powershell을 실행 후 vi 명령어를 Alias를 통해 매핑해줘야 함
  • vi vim Alias 설정 
Set-Alias vi vim
  • profile 경로를 확인 후 추가 설정이 더 필요
$profile
  • profile 추가 작업
vi $profile
  • 열린 vi 창에 아래와 같은 명령어 입력 후, esc를 눌러 빠져나와 :wq를 입력하면 끝
Set-Alias vi vim

  • Dockerfile 예제
     - From : 베이스 이미지를 기술 (alpine 자리에는 OS 종류를 기재, alpine은 경량 리눅스)
     - COPY : 코드 복사에 사용
     - WORKDIR : Working Directory 지정
     - CMD : 실행하는 명령 앞에 지정
FROM node:alpine
COPY . /app
WORKDIR /app
CMD node app.js
728x90

'ssung_데이터 엔지니어링 > 10주차_Docker' 카테고리의 다른 글

Docker_(5)  (0) 2023.12.22
Docker_(4)  (1) 2023.12.21
Docker_(3)  (0) 2023.12.20
Docker_(2) with CI/CD  (0) 2023.12.19