“ 당신은 소프트웨어 품질을 추구할 수도 있고, 포인터 연산을 할 수도 있다. 그러나 두 개를 동시에 할 수는 없다. ”
이번 포스팅에서는 도커에 관한 설명과 윈도우 환경에서 별도의 가상 머신(VM) 없이
"Docker Desktop" 으로 설치하는 방법을 정리하겠습니다.
Docker 란?
리눅스 응용 프로그램을 소프트웨어 컨테이너 안에 배치하는 일을 해주는 자동화 오픈 소스입니다. 도커는 일반적으로 도커 엔진 혹은 도커에 관련된 모든 프로젝트를 말합니다.
Docker Engine 이란?
Docker Engine은 컨테이너를 생성하고 관리하며 제어할 수 있게 다양한 기능을 제공하는 도커의 프로젝트입니다.
Docker Daemon, REST API, API를 통해 도커 데몬과 통신하는 CLI로 모듈식으로 구성되어 있습니다.
Docker Container (도커 컨테이너)
도커를 사용하면 애플리케이션을 모든 종속성과 함께 컨테이너 형태로 패키징 할 수 있습니다. 모든 애플리케이션이 격리된 환경에서 작동되며 서로 간섭되지 않고, 개발자는 각각의 독립된 환경에서 작업할 수 있습니다.
도커 컨테이너는 도커 이미지로 생성할 수 있으며, 컨테이너를 생성하면, 해당 목적에 맞는 독립된 공간이 생성됩니다.
컨테이너 안에 애플리케이션을 구동하는데 필요한 라이브러리와 실행 파일만 존재하기 때문에 컨테이너로 만들었을 때 용량 또한 가상 머신에 비해 대폭 줄어듭니다.
- 배포 속도
- 유연성 및 확장성
- 휴대성
- 보안
이러한 이점으로 개발자가 효율적인 개발환경을 구축하며 업무에 대해서 많은 도움이 될 것입니다.
Docker image
도커 이미지는 도커 컨테이너와 마찬가지로 도커 엔진의 핵심입니다.
서비스 운영에 필요한 서버 프로그램, 소스코드, 및 라이브러리에 대해 컴파일된 실행 파일로 묶인 형태를 도커 이미지라고 합니다. 간단하게 말해서 컨테이너 생성에 필요한 모든 파일 및 설정을 가지고 있는 의존성 없는 파일이라고 생각하면 됩니다. 즉 일종의 템플릿입니다.
이미지는 템플릿일 뿐, 시작하거나 실행할 수 없습니다. 컨테이너가 도커 이미지를 실행한 상태라고 생각하면 됩니다.
도커 이미지는 불변 파일이기 때문에 별도로 이미지 베이스를 변경할 수 없습니다.
그래서 컨테이너를 실행하여 읽기 전용인 도커 이미지에 변경된 사항을 저장하는 컨테이너 레이어로 이미지 복사본을 수정합니다.
Docker image와 Docker Container에 차이점은 무엇일까?
간단하게 정리하자면, 컨테이너가 존재하려면 이미지를 실행해야 하고, 이미지는 컨테이너 없이 존재할 수 없다.
따라서 이미지는 빌드 타임의 구조이고 컨테이너는 런타임 구조입니다.
즉 이미지는 특정 환경에 대한 정보가 변하지 않는 정적 파일이고, 이미지를 동적인 형태로 변화된 것이 컨테이너입니다.
Windows Docker 설치 방법
- Hyper-V 설치
- Docker Desktom Windows 다운로드 및 설치 진행
- Docker 실행
- Accept 클릭
- WSL2 installation is incomplete 에러 창이 나오는데 링크를 통하여 WSL2를 설치합니다.
- Windows PowerShell 관리자로 실행합니다.
// Powershell
wsl --install
설치 명령을 사용하지 않고 단계별 지침을 원하는 경우 이전 버전의 WSL 수동 설치 단계를 참조하세요.
// PowerShell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
wsl --set-default-version 2
- Docker 계정을 만들고 Docker Desktop에서 로그인하면 완료입니다.
이번 포스팅에서는 도커에 대한 간단한 개념설명과 windows에서 설치하는 방법을 소개했습니다.
이제 차근차근 도커에 대한 기능 정리를 해보려고 합니다. 꽤 기능이 많은 거 같아서 좀 어렵긴 하지만...
열심히 해봐야겠습니다.!!
틀린 부분이나 수정할 부분이 있으면 댓글 남겨주세요.
감사합니다.