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을 기분으로 만들어지며 소프트웨어를 실행하기 위해 필요한 모든 것을 포함
- Dockerization - 텡스트 파일로 세부 정보를 기술
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 |