 |
🤷♀️ Docker란?
-
컨테이너 기반의 오픈 소스 가상화 플랫폼
-
기존의 서버 개발, 운영의 어려움을 해결하기 위해 등장
기존 서버의 문제점?
- 기존의 서버는 각 단계별로 하나씩 구축
- 어디서 문제가 생길지 모르고 관리하기가 어려움
- 구축 환경에 따라 서버 배포가 안되는 경우가 발생하기도 함
✔ 다양한 프로그램과 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순화 하는 방법
🐳 도커의 장점
-
확장성과 이식성
-
어떤 프로그램도 컨테이너로 만들 수 있고, 한 번 만들면 AWS, Azure, Google Cloud등 어디서든 돌아갈 수 있다.
-
오픈 소스이기 때문에 특정 회사 기술에 종속적이지 않다.
-
-
표준성
- 개발 언어에 따라서 배포하는 방식이 다 다른데, 도커를 사용하면 동일한 방식으로 배포가 가능하다.
-
설정 관리 편리성
- 설정은 환경변수로 제어하는데 컨테이너에 환경 변수를 지정하여 사용할 수 있다.
❓ Docker는 가상머신인가?
-
가상머신처럼 독립적으로 실행되지만, 훨씬 바르고 쉽고 효율적이다.
-
Virtual machine의 경우
- OS 위에 Guest OS를 또 올리는 과정 → overhaed 발생
-
Docker의 경우
-
OS 위에 프로그램을 올리는데, 컨테이너 마다 격리된 공간을 만들어 주고 그 안에서 프로그램이 실행되는 개념
-
격리된 컨테이너를 만들고 독립적으로 실행
- 속도가 빠르고 성능상의 문제가 발생하지 않는다.
-
(이미지 출처 : https://www.netapp.com/blog/containers-vs-vms/)
➕ Dockerfile과 이미지, 컨테이너
Dockerfile
-
Docker 이미지를 빌드하는 방법을 정의하는 스크립트
-
docker build : dockerfile에서 이미지를 생성하는 명령어
도커 이미지
-
도커 이미지가 실행하는 응용 프로그램에 필요한 소스코드, 라이브러리, 의존성 등을 포함하는 파일
-
컨테이너를 생성하고 실행하는데 필요한 모든 파일과 설정 값을 가진다.
-
docker create : 이미지에서 컨테이너 레이어를 만드는 명령어
도커 컨테이너
- 어플리케이션을 실행할 격리된 환경 == 컨테이너
-
도커 이미지에 있는 소스코드, 파일, 종속성, 라이브러리 등을 사용할 수 있는 독립된 공간이 생성되는 것을 컨테이너라고 한다.
- 이미지는 컨테이너 없이 존재할 수 있지만 컨테이너는 이미지를 실행해야 존재할 수 있다.
(이미지 출처 : https://phoenixnap.com/kb/docker-image-vs-container)
🌱 What I learn
- 도커를 이용하면 기존의 서버 배포 어려움을 해결하고 다른 환경에서도 같은 방식으로 서버를 추구할 수 있다.
- 프로젝트를 하면서 Back과 Front를 도커화해서 배포를 했었는데, 당시에는 도커의 장점을 제대로 이해하지 못하고 무작정 공부하고 배포를 했었다. 도커에 대해 제대로 알아보니, 서버 구축을 쉽게 할 뿐만 아니라 관리적 측면에서도 큰 장점을 가지고 있다는 것을 알 수 있었다.
Reference
subicura님의 초보를 위한 도커 안내서 강의를 수강한 후, 도커를 학습하며 작성하였습니다.
[참고 사이트]
https://www.netapp.com/blog/containers-vs-vms/
https://phoenixnap.com/kb/docker-image-vs-container