코딩왕 미룡

[Docker] Docker 기초(배경 및 기본 용어) 본문

Docker

[Docker] Docker 기초(배경 및 기본 용어)

허미룡 2023. 6. 1. 18:38

배경

◦ 어떠한 애플리케이션을 만들기 위해서 운영체제에 여러 소프트웨어를 깔아야함

◦ OS에 각각의 가상 운영체제를 만들어 네트워크로 연결을 해서 사용을 하게됨(virtual machine)

◦ 그러나 웹 서버를 운영하기 위해 운영체제를 까는게 비효율적임

◦ (용량이 어마어마한 OS를 깔다보니 실행속도도 느려짐, 여러개의 같은 프로그램이 깔릴 수 있음, 사용하지 않는 도구가 디폴트로 설정되어있음)

◦ 한대의 컴퓨터 안에서 격리된 환경으로 각각의 앱을 실행시키는 방법 등장

◦ docker는 container기술을 사용하는 소프트웨어 중 하나 + 관리프로세스를 단순화하는 도구

 

도커를 사용하는 이유

◦ ex) node.js 에서 await 문법을 사용해 개발했지만 이를 사용하는 다른 환경은 버전이 맞지 않아 에러가 발생하는 경우

◦ 같은 개발 환경을 가지는 것은 매우 중요 (버전 관리)

◦ 배포를 하지 않더라도 코드가 필요한 모든 것을 포함하는 환경을 보유하는 것이 중요

◦ 매우 빠름

◦ 이미지와 구성파일로 공유, 배포가 쉬움

◦ 앱과 환경을 보유하면서도 쓸모없는 부가적인 것들이 없음

◦ 운영체제에 영향을 거의 미치지 않으며, 최소한의 디스크를 사용

 


host

 ◦ 운영체제가 설치된 컴퓨터

 

container

 ◦ host에 설치된 격리된 각각의 실행환경

 ◦ 각각의 container에는 운영체제 전체가 아니라 앱을 실행하는데 필요한 라이브러리와 실행파일만 포함되어있음

 ◦ 실제로 실행중인 이미지의 구체적인 실행 인스턴스

 ◦ 이미지를 기반으로 하여 실행하는 것

 ◦ 실행시키는 행위는 run

 

docker hub

 ◦ 이미지 저장소

 ◦ 사용자들이 업로드한 이미지를 자유롭게 공유할 수 있음

 ◦ 누구나 업로드 할 수 있고 공개되어 있는 이미지는 누구나 사용가능하므로 보안상의 문제가 발생할 가능성이 높음

 ◦ official image 태그가 붙어있는 이미지는 공식 이미지

 ◦ Verified Publisher 태그가 붙어있는 이미지는 인증이 된 이미지

 ◦ 따라서, 인증이 된 이미지만 사용하는 것을 권장

 

image

◦ docker hub에서 다운받은 것

◦ 실제로 코드와 코드를 실행하는데 필요한 도구를 포함 → 실행시 컨테이너가 되어 코드를 실행

◦ 모든 코드, 설정 등이 포함된 공유가능한 패키지

◦ 다운받는 행위는 pull

 

container 기술

리눅스 운영체제에 위와 같은 앱 실행방식이 내장되어있음

리눅스 운영체제의 기술

container안에서 동작하는 각각의 앱들은 리눅스 안에서 동작하는 앱들

 

리눅스 운영체제가 아니라면 도커를 사용할 수 없을까 ?

 → window,mac 에 가상머신을 깔고 가상머신에 리눅스를 깔면 리눅스 운영체제 위에서 container기술 사용가능

 → docker가 알아서 가상머신을 깔고 리눅스를 설치해줌

 

 ◦ 운영체제가 리눅스가 아니라면 가상머신을 설치하기 때문에 속도 저하 발생

 

port forwarding 

 웹 브라우저와 웹 서버의 통신 방식

 

host와 container는 독립적으로 존재하기 때문에 포트번호를 연결해줘야함

host의 8000번 포트와 container의 80번포트를 연결시키려면 8000:80 으로 작성

 → host의 8000번 포트로 전송된 신호가 container의 80번 포트로 전송

 

 ◦ container의 port는 container를 만든 사람이 정해놓은 포트번호임

 ◦ host 는 나의 운영체제이므로 port 번호 직접 설정

 ◦ docker desktop에서의 port forwarding

 ◦ (하단 예시에서는 컨테이너, 이미지를 만든 사람이 이미지에 설치되어있는 프로세스에 접근 할 때에는 80번 포트로 접속하도록 설정해둔 것)

실행되고 있는 컨테이너는 컴퓨터의 자원을 사용하고 있으므로 꺼둘 필요가 있음