티스토리 뷰
< 목차 >
1. 등장 배경
2. Docker 란?
3. 도커 vs VM
4. 구성 요소
5. 이미지와 컨테이너
1. 등장 배경
로컬에서 개발해 실제 서버에 올릴 때 소스파일만 올리는 것은 문제점이 있다. 각종 Dependencies나 설정 등을 맞춰줘야 하는데 개발자의 PC마다, 서버마다 이 모든것들을 설치하는 것은 번거롭기도 하고, 오류 발생의 원인이 되기도 한다.
위 그림과 같이 로컬과 서버에 같은 node.js가 있더라도 내 서버에서 개발한 js 파일을 서버에 배포했을 때 버전 등의 이유로 에러가 발생할 수 있다.
💡 이러한 문제점을 해결하기 위해 Docker가 등장
2. Docker란 무엇인가?
컨테이너라고 불리는 작은 소프트웨어 유닛 안에, 어플리케이션과 그에 필요한 시스템 툴, 환경설정, 모든 디펜던시를 하나에 묶어 다른 서버, 다른 PC 등 그 어떤 곳에서도 쉽게 배포하고 안정적으로 구동할 수 있게 도와주는 툴이다.
💡 다양한 프로그램, 실행 환경을 하나로 추상화하고 동일한 인터페이스를 제공해줌으로써 배포 및 관리를 단순화해준다.
백엔드 프로그램(Springboot, Node.js 등), DB 서버(MySQL, MariaDB, RDS 등) 어떤 프로그램도 컨테이너로 추상화 할 수 있으며, AWS, Azure 등 환경에 구애 받지 않고 실행할 수 있다.
3. 도커 vs VM
기존에도 가상화 기술은 존재해왔다. 하지만, 도커가 기존의 가상화 기술과 어떠한 차이가 있고 어떤 장점 때문에 유명해지고 많이 사용되는지 알아보자.
- VM: 하드웨어 위에 올라가는 vmware나 VirtualBox 같은 Hypervisor을 이용해 독립적인 가상의 머신을 만들 수 있다. 동일한 어플리케이션을 다양한 OS 위에서 구동하기 위한 소프트웨어로, 각각의 VM에는 OS가 올라가기 때문에 굉장히 무겁고 느리다.
- Docker: 하드웨어에 설치된 운영체제에 Container Engine이라는 소프트웨어를 설치해 개별적인 Container를 만들어 각각의 어플리케이션을 고립된 환경에서 구동할 수 있게 해준다. 여기서 가장 많이 사용되는 Container Engine이 바로 Docker이다.
4. 구조
Docker Client: 도커를 설치하면 그것이 Client이며 build, pull, run 등의 도커 명령어를 수행한다.
Docker Host: 도커가 띄워져 있는 서버를 의미한다. 컨테이너와 이미지를 관리한다.
Docker daemon: 도커 엔진
Registry: 외부(remote) 이미지 저장소이다. 다른 사람들이 공유한 이미지를 내부(local) 도커 호스트에 pull 할 수 있다. 이렇게 가져온 이미지를 run 하면 컨테이너가 된다.
5. 이미지와 컨테이너
💡 도커 이미지와 컨테이너
도커 엔진에서 사용하는 기본 단위는 이미지와 컨테이너이며 도커 엔진의 핵심이다. 도커 이미지와 컨테이너는 1:N 관계이다.
Docker File → Docker Image: Docker File은 도커 이미지를 만들 때 사용하는 파일. docker build 명령어를 실행시키면 도커 이미지를 만들 수 있다.
Docker Image → Docker Container: Docker Image를 docker run 명령어를 실행시키면 Docker Container를 만들 수 있다.
💡 도커 이미지
도커 이미지는 컨테이너를 생성할 때 필요한 요소이며, 가상 머신을 생성할 때 사용하는 iso 파일과 비슷한 개념이다.
이미지는 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용되며 여러 계층으로 된 바이너리 파일로 존재한다.
[저장소 이름]/[이미지 이름]:[태그]
저장소 이름: 이미지가 저장된 장소. 저장소 이름이 명시되지 않은 이미지는 도커 허브의 공식 이미지를 뜻함.
이미지 이름: 해당 이미지가 어떤 역할을 하는지 나타내며 필수로 설정해야 함. ex) ubuntu:latest → 우분투 컨테이너를 생성하기 위한 이미지
태그: 이미지의 버전을 나타냄. 태그를 생략하면 도커 엔진은 latest로 인식
💡 도커 컨테이너
컨테이너는 도커 이미지로 생성할 수 있으며, 컨테이너를 생성하면 해당 이미지의 목적에 맞는 파일이 들어 있는, 호스트와 다른 컨테이너로부터 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간(프로세스)이 생성된다.
대부분 도커 컨테이너는 생성될 때 사용된 도커 이미지의 종류에 따라 알맞은 설정과 파일을 가지고 있기 때문에 이미지의 목적에 맞도록 사용되는 것이 일반적이다.
ex) 웹 서버 도커 이미지로부터 여러 개의 도커 컨테이너를 생성하면 생성된 컨테이너의 개수만큼 웹 서버가 생성되고, 이 컨테이너들은 외부에 웹 서비스를 제공하는 데 사용된다.
또한, 같은 도커 이미지로 A, B 두 개의 컨테이너를 생성한 뒤 A 컨테이너를 수정해도 B 컨테이너에는 영향을 주지 않는다.
'Server > Docker' 카테고리의 다른 글
Docker - 실습 (0) | 2023.11.11 |
---|