도커, Docker가 무엇인지 냉큼 한 번 알아봅시다 (ft. Docker Desktop)
Docker를 한번 써 봐야지 써 봐야지 하면서 기회가 없어 미뤄만 오다가, 드디어 한번 살펴봐두자고 마음먹게 되었습니다. 개발자가 아닌 입장에서 회사 생활하면서 신기술 신문물을 혼자 공부하면서 당장 써먹어보는 게 쉬운 일은 아닌 것 같습니다.
도커를 대충 살펴보니, 아주 아주 옛날 고리짝에 Ghost Tool로 이미지를 떠서 사용하던 것이 겹쳐 떠 오르더라구요. 그리고 언젠가 CD-R 또는 CD-RW라고 하는 장비가 유행처럼 보급되던 시절에 iso 이미지를 떠서 백업하고 사용하던 그 시절의 추억이 잠시 떠올랐더랬습니다.
아무튼 오늘은 도커를 한번 맛보기로 합니다.
도커를 사용하는 이유
도커는 대체 무엇이고 왜 사용하는 것일까요? 뭔가 필요하고 편리하니까 세상에 등장했겠죠?
서버 관련한 Web 작업을 한 번이라도 해보았다면, "서버이전"과 같은 작업에 얼마나 많은 변수들이 존재하는 지 경험적으로 알 수 있을 것입니다. 보통 개발서버 환경을 만들어서 개발을 진행하고, 이후 운영서버 환경으로 작업 파일들을 옮겨서 실제적인 서비스를 제공하게 되는 게 일반적인데요, 개발서버에서 멀쩡하게 잘만 돌아가던 프로그램들이 운영서버로 옮겼을 때 에러가 펑펑 터지는 경우도 일상다반사입니다.
컴퓨터 마다 사용되는 OS의 버전도 다를 수 있고, 라이브러리의 버전도 다를 수 있고, 아무튼 완전히 두 환경이 똑같을 수가 없기 때문에 항상 변수가 존재하기 마련입니다.
다른 사람과 협업을 하면서 개발을 해야 하는 경우에도, 내 환경에서는 멀쩡히 돌아가던 프로그램이, 다른 사람에게 전달을 하면 에러가 펑펑 터지는 경우도 존재하기 마련입니다.
이러한 환경변수 문제를 쉽게 해결하기 위해서 도커가 태어났다고 보면 될듯합니다.
OS단부터 하나의 이미지로 만들어서 다른 사람 또는 다른 환경에게 전달을 하는 것이죠. 이 Docker 이미지를 실행할 수 있는 환경만 동일하다면, 나머지는 동일한 이미지 안에 들어 있는 내용으로 컨테이너라는 환경에서 동작이 되기 때문입니다.
동일한 MS-Word 버전을 서로 갖고 있는 사람들 간에, 작성된 doc 파일을 주고 받는 경우?와도 유사하다고 볼 수 있겠습니다. 다만 온갖 복잡 다양한 설정이 존재하는 개발환경을 마치 간단한 한 개의 doc 파일 만들어 주는 것이, Docker라는 툴이 되는 것입니다.
쉬운 이해를 위해 Docker Desktop을 설치해보자
도커를 쉽게 사용할 수 있도록 도와주는 Doker Desktop을 설치해보기로 합니다.
아래 URL에 접속합니다. https://www.docker.com/
저는 윈도우 사용자라, Download for Windows - AMD64를 클릭했습니다.
본인이 사용하는 OS에 맞는 버전을 클릭해서 다운로드 받으면 되겠습니다.
Docker Desktop을 설치하면, 도커 기본엔진은 물론 Docker compose, Doker Cli 등 도커 사용에 필요한 것들을 알아서 잘 설치를 해주게 됩니다. 우리는 그냥 편리하게 사용해뿔면 그만!
참고로 Docker는 Lynux 기반의 기술로 만들어진 툴입니다. 그래서 MS Windows OS 기반에서는 바로 Docker를 사용할 수가 없고, 가상 기반의 리눅스 OS를 구동해주어야 하는데 그 역할을 해주는 것이, 아래 설치 첫화면의 WSL 2입니다.
그런데 말입니다. Docker Desktop을 설치해주면 알아서 다 세팅해줍니다. 정말 고마운 일이 아닐 수 없습니다!
자, [OK] 버튼을 클릭하고 설치를 시작해봅니다.
제가 설치하는 시점에서는 Docker Desktop 4.35.1 버전이군요.
Install이 완료되었습니다. OS를 구동하는 부분이다 보니, PC를 재시작 해주어야 하나봅니다.
[Close and restart] 버튼을 클릭하고 컴퓨터를 재시작 해줍니다.
컴퓨터가 리부팅 되고 나면, 아래와 같이 처음 보는 귀여운 팝업창이 나타납니다.
Docker 사용 라이센스 관련한 내용인데요, 근로자가 250명 이상이거나, 연매출 천만 달러 이상이면 상업적으로 사용하라고 하는 내용입니다. 돈 내고 쓰고 싶으니, 연매출 140억 이상 해보고 싶습니다!!!!
[Accept] 버튼 꿀 눌러주면, 세팅창이 하나 더 나타납니다. 잘 모르니, 추천해주는 세팅으로 꾹!!
도커 데스크톱이 실행되면서 아래와 같은 웰컴 메시지가 나타납니다.
Personal로 해서 G메일 계정으로 로그인 해보았습니다.
아래처럼 도커 Desktop의 첫 화면이 나타났습니다. 뭔가 되게 쉬운데요?
그런데 말입니다.. 개발공부라면 뭔가 다크한게 좀 더 멋지지 않겠습니까? 뭐니뭐니해도 Dark Mode죠.
있을 거 같아 찾아보니, 설정 화면에 존재하고 있군요. 다크 모드로 체인지!!
짠! 다크 모드로 바뀌었습니다. 한결 간지 있어 보이는군요.
Docker의 핵심기능 2 가지만 꼭 이해하고 기억해둡시다
도커의 핵심 기능 1 : Image
도커에서 말하는 이미지(Image)는 사진, 그래픽 등의 이미지 파일은 아니고, 음... 예를 들어, HDD에 전기적 신호로 들어 있는 파일들을 찰칵! 찍어둔 것이라고 생각할 수 있겠습니다. 혹은 OS 및 라이브러리 등 실행에 필요한 여러 환경을 하나의 zip 파일처럼 압축해 놓은 것? 정도로 일단 이해할 수도 있겠습니다.(= 그냥 파일 덩어리)
도커의 핵심 기능 2 : Container
컨테이너는 Image가 실행되는 하나의 가상 컴퓨팅 환경으로 이해하면 됩니다. 컨테이너 선과 같은 커다란 고래로 표현되는 도커의 로고처럼, 다른 곳으로 실어 나르는 컨테이너 안에서 이미지들이 실행되고 있다고 이해할 수도 있겠습니다. 컨테이너 ? 그냥 1대의 컴퓨터라고 이해해둡시다.
기본적으로 일단 위 2가지를 잘 기억해둡시다.
도커에서도 Hello World를 출력해보자
Docker Desktop 앱 상단의 검색창은 Docker Hub라는 곳에 올려진 수많은 공개 image들을 검색해볼 수 있는 기능입니다. 다른 사람이 만들어 놓은 도커 이미지들을 검색해서 사용해 볼 수 있다는 것이죠. 감이 오나요?
어디에든 있는, Hello World도 도커에 마련이 되어 있는지 어디 한번 검색을 해보도록 합니다.
검색된 여러 개의 목록 중, 저는 dockercloud/hello-world를 사용해보기 위해, Pull 버튼을 클릭해서 땡겨 옵니다.
이미지 파일 다운로드가 끝나면, Images 탭의 Local 화면에 아래와 같이 다운 받은 이미지 파일이 나타납니다.
삼각형 Play 버튼을 클릭하면 실행이 되겠죠? 꾹 눌러줍니다.
그러면 Run a new container, 즉 새로운 컨테이너 하나를 실행할 것이냐고 물어옵니다. 맞습니다. 이미지는 컨테이너(1개의 가상 PC)에서 돌아가게 되는 것이니까요.
실행하기에 앞서, 옵션 하나를 세팅해보도록 합니다. 저는 Port를 세팅하는 곳에, 8080번을 입력했습니다.
(당연히, 8088을 해도 되고... 8888로 해도 특정 프로그램에서 사용되고 있는 포트만 아니면 되겠죠?)
위 세팅의 의미는 8080 포트로 접속하면, 80번 포트로 보내라는 의미입니다.(그냥 그런가보다 하고 일단 패쓰!)
그러면 이렇게 하나의 컨테이너가 생성되어서, 뭔가 실행이 되고 있음이 표시됩니다.
(사실 지금 내 컴퓨터에서 웹서버가 하나 돌고 있는 상황입니다.)
브라우저를 하나 실행하고, http://localhost:8080/ 를 주소창에 타이핑 한 후 엔터를 빡! 쳐보면...
브라우저에, 웹페이지가 하나 뜨면서 Hello World가 출력되었습니다!! 만든 적도 없는 웹 페이지가 떠 있군요! 신기하지 않나요?
참고로 실행중인 컨테이너는 Stop 버튼을 클릭하면 멈출 수 있습니다.
마치며
도커에는 보다 복잡한 사용방법들이 물론 존재하지만, 오늘은 일단 요 만큼까지로 Docker Desktop을 이용해서, 도커란 무엇인지 느껴보고 이해를 해보았습니다. 저는 이런 개발분야가 제가 하는 업무와 비교적 가까운 인접분야라서, 새로운 기술이나 툴들이 나오면 일단 이렇게 실체를 파악(?) 해보는 과정을 즐겨 해보는 편입니다.
직접 개발을 하지는 않더라도, 실체를 알아야 이해의 폭이 넓어지고 개발자들과 소통이 좀 더 용이할테니까요. 그러다 보면 어깨 너머로 배우게 되는 코딩 실력도 조금씩 늘어가게 되는 것 같습니다. 이제 드디어 도커에 대한 궁금증이 일부 풀렸습니다!
오늘도 즐거운 코딩생활, 즐코딩
KINcoding.
댓글