[Docker] 도커를 쓰는 이유(쉬운 설명 4분컷) 24.04.13

2024. 4. 13. 12:53작업/Docker

회사에서 Windows 로컬프로그램(.exe)을 클라우드에 올리기 위해 도커를 쓰게 됐다.

그리고 졸업작품 삽질을 진행했을 때도, (GAN 모델을 NVIDIA Jetson Nano Board에서 구동시키기) 도커를 사용했다.

도커가 뭘까? 왜 쓰는걸까?

 

## 도커를 쓰는 이유

도커는 environment disparity라는 문제를 해결한다.

= 환경 격차 문제를 해결한다.

기존에는 프로그램이 내 컴퓨터(Windows)에서는 잘 되는데, 실제 프로덕션 서버(Linux)에 올리니까 환경이 적절히 구성되어 있지 않으니 잘 안돌아간다.

즉, 도커는 B 머신(Linux)에서도 개발을 진행했던 A 머신(Windows)와 동일한 환경을 구현할 수 있다.

 

## 도커 동작 방식

자, 그러면 도커를 사용해보자.

1. 내 컴퓨터(Windows)와 목표하는 서버(Linux)에 도커를 둘 다 설치한다.

2. Dockerfile이라는 것을 생성한다.

3. 거기에 내가 구현하고 싶은 환경(Python, Git, C# 등.. 프로그램 실행 시 필요한 것들)을 설정한다.

4. 설정완료한 Dockerfile을 컴퓨터, 서버 둘다에게 준다.

5. Docker가 그 Dockerfile을 읽고, 필요한 걸 좌르륵 다운로드 받는다.

6. Docker가 해당 설정한 환경과 같은 Virtual Container를 컴퓨터, 서버에 만든다.

7. 컴퓨터에서 서버로 코드, Docker파일을 업로드하면 서버에서도 잘 작동할 것이다.

 

## 도커와 컨테이너의 관계

컨테이너1, 컨테이너2, 컨테이너3..

----------------도커-----------------------

도커 : 고래, 컨테이너 : 컨테이너박스

이렇게 포함되어 있는 관계라, 컨테이너끼리는 독립적이다.

따라서 한 서버에 여러 컨테이너를 가질 수 있다.

ex) 컨테이너1 : 파이썬, 컨테이너2: 장고, 컨테이너3: 자바 ..

즉, 도커 덕분에 매번 새로운 서비스를 만들 때마다 새로운 서버를 사고, 설정할 필요가 없다는 것이다.

= 최적화된 서버를 사고, 환경을 설정하고, 시작하고.. 하는 작업들을 내가 만드는 프로그램마다 해줄 필요가 없다는 것이다.

= 그저 컨테이너를 1 원하는 만큼 2 원하는대로 생성하고, 복제하면 된다.

= 하나의 서버에서 각기 다른 환경의 컨테이너 설정 가능. (컨테이너들은 각기 분리되어있고, 독립적)

컨테이너1 : Debian, Java

컨테이너2 : Ubuntu, MySQL, PHP

 

## VM vs 컨테이너

 

VM : VM 하나당 OS를 포함

컨테이너 : OS를 포함하지 않고, Container Engine(ex. 도커 엔진) 으로 Host OS(내컴퓨터 : Windows, 서버: Linux)와 통신

 

## 이미지 vs 컨테이너

이미지 : 레시피(읽기전용 템플릿)

컨테이너 : 레시피로 만든 케이크(인스턴스)

같은 도커 이미지로 만든 컨테이너1, 컨테이너2에서 컨테이너1을 수정해도 컨테이너2는 변경되지 않음

 

## 도커 이미지와 컨테이너 만드는 법

도커파일 -> 이미지 : 'docker build' 명령어로 이미지를 생성

이미지 -> 컨테이너 : 'docker run' 명령어로 컨테이너 생성

 

 

## 요약

1. 원하는 개발환경을 Dockerfile에 저장하면, 도커는 Dockerfile을 읽어서 그 어떤 머신(Windows, Linux..)에서도 해당 환경을 시뮬레이션함

2. 이러한 개발환경들은 각기 독립적이기 때문에 원하는 무슨 환경이든 모듈식으로 관리 가능

3. 그래서 파이썬 서버, 자바 서버, DB 서버 이렇게 추가해서 살 필요가 없음

 

 

## 다음으로 할 것

1 로컬에 C# 설치하지 말고 남이 만들어준 도커 이미지로 컨테이너 만들어서 거기서 C#개발해보기

또는

1 내가 C#용 도커 이미지를 만들어서 배포하기(도커 허브에?)

 

 

 

## 참고자료

https://www.youtube.com/watch?v=chnCcGCTyBg

 

'작업 > Docker' 카테고리의 다른 글

22.02.02 생활코딩 Docker 강의  (0) 2022.02.07