도커

박준수·2023년 1월 5일
0
post-custom-banner

도커

도커란..

도커는 컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 도구이다.

  • 도커를 통해 애플리케이션을 실행하면 독립적인 환경에서 일관된 결과를 보장한다. 도커의 핵심 개념은 이미지와 컨테이너다.

컨테이너

컨테이너는 격리된 공간에서 프로세스가 동작하는 기술이다.

  • 기존의 가상화 방식인 OS 가상화가 아닌 프로세스를 격리하는 방식으로 동작한다.

  • 단순히 프로세스를 격리하기 때문에 가볍고 빠르다.

  • 또한 CPU나 메모리는 프로세스가 필요한 만큼만 추가 사용하여서 성능적으로 거의 손실이 없다.

이미지

컨테이너 실행에 필요한 파일과 설정을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다.

  • 컨테이너는 이미지를 실행한 상태이다.

  • 도커 이미지는 Docker hub에 등록하거나 Docker Registry 저장소를 직접 만들어 관리할 수 있다.

  • 이미지들은 Docker Hub를 통해 버전 관리 및 배포가 가능

Dockerfile

도커 이미지를 만들기 위해 Dockerfile이라는 파일에 DSL(Domain Specific Language) 언어를 이용해 이미지를 생성할 수 있다.

도커 파일 스크립트의 예

FROM 이미지_이름
COPY 원본_경로 대상_경로
RUN 리눅스_명령어
....

도커 실행 과정

  1. 우리 어플리케이션에 필요한 도커 파일을 만든다
  2. 도커 파일을 어플리케이션에서 스냅샷 할 수 있는 이미지로 만든다.
  3. 이 이미지를 Container Registory에 올린다. (push)
  4. 서버에서 다운로드 받아서 컨테이너를 실행 시킬 수 있다.(pull and run)

참고 : docker 이해하기//도커 실습

도커와 가상환경

플라스크 프로젝트를 실행시킬려면 먼저 가상환경을 만들고 그 가상환경에 프로젝트에 사용할 라이브러리, 모듈 등을 설치한다. 가상환경 안에서 프로젝트를 실행시키는 순서이다. 그런데 우리가 프로젝트에서 백엔드 개발을 하면 개개인의 노트북환경(OS, 파이썬버전 등등)이 각각 다르기 때문에 각각 가상환경에 개개인이 자신의 가상환경에 하나하나 라이브러리, 모듈 등을 깔아야 한다. 그렇게 되면 가상환경의 설정이 개개인 마다 달라질 수 있다. 같은 가상환경의 설정을 사용해줄려면 도커에다가 requirements.txt파일을 사용한다. 이 파일에 가상환경 세팅에 대한 내용이 있다. 우리는 이 파일을 통해 백엔드 개발하는 사람들 끼리의 파이썬 개발 가상환경을 알아서 맞춰주는 것이다.

(도커안에서 파이썬 가상환경을 안돌려도 된다는 것)

pip freeze > requirements.txt를 하면 최신화 시켜준다

  • 내가 깔린 모듈들로 다른사람들이랑 개발환경을 맞춰준다
  • 컨테이너와 내 개발환경도 맞출수 있다.

pip install -r 명령어로 내 개발환경과 도커가 맞춰지는 것이다.

asgiref==3.6.0
Django==4.0.3
django-cors-headers==3.13.0
django-filter==22.1
djangorestframework==3.14.0
djongo==1.3.6
dnspython==2.2.1
pymongo==3.12.3
pytz==2022.7
sqlparse==0.2.4
—> requirements.txt파일 예시이다.

볼륨과 마운트

볼륨 : 스트로지의 한 영역을 분할한 것
마운트 : 대상을 연결해 운영체제 또는 소프트웨어의 관리하에 두는 일을 말한다.

