1. 도커란?
Go언어로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼이다.
다시 말해 특정한 서비스를 패키징하고 배포하는데 유용한 오픈소스 프로그램이다.
컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는데 필요한 모든 것이 포함되어 있다.
가상 머신에 비해 꼭 필요한 것만 담겨서 구동되기 때문에 이미지를 만들 경우 용량이 대폭 줄어들게 된다.
도커를 왜 사용할까?
1. 애플리케이션 독립성을 가진다. 호스트 OS, 다른 컨테이너와도 독립된 공간을 보장받아 충돌이 발생하지 않는다.
2. 컨테이너 내부에 작업 후 배포하려 한다면 도커 이미지로 만들어서 운영서버에 전달만 하면 된다.
3. 마이크로 서비스 구조로 변화가 쉽다. 컨테이너 하나당 하나의 기능을 제공하는 모듈로 만드는 등 조정이 가능하다.
다시 말해, Docker을 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포, 확장할 수 있다.
2. 도커 이미지, 컨테이너 란?
도커 이미지란? :
Docker Image란 컨테이너를 실행할 수 있는 실행파일, 설정 값들을 가지고 있는 것으로,
더 이상 의존성 파일을 컴파일하거나 이것저것 설치할 필요가 없는 상태의 파일을 의미한다.
Image를 컨테이너에 담고 실행시키면 해당 프로세스가 동작한다.
도커 이미지의 생성 방식:
도커 이미지는 기존 이미지에 추가적인 구성이 필요할 때 다시 다운로드하는 방법이 아닌
기존이미지에 레이어를 추가하여 구성을 올려주는 방식으로 생성된다.
다시 말해, 이미지는 여러 개의 읽기 전용 레이어로 구성되고 파일 추가되면 새로운 레이어가 생성되어 추가된다.
도커는 여러 개의 레이어를 묶어 하나의 파일시스템으로 사용할 수 있게 해 준다.
이미지와 컨테이너의 차이 :
간단하게 설명하면 도커 이미지는 설계서, 컨테이너는 설계서로 만들어진 상품이다.
게다가 이미지가 중간에 바꾸게 되더라도 기존 컨테이너는 더 이상 이미지에 영향을 받지 않는다.
컨테이너의 정의 및 특징 :
다시 말해 Docker container란 이미지를 실행한 상태로 응용프로그램의 종속성과 함께 응용프로그램 자체를
패키징 Or 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술이다.
특징
- 컨테이너는 이미지 레이어에 읽기/쓰기 레이어를 추가하는 것으로 생성됨
- 종료되었다고 해도 삭제되지 않음 -> 읽기/쓰기 레이어 보존
- 컨테이너를 삭제한 것은 생성파일이 사라지는 것
- 한 서버는 여러 개의 컨테이너를 가져도 상관없으며 독립적으로 실행
- 컨테이너는 커널 공간과 호스트 os자원을 공유
3. 도커 파일
Doker File은 이미지 생성 출발점으로 이미지를 구성하기 위한 명령어들을 작성하여 이미지를 구성할 수 있다.
다시 말해, 만들 이미지에 대한 정보를 기술한 템플릿이라고 보면 된다.
이를 빌드하면 자동으로 이미지가 생성된다. 그러므로 도커 파일을 통해 애플리케이션 빌드 및 배포를 자동화할 수 있다.
FROM python:3.8.3-alpine
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /app
# dependencies for psycopg2-binary
RUN apk add --no-cache mariadb-connector-c-dev
RUN apk update && apk add python3 python3-dev mariadb-dev build-base && pip3 install mysqlclient && apk del python3-dev mariadb-dev build-base
RUN apk add linux-headers libffi-dev musl-dev
RUN apk add --no-cache python3-dev libffi-dev gcc
# By copying over requirements first, we make sure that Docker will cache
# our installed requirements rather than reinstall them on every build
COPY requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
# Now copy in our code, and run it
COPY . /app/
Doker File은 위와 같이 작성할 수 있다.
Docker FIle Instructions
- FROM : base image 지정 , 이미지의 기초
- RUN : command를 실행하여 새 이미지에 포함시킴 -> apk 설치 등등 / 이미지 빌드 시
- CMD : 컨테이너가 시작 될 때 실행할 command 지정 / 빌드 완료 된 이미지로 부터 시작
- ENTRYPOINT : 컨테이너 시작 시 실행될 command 지정 + param 변경 불가
- LABEL : key-value 형식으로 작성된 메타데이터를 이미지에 추가
- ENV : key-value 형식으로 환경변수를 설정
- EXPOSE : 컨테이너로 들어오는 트래픽을 특정 포트로 받아들일 수 있도록 지정하는 역할 -> <포트>/<프로토콜>
- COPY : Host내에 있는 파일 또는 디렉토리를 컨테이너의 파일시스템으로 복사
- ADD : 파일 또는 디렉토리를 컨테이너로 복사 -> remote 파일, 디렉토리를 복사 할 수 있음
- USER : 명령을 실행할 유저명, 유저 그룹 설정 -> 사용자계정으로 변경
- WORKDIR : 작업 디렉토리 설정 / 기존 디렉토리 없을 때 생성 후 설정
- VOLUME : 컨테이너내의 특정 디렉토리를 컨테이너 외부 경로에 마운트 시켜주는 지시자 -> 데이터 보존
끝!
'👩💻 개발 > 📡 DEVOPS' 카테고리의 다른 글
[DevOps] SpringBoot + GitHub action + Nginx + AWS 배포 - 2 (0) | 2023.02.22 |
---|---|
[DevOps] SpringBoot + GitHub action + Nginx + AWS 배포 - 1 (2) | 2023.02.21 |
[DevOps] Github Actions란? (0) | 2023.02.20 |
[Nginx] Nginx란? (0) | 2022.12.26 |
[Docker] 도커 컴포즈란? (1) | 2022.12.23 |