🤓도커 첫걸음✏️
도커를 공부한 첫날의 내용을 개념과 실습으로 나누어 정리해볼 것이다.
이번 글은 개념 편이다!! 실습편 링크 🔗 NGINX 프론트엔드 배포, OpenJDK 백엔드 실행 컨테이너
목차
1. 도커란 무엇인가
2. 가상 머신과 컨테이너의 차이
3. 컨테이너의 특성과 주의사항
4. Volume의 개념
1. 도커란 무엇인가
🐋도커(Docker)는 컨테이너(Container) 기반의 가상화 기술이다. 컨테이너는 리눅스 Linux 의 기능(혹은 기술)으로 데이터 또는 프로그램을 격리시키는 기능을 제공한다. 다른 말로 "내가 실행시킬 프로그램을 격리시킨 상태로 만들어준다." 그리고 이는 개발 환경을 손쉽게 구축하고 배포할 수 있도록 한다.
🎃 여담 -----------
리눅스의 컨테이너 격리 기능은 모든 것을 다 격리 시켜준다..
☑️프로세스 격리, ☑️디렉터리 격리‼️ 하나의 다른 공간처럼 만들지만 OS는 공유하는 형태이다.
🧐격리하는 이유❓ⓐ 자원효율 ⓑ 보안
🎃 또다른 여담--
🧐 그래도 가상머신이 필요한 경우❓ 리눅스가 아닌 운영체제 환경도 있기 때문...
더 알아보려면... #VDI 가상데스크톱환경 개념 참고하기
🐋도커는 이러한 리눅스의 컨테이너 기술을 귀찮은 과정을 생략하고 편안하게 사용할 수 있도록 하고 인터페이스를 제공하기 때문에 인기가 많다. 그리하여 도커 외에도 CRI-O, containerd와 같은 컨테이너 런타임이 존재하지만, 도커는 가장 널리 사용된다.
⚓쿠버네티스(Kubernetes)는 이러한 컨테이너들을 관리해주는 오케스트레이션(orchestration) 도구로, 실제 서비스 운영 환경에서 사용된다. 한편 2020년에 ⚓쿠버네티스는🐋도커만의 표준으로 인한 불편,부작용을 문제삼아 도커 지원 중단하겠다는 발표를 하여 (아마도) 혼란한 상황이다... ㅋㅋ

2. 가상 머신과 컨테이너의 차이

- 가상 머신(VM)은 하이퍼바이저 위에 게스트 OS가 올라가고, 그 위에 애플리케이션이 실행된다.
- 반면, 컨테이너는 호스트 OS 커널을 공유하고, 그 위에 독립적인 애플리케이션이 올라간다.
🫱🏻그렇기 때문에 자연히 가상머신보다 자원을 더 적게 사용해도 되고, 가상머신보다 빠르며, 부하가 적고, 유연하다.
| 구분 | 가상 머신 | 컨테이너 |
|---|---|---|
| OS | 각각의 서버에 게스트 OS 필요 | 각자의 컨테이너가 하나의 호스트 OS 공유 |
| 속도 | 무겁고 느림 | 가볍고 빠름 |
| 자원 사용 | 더 많이 필요 | 더 적음 |
💡 참고
도커 컨테이너는 기본적으로 리눅스 기반이므로, 윈도우에서 도커를 실행하더라도 리눅스 가상 머신 위에서 동작한다.
Docker Desktop을 윈도우에서 실행할 경우에도 내부적으로는 리눅스 VM을 띄워서 컨테이너를 실행하므로, 윈도우 운영체제에서 에서 컨테이너를 사용할 수 있다고 착각하면 안 된다고 한다. 😅
3. 컨테이너의 특성과 주의사항
✅ 컨테이너는 한 번 쓰고 버리는 일회용품 프로그램이다.
쓰기 편하지만 필요에 따라 컨테이너를 무진장 늘렸다가 필요에 따라서 숫자를 무진장 줄일 수도 있다.
컨테이너 내부에서 생성한 🗂️데이터나 파일은 컨테이너가 삭제되면 모두 사라지기 때문에 💥💥
🗯️ 데이터를 지속적으로 보관해야 할 경우, Volume을 사용해야 한다. 4번에서 계속 설명..
✅ 컨테이너 환경은 매우 제한적이다.
- 기본적인 명령어만 사용 가능하다.
(예:curl정도만 있고vim같은 편집기는 기본으로 없다. 필요한 경우 apt 명령어로 설치해야 한다.) - 프로세스 관련 명령어나 네트워크 설정 명령어도 제한적이다.
4. 볼륨(Volume)의 개념
도커 볼륨은 컨테이너 외부에 데이터를 저장하는 공간 (HDD)이다. 컨테이너가 삭제되어도 볼륨에 저장되는 데이터는 유지된다.
일종의 USB 드라이브처럼 생각하면 이해하기 쉽다. 특히 설정 파일이나 DB 데이터는 Volume을 사용해서 외부에서 관리하는 것이 일반적이다.
✔️ 내가 가진 파일(=로컬 개발 환경의 파일)을 컨테이너 안으로 연결하고 싶다면?
👉🏻docker run -v 옵션을 사용해서 호스트의 파일이나 폴더를 컨테이너 안으로 연결하면 된다.
'BEYOND SW [4] DevOps' 카테고리의 다른 글
| [Docker] 2일차 - Dockerfile 작성부터 이미지 배포까지 (1) | 2025.03.12 |
|---|---|
| [Docker] 1일차 실습 - docker-compose.yml + 설정 문법 (0) | 2025.03.12 |
| [Docker] 🐋Docker run 명령어 + ⌨️주요 옵션들 (1) | 2025.03.10 |
| [Docker] 1일차 실습 - 프론트엔드(Vue.js), 백엔드(Spring Boot) (2) | 2025.03.10 |
| [Docker] Windows11 에서 Docker Desktop 사용하기 (WSL update 오류 해결 방법) (0) | 2025.03.10 |