컨테이너 속에 데이터가 있다면 컨테이너와 함께 데이터도 소멸된다. 컨테이너는 생성 및 폐기가 매우 빈번하기 때문에 매번 데이터를 옮기는 대신 처음부터 컨테이너 외부에 둔 데이터에 접근해 사용하는 것이 일반적이다. ==> 데이터 퍼시스턴스
데이터를 두는 장소 ==> 마운트된 스토리지 영역이다(스토리지 마운트)

스토리지 마운트 종류: 1. 볼륨, 2.바인드 마운트

볼륨

도커 엔진이 관리하는 영역 내에 만들어진 볼륨을 컨테이너에 디스크 형태로 마운트 한다.

  • 이름만으로 관리하 가능하므로 다루기 쉽지만 조작하기 어려움
  • 임시 목적의 사용
  • 자주 쓰지는 않지만 지우면 안 되는 파일을 두는 목적으로 많이 사용

바인드 마운트

도커가 설치된 컴퓨터의 문서 폴더 또는 바탕화면 폴더 등 도커 엔진에서 관리하지 않는 영역의 기존 디렉터리를 컨테이너에 마운트하는 방식이다. 파일 단위로도 마운트가 가능하다.

차이점

볼륨 마운트

  • 도커 엔진의 관리하에 있으므로 사용자가 파일 위치를 신경 쓸 필요가 없다. '바탕화면에 내버려 뒀다가 실수로 지워버리는 일'도 일어나지 않는다.
  • 운영체제에 따라 명령어가 달라지는 등의 의존성 문제도 일어나지 않는다.
  • 환경에 따라 경로가 바뀌는 일은 없다.

바인드 마운트

  • 도커가 관리하지 않는 영역 어디라도 파일을 둘 수 있으며, 기존과 동일한 방식으로 파일을 사용할 수 있으므로 다른 소프트웨어를 사용해 쉽게 편집할 수 있다.

즉, 파일을 직접 편집해야 할 일이 많다면 바인드 마운트를 사용, 그렇지 않다면 볼륨 마운트를 사용

볼륨이 바인드 마운트보다 좋은 장점을 docs에선 이렇게 적어놨다.

  1. 백업하거나 이동시키기 쉽다.
  2. docker CLI 명령어로 볼륨을 관리할 수 있다.
  3. 볼륨은 리눅스, 윈도우 컨테이너에서 모두 동작한다.
  4. 컨테이너간에 볼륨을 안전하게 공유할 수 있다.
  5. 볼륨드라이버를 사용하면 볼륨의 내용을 암호화하거나 다른 기능을 추가 할 수 있다.
  6. 새로운 볼륨은 컨테이너로 내용을 미리 채울 수 있다.

임시 메모리(tmpfs) 마운트

  • 디스크가 아닌 주 메모리 영역을 마운트 하낟. 디스크보다 훨씬 빠른 속도로 읽고 쓰기가 가능하기 때문에 접근 속도를 높일 목적으로 사용하지만 도커 엔진이 정지되거나 호스트가 재부팅하면 소멸한다.


도커 컴포즈 파일, 도커 파일

[Docker] Docker-Compose 주요 명령어 총정리

—> 도커 컴포즈 주요 명령어

Compose specification

—> 도커 컴포즈 공식 문서

Flask를 Docker로 웹서버 구축하기

—> 도커 파일 작성법

—> dockerfile volume작성법

Docker Compose 설정 방법

—> 도커 컴포즈 기본 작성방법

  • 프로덕션에 배포할 때 개발 서버를 사용하지 마십시오. 로컬 개발 중에만 사용하기 위한 것입니다. 특히 안전하거나 안정적이거나 효율적으로 설계되지 않았습니다.(저건 기본 에러) —> 기본 플라스크는 development서버, 배포할 때는 보안등에 의해 wsgi서버로 둬야한다.

느낀점

도커 공부하면서 여러자료를 학습하는 것보단 한 번 실습해보는 것이 확실히 더 도움이 되는 것을 느꼈다. (실습이 오래걸리긴 하지만)

profile
방구석개발자
post-custom-banner

0개의 댓글