🐋도커(Docker)란?
도커는 컨테이너 기반의 오픈소스 가상화 플랫폼을 말합니다.
도커는 어떤 프로그램을 외부 환경을 격리시켜 구동할 수 있게 해주는 소프트웨어입니다.
서버 프로그램 개발 후 실제 OS 환경과는 격리시켜 컨테이너로 기동하는 기술입니다.
도커는 리눅스 기반으로 동작합니다. 도커 컨테이너에 올릴 수 있는 애플리케이션은 Linux 환경에서도 실행이 가능해야 합니다.
도커의 성능이 좋은 이유 : 실행에 필요한 기능만 있음 -> 자원 오버헤드 감소 및 성능 향상
🚢컨테이너 기술의 역사
1. 전통 방식의 배포
- 전통 방식의 배포 형태는 물리적 컴퓨터에 애플리케이션을 배포하는 형태
- 이 방식의 문제는 하나의 하드웨어에 여러 애플리케이션이 관리되는 경우 애플리케이션 간의 라이브러리 의존성 문제가 발생
- 예를 들면, 게시판 애플리케이션에서 스프링 4버전을 사용하고 채팅 애플리케이션에서 스프링 5버전을 사용할 경우 하나의 컴퓨터 안에서 버전 관련 라이브러리 충돌 문제가 발생할 수 있습니다.
2. 가상화 배포
- 하드웨어 위에 Host OS를 설치하고 가상머신들을 관리하는 Hypervisor 라는 컴포넌트를 통해 가상화된 Guest OS를 통제하는 형태를 말합니다.
- 하나의 가상머신 안에 하나의 APP을 배포하므로 각각 격리된 환경에서 APP을 관리할 수 있고 라이브러리 의존성 문제를 해결할 수 있습니다.
- 하지만 가상머신의 비용효율성이 좋지 않아 성능측면이나 자원 오버헤드 측면에서 좋지 않습니다.
3. 컨테이너 배포
- Docker와 같은 컨테이너 엔진을 사용하는 형태입니다.
- 다양한 격리 기술들을 지원하여 가상머신에 비해 성능 효율성이나 자원 오버헤드도 발생하지 않으며 경량화할 수 있게 됩니다.
4. 쿠버네티스 배포
- 쿠버네티스는 Container Orchestration System으로 여러 서버로 분산되어 있는 컨테이너 엔진들을 클러스터링하는 기술을 말합니다.
💡 클러스터링(Clustering)이란?
서로 유사한 속성을 갖는 데이터를 같은 군집으로 묶어주는 작업을 뜻합니다.
🚢 도커 이미지와 컨테이너
도커 이미지(Docker Image)
- 도커 이미지 : 도커 컨테이너를 생성하기 위한 바이너리 파일.
도커 컨테이너(Docker Container)
도커 컨테이너는 도커 이미지를 통해 실행되는 하나의 프로세스를 말합니다.

- 원본 저장소에 있는 Docker File로부터 Docker Image를 내려받고(building) 해당 이미지를 실행하여 여러 개의 컨테이너가 실행(run)되는 구조입니다.
- 즉, 도커 이미지와 도커 컨테이너는 1 : N 구조로 되어 있습니다.
- 즉, 도커 이미지는 읽기 전용으로 도커 컨테이너에서 수정이 일어나도 원본 이미지에는 영향을 주지 않습니다.
컨테이너 레이어(Container Layer)와 이미지 레이어(Image Layer)로 구성되어 있습니다.
💡 레이어란?
레이어는 이미지의 불변성으로 인해 도커 파일의 코드 한줄 변경 시마다 이미지를 리빌드 및 다운로드 해야하는 번거로움을 줄이기 위한 개념입니다.
즉, 이미지 레이어를 공유하고 해당 변경사항을은 컨테이너 레이어에 추가되어 각각의 컨테이너 레이어를 사용하게 됩니다.
또한, 불필요하게 사용되던 동일 자원을 이미지 레이어에서 공유하여 자원낭비가 줄어드는 장점이 있습니다.
도커 명령어 구조
도커의 명령어는 'docker'로 시작하며 어떤 대상에게 명령어를 실행할 것인지로 구분하면 보기가 쉽습니다.
docker {대상} {커맨드} {옵션} {인자}
도커 커맨드 리스트 확인
- CMD 상에 docker 입력하기
docker[command 대상] --help
입력
- 도커 명령어는 생각보다 많지 않으며, 도커를 사용해보면서 더 확인해보겠습니다.
도커 이미지 이름 구성
도커 이미지 명칭은 다음과 같습니다.
" 저장소 이름 (Repository name) / 이미지 이름 (Image name) /이미지 태그 (Image tag) "
💡 이미지 태그란?
버전 정보나 릴리즈 태그같은 정보
- OracleRepo/mysql-server:8.0.13 - OracleRepo 저장소에 mysql-server이미지 8.0.13 버전을 의미합니다.
- OracleRepo/mysql-server - 태그 생략시 가장 최근 릴리즈(latest)를 사용합니다.
- mysql-server:5.1.12 - 저장소 생략시 기본 저장소인 도커 허브로 인식합니다.
- mysql-server - 태그와 저장소 생략시 기본저장소와 latest 릴리즈 사용합니다.