도커를 처음 접했을 때, 저는 가장 먼저 ‘도커란 무엇인가?’라는 의문이 들었습니다. 명령어 ‘docker’와 ‘docker compose’의 차이가 무엇인지도 알지 못해 마치 안개 속을 헤매는 듯한 기분이었죠. 여러분이 도커를 처음 시작하려는 경우, 이런 혼란이 클 텐데요, 그 걱정을 덜 수 있도록 도커의 구성 요소를 정리하고, 도커를 다운로드한 뒤 설치하는 방법까지 알아보겠습니다.
이렇게 기본적인 설정부터 시작하면 도커의 구조와 작동 원리를 보다 수월하게 이해할 수 있을 것입니다.
도커는 컨테이너형 가상화 소프트웨어 중 하나입니다. 공식 사이트에는 애플리케이션 개발, 실행, 배포를 위한 플랫폼이라고 설명합니다. 도커라는 단어는 명령어 도구를 가리킬 때도 있지만 이후에 설명할 도커 엔진이나 도커 허브와 같은 주변 기술을 통칭해서 도커라고 부르기도 합니다. 여기에서 도커라고 하면 후자를 뜻합니다.
도커 엔진Docker Engine은 3가지 요소로 구성된 애플리케이션 패키지입니다. 데몬daemon이라고 부르는 상주 프로세스, 데몬이 제공하는 API, CLI 클라이언트로 구성됩니다. 데몬은 클라이언트 명령을 계속 기다리고 있다가 명령이 오면 컨테이너 구축이나 실행을 처리합니다. CLI 클라이언트는 docker run처럼 사용자가 이용하는 도커 명령어고 API를 통해서 데몬에 명령을 전달합니다.
도커 컴포즈Docker Compose는 다수의 도커 컨테이너를 한꺼번에 조작하는 도구입니다. docker compose up처럼 docker compose로 시작하는 명령어를 제공합니다. 도커를 사용한 개발 환경은 하나의 컨테이너만 쓸 때보다 동시에 여러 컨테이너를 이용할 때가 많 습니다. 웹브라우저와 데이터베이스 서버를 실행하거나 프록시 서버나 파일 서버 또는 메일 서버가 필요하기도 합니다. 이런 여러 컨테이너 조작을 YAML 파일 정의에 따라 명령어 하나로 실행 해 주는 편리한 도구입니다.
도커 컴포즈는 컨테이너 조작을 집약한 도구이므로 도커 명령어 이해가 우선입니다. <그림으로 배우는 도커> 6부에는 도커 명령어를 배우고, 이어 도커 컴포즈로 바꿔 쓰는 예를 알아봅니다. 저는 늘어지는 도커 명령어를 YAML 파일로 바꿔서 처음 도커 컴포즈 명령어를 실행한 순간, 그 간결성에 너무나 속이 시원해졌습니다.
도커 데스크톱Docker Desktop은 윈도우나 맥 OS에서 쓰는 도커용 GUI 애플리케이션입니다. 윈도우용 도커 데스크톱을 Docker for Windows, 맥 OS용은 Docker for Mac이라고 합니다. 도커 데스크톱을 설치하면 도커 엔진, 도커 컴포즈 외에도 호스트머신과 동일한 아키텍처의 리눅스 커널도 설치됩니다. 도커 데스크톱은 실행하면 GUI 애플리케이션뿐만 아니라 리눅스 가상 머신 도 가동합니다. 윈도우와 맥 OS에서 도커를 이용할 때 필요한 모든 것을 간단히 준비할 수 있죠.
도커 데스크톱은 GUI 애플리케이션이므로 버튼 조작으로 컨테이너를 가동할 수 있지만, 책 <그림으로 배우는 도커>에서는 기본 지식을 체계적으로 배울 수 있게 도커 명령어로 컨테이너를 조작하는 방법을 설명합니다. 책을 보고 도커 명령어로 컨테이너 조작에 익숙해지면 도커 데스크톱도 사용해 보기 바랍니다. 어떤 동작인지 이해하기 훨씬 쉬워질 것입니다. 도커 데스크톱은 2021년 8월에 유료화 계획을 발표했습니다. 개인 사용이나 스몰 비즈니스는 여전히 무료로 사용할 수 있습니다.
도커 허브Docker Hub는 클라우드 레지스트리 서비스로 이미지라고 부르는 컨테이너 모형을 공개하는 곳입니다. 도커 허브에는 수많은 리포지터리repository가 있고 리포지터리에는 여러 이미지가 등록되어 있습니다. 예를 들어 우분투 리포지터리에는 우분투 20.04 이미지가 등록되어 있고, PHP 리포지터리에는 아파치용 PHP 이미지와 CLI용 PHP 이미지가 등록되어 있습니다. 사용자는 원하는 이미지를 가져와서 컨테이너로 가동할 수 있습니다.
도커 허브는 그저 이미지를 공개할 뿐인 서비스가 아니라 사설 리포지터리private repository를 작성하거나 사용자 관리 기능으로 접근 제한도 할 수 있습니다. 그 외에도 깃허브GitHub와 연동해서 소스 코드를 변경할 때 이미지를 자동으로 구축하는 기능도 제공합니다.
도커와 구성요소에 대해 간단히 알아봤으니 이번에는 Docker for Windows (도커 데스크톱)를 사용한 도커 설치 방법을 안내합니다. Docker for Windows는 도커 엔진을 실행하기 위해서 내부적으로 하이퍼 VHyper-V나 WSL 2로 리눅스 가상 머신을 가동합니다. 어느 쪽을 사용할지는 Docker for Windows 설정 화면에서 지정할 수 있습니다. Docker for Windows 설정 화면에 나와 있듯이 WSL 2가 좀 더 성능이 좋으므로 저는 WSL 2 사용을 추천합니다. 다음 내용은 아래의 환경 구성을 기반으로 동작을 확인했습니다.
● Docker for Windows(WSL 2 기반 엔진) + 파워셸PowerShell
● Docker for Windows(WSL 2 기반 엔진) + WSL 2 우분투 Bash
Docker for Windows는 도커 공식 사이트에서 다운로드할 수 있습니다. 혹은 구글 등 검색 엔진에서 ‘install docker for windows’로 검색하면 상단에 프로그램을 다운로드 받을 수 있는 사이트가 표시됩니다. 설치 프로그램을 다운로드 해 주세요.
설치에 성공하면 Docker 이름으로 된 GUI 애플리케이션(도커 데스크톱)을 실행할 수 있습니다.
PS C:Usersdocker> docker --version
Docker version 26.1.4, build 5650f9b
파워셸이나 GitBash 같은 셸에서도 docker 명령어로 실행할 수 있습니다. 명령어가 실행되면 설치 완료입니다.
Windows Subsystem for Linux(WSL)는 마이크로소프트가 제공하는 리눅스 가상 머신을 실행하는 기능입니다. 2017년에 WSL 1, 2019년에 WSL 2가 공개되었습니다. WSL 2는 마이크로소프트가 제공하는 리눅스 커널이 작동해서 리눅스와 완전 호환된다고 합니다. WSL은 윈도우 11과 윈도우 10(2019년에 배포된 1903 버전 이후)의 모든 에디션에서 이용할 수 있습니다. 도커 컨테이너 실행은 리눅스 머신이 필요하므로 하이퍼 V나 WSL 2 방법으로 리눅스 가상 머신을 실행해야 합니다. Docker for Windows를 실행하면 백그라운드로 리눅스 가상 머신을 가동 하므로 사용자가 의식해서 리눅스 가상 머신을 관리하지 않아도 됩니다.
CLI 클라이언트를 사용하는 입장에서는 거의 차이가 없습니다.
하이퍼 V와 WSL 2 어느 쪽을 사용해서 리눅스 가상 머신을 가동할지 Docker for Windows GUI 애플리케이션에서 설정할 수 있습니다. 애플리케이션 상단의 바퀴 모양 아이콘을 클릭해서 설정 화면을 열고 [General] 화면의 [Use the WSL 2 based engine]이 체크되어 있는지 확인 합니다.
이어서 활성화를 확인하기 위해 [Resources] > [WSL integration] 화면에서 [Enable integration with my default WSL distro]가 체크되어 있는지 확인합니다.
docker --version 명령어 실행에 성공했으면 도커 사용에 필요한 최소한의 준비가 끝났지만 파워셸이나 GitBash는 조작하기 조금 불편할 수 있습니다. 파워셸은 find나 grep 같은 리눅스 명령어가 없고 GitBash는 <그림으로 배우는 도커>에 등장하는 일부 명령어를 그대로 실행할 수 없습니다. 따라서 대신에 WSL 2의 우분투로 Bash를 이용하는 방법을 소개합니다. 파워셸이나 GitBash 같은 셸에서 wsl --list --verbose를 실행하면 다운로드할 수 있는 리눅스 배포판을 확인할 수 있습니다. * 표시가 있는 배포판이 기본 배포판입니다. 따로 변경하지 않았으면 우분투가 기본값입니다.
PS C:Usersdocker> wsl --list --verbose
NAME STATE VERSION
*Ubuntu-20.04 Running 2
docker-desktop-data Running 2
docker-desktop Running 2
* 마크가 우분투에 붙어 있는 것을 확인했으면 wsl 명령어를 실행합니다. 우분투 가상 머신에 접속해서 Bash를 이용할 수 있습니다. 우분투 Bash에서도 docker 명령어를 사용할 수 있는지 확인합니다.
조금 복잡해졌으므로 위에서 살펴본 <WSL 2를 사용한 도커 구성> 그림에 우분투를 추가하고 다시 살펴보겠습니다. 우측 상단에 리눅스 가상 머신 부분을 유의해서 봐 주세요.
Docker for Windows에서 가동한 도커 컨테이너가 동작하는 리눅스 가상 머신과 wsl 명령어로 접속한 우분투는 서로 다른 가상 머신입니다. 서로 다른 가상 머신인데 우분투에서 도커 명령어를 사용할 수 있는 것은 Docker for Windows의 WSL 2 설정에서 확인한 WSL integration 설정 덕분입니다.
이번에는 맥OS 사용자를 위해 Docker for Mac을 사용한 도커 설치 방법을 간단히 설명합니다. 아래 내용은 다음과 같은 환경구성을 기반으로 동작을 확인했습니다.
● Docker for Mac(인텔 칩)
● Docker for Mac(애플 실리콘 칩)
Docker for Mac도 역시 도커 공식 홈페이지에서 다운로드할 수 있습니다. 구글 등의 검색 엔진에서 ‘install docker for mac’으로 검색해도 찾을 수 있습니다. 자신의 컴퓨터 CPU 종류에 맞게 애플 실리콘 또는 인텔을 선택해서 DMG 파일을 다운로드해 주세요.
설치가 끝나면 Docker라는 GUI 애플리케이션(도커 데스크톱)을 실행할 수 있습니다.
또한 터미널에서도 docker 명령어를 실행할 수 있습니다. docker 명령어를 실행할 수 있으면 설치 성공입니다.
$ docker --version
Docker version 26.1.4, build 5650f9b
책 <그림으로 배우는 도커>에서는 인텔 칩을 사용하는 맥OS를 인텔 맥, 애플 실리콘을 사용하는 맥OS를 애플 실리콘 맥이라고 부르고자 합니다. 호스트 OS의 CPU 아키텍처가 가동할 컨테이너에 영향을 준다고 설명했습니다. Docker for Mac은 설치할 때 인텔 맥과 애플 실리콘 맥 중에서 선택합니다. 그에 따라서 리눅스 커널의 아키텍처도 정해집니다. 하지만 도커 허브 등에서 배포하는 이미지 중에는 어떤 아키텍처는 지원하지 않아서 이미지에 따라서 컨테이너 가동에 문제가 발생할 수 있습니다. 이런 문제는 에러 내용과 대응 방법이 이미지에 따라 달라질 수 있습니다.
사용하는 맥이 어떤 CPU 아키텍처인지 확인하려면 화면 왼쪽 위에 있는 사과 마크를 클릭한 뒤 [이 Mac에 관하여]를 선택합니다. 인텔 맥이라면 프로세서 항목에서 Intel 단어를, 애플 실리콘 맥이라면 칩셋 항목에 Apple M1 표기를 확인할 수 있습니다.
위 콘텐츠는 『그림으로 배우는 도커』의 내용을 발췌하여 작성하였습니다.
이전 글 : 자바 개발자라면 놓치지 말아야 할 자바 실수 100가지와 해결 방법
다음 글 : 다음 글이 없습니다.
최신 콘텐츠