본 포스팅은 생활코딩 유튜브를 기반으로 작성되었습니다.
https://www.youtube.com/watch?v=Ps8HDIAyPD0
1. 개요
내 컴퓨터에서 Application을 만들기 위해서는 운영체제에
여러 소프트웨어를 설치해야 합니다.
예를 들어서 웹 개발을 한다고 하면
Web server나 database 등을 설치해야 합니다.
그러나 이것을 설치하는 작업은 아주 까다로운 작업입니다.
그래서 개발자들은 이러한 생각을 가지게됩니다.
Web Server를 만든 사람이 컴퓨터를 구해서 적당한 OS를 설치하고
그 위에 Web Server를 설치한 다음 그것을 개발자에게 준다면
얼마나 좋을까요? DB도 마찬가지 입니다.
전문가가 알아서 잘 설치한 상태이기 때문에
실행되지 않을까 걱정할 필요도 없어집니다.
그리고 우리의 앱은 네트워크로 통신하여 이것들을 사용할 수 있다면
얼마나 편리하게 될까요
그러나 이러한 방식은 컴퓨터가 세대나 필요하게 되어 비용적인 문제가 발생합니다.
그래서 하나의 컴퓨터에 가상으로 컴퓨터를 만들고 그위에 운영체제를 설치한 뒤에
그곳에 웹서버를 설치한다면 컴퓨터를 별도로 장만하지 않아도 됩니다.
Vmware나 Virtualbox 같은것을 사용해 봤다면 이것이 그러한 것입니다.
그러나, 겨우 Web Server를 위해서 운영체제를 설치해야 한다는것이 너무 아깝습니다.
운영체제 용량은 아주 거대하고 운영체제 위에 또 운영체제가 존재하다 보니
실행속도 또한 너무 느려지게 됩니다.
그래서 개발자들은 다시 꿈을 꾸게됩니다.
한대의 컴퓨터 안에서 각각의 앱을 실행시키는 것입니다.
그리고 각각의 앱은 그냥 실행되는 것이 아니고 격리된 환경에서 실행됩니다.
이 때, 운영체제가 설치된 컴퓨터를 주인이라는 뜻에서 host라고 부릅니다.
host에서 실행되는 격리된 각각의 실행환경을 Container라고 합니다.
각각의 컨테이너에는 운영체제 전체가 설치되어 있는것이 아니고
앱을 실행하는데 필요한 라이브러리와 실행파일만 포함되어 있습니다.
이렇게 앱이 실행될 수 있다면 얼마나 편리할까요
이미 존재하는 운영체제를 공유하다보니 무엇인가를 설치할 필요도 없고
운영체제가 하나니까 속도 또한 느려지지 않습니다.
저장장치의 용량 또한 아낄 수 있습니다.
리눅스 운영체제에는 이렇게 환상적인 앱 실행방법이 내장되어 있습니다.
이러한 기술을 컨테이너라고 부릅니다.
컨테이너 기술을 이용하여 이러한 일을 쉽게 해주는 소프트웨어들이 여럿 있지만
그 중에서 가장 잘나가는 제품이 바로 Docker입니다.
Docker는 부두에서 컨테이너들을 다루는 노동자들을 의미합니다.
2. Docker 설치
설치에 앞서 알아두어야 할 것이 몇가지 있습니다.
Docker와 같은 컨테이너 기술은 리눅스 운영체제의 기술입니다.
여기서 우리는 두가지를 알 수 있습니다.
1. Docker위에서 돌아가는 컨테이너 또 그 컨테이너 안에서 돌아가는 각각의 앱들은
리눅스 운영체제에서 동작하는 앱들이다 라는것
2. 만약 자신의 컴퓨터가 리눅스 운영체제가 아니라면, Docker를 쓸 수 없는것인가?
Window나 MacOS를 사용중이라면 컴퓨터에 가상 머신을 설치하고
그 가상머신에 리눅스 운영체제를 깔면 리눅스 운영체제 위에서 Docker와같은
컨테이너 기술을 사용할 수 있게됩니다.
이렇게 하는것이 굉장히 복잡하고 까다로워 보이지만 Docker는 모든 작업을 알아서 해줍니다.
Docker는 가상머신을 만들어주고 그위에 리눅스를 설치해줍니다.
이러한 이유로 운영체제가 Linux라면 그 위에서 바로 앱이 실행되기 때문에
성능의 저하가 전혀 발생하지 않습니다. 즉, 아주 고성능으로 사용이 가능합니다.
만약 운영체제가 리눅스가 아니라면 가상머신을 사용하기 떄문에, 어느정도의 속도저하를
감수해야만 합니다. 그럼에도 불구하고 Docker를 사용하는 이유는
Docker를 사용하면 그 편의성이 어마어마하기 때문입니다.
설치방법
도커 홈페이지 https://www.docker.com/
Empowering App Development for Developers | Docker
Learn how Docker helps developers bring their ideas to life by conquering the complexity of app development.
www.docker.com
홈페이지를 방문하여 상단 메뉴바의 Developers -> Docs를 클릭합니다,.
여러가지 메뉴들이 나오게 되는데 그중 Download and install을 클릭합니다.
해당 메뉴로 들어가게 되면 운영체제별로 설치가 가능한 탭들이 나옵니다.
각자의 설치환경에 맞는 다운로드 탭으로 클릭하여 이동한 다음
설치 후 설치된 프로그램을 실행시켜서 설치를 마무리하면 됩니다.
글 작성자의 경우 Windows 환경에서 설치하기 때문에 Windows를 예로 들겠습니다.
설치가 완료되면 Docker Desktop이라는 프로그램을 실행할 수 있습니다.
OK버튼으로 설치 진행
설치가 완료되면
Restart 창이 나오게됩니다.
컴퓨터를 다시시작 하게되면 하단의 화면이 출력됩니다.
체크박스에 체크 후 Accept하시면 설치가 끝이납니다.
윈도우 시작표시줄 오른쪽 하단을 확인하면
고래모양의 아이콘을 확인할 수 있습니다.
해당 아이콘에 우클릭을하여 Dashboard를 클릭합니다.
Dashboard를 클릭하면 하단의 화면을 볼 수 있습니다.
Docker는 GUI를 통해 제어하는것이 아닌 명령어를 통해 제어하는것으로 온전한 성능을 발휘할 수 있습니다.
만약 위의 이미지처럼 wsl2 오류가 나면서 연결이 실패된다면
실패 시 안내되는 메세지의 링크로 들어가셔서 4단계 설치를 따라하시면 완료됩니다.
시작메뉴에서 cmd창(명령프롬포트)을 실행한 뒤 docker images 입력
오류메세지가 아닌 다른 메세지가 나온다면 정상적으로 실행중인 상태입니다.
3. 이미지 pull
일반적으로 휴대폰에서 어플리케이션을 다운로드 받을때 app store에서 다운로드 하듯이
docker hub라는 레지스트리라고 불리는 서비스에서 필요한 소프트웨어를 찾게됩니다.
app store에서 다운로드 받아서 저장한것을 program이라고 합니다.
docker hub에서 다운로드하여 저장한것을 image라고 합니다.
program을 실행하면 process라고 하는것이 실제로 동작하게 됩니다.
마찬가지로 image를 실행하는것은 container라고 합니다.
program이 여러개의 process를 가질 수 있는것처럼
image또한 여러개의 container를 가질 수 있습니다.
docker hun에서 image를 다운받는 행위를 pull이라고 합니다.
image를 실행시키는 행위를 run이라고 합니다.
docker hub에서 필요한 이미지를 다운받는 방법을 알아보겠습니다.
우선 http://hub.docker.com 으로 이동합니다.
상단 메뉴바의 Explore를 클릭합니다.
Container 탭을 확인해보면 인기있는 컨테이너들이 나오게됩니다.
이중에서 원하는 소프트웨어가 설치되어 있는 컨테이너를 설치하면 됩니다.
저는 apache webserver를 컨테이너 위에서 실행하고자 합니다.
docker hub상에서 apache webserver는 httpd라는 이름으로 등록되어 있습니다.
Official image라고 적혀있는 것은 docker에서 공식적으로 관리하는 믿을 수 있는 이미지라는 뜻입니다.
클릭해서 이동해보면
docker pull httpd라는 명령어로 다운받을 수 있다고 알려주고 있습니다.
그리고 Description에는 사용법에 대한 설명이 자세하게 적혀있습니다.
https://docs.docker.com/ 사이트로 이동합니다.
상단 메뉴바의 Reference -> 왼쪽 사이드바의 command line reference를 클릭하여
하단의 docker pull로 이동합니다.
다시 cmd창으로 이동하여
docker pull httpd를 입력하여 다운로드를 진행합니다.
이미지를 잘 다운로드 받았는지 확인하기 위해서는 docker images라는 명령어를 입력합니다.
httpd 이미지가 컴퓨터에 잘 저장되었다는 것을 확인할 수 있습니다.
옆의 latest는 최신버전 이라는 의미이고 그 옆은 식별자, 생성된 기간, 용량 순으로 표현됩니다.
방금했던 작업을 GUI에서 하고싶다면
Docker desktop을 사용하면 됩니다. dashboard를 클릭합니다.
images를 클릭하면 현재 설치된 이미지를 보여줍니다.
'프로젝트 > 프로젝트 관련' 카테고리의 다른 글
NGINX란 무엇인가? 왜 사용하는가? (0) | 2021.12.28 |
---|---|
Docker 입문 下 (0) | 2021.12.28 |
Docker란 무엇인가? 왜 쓰는가? 소개편 (0) | 2021.12.25 |
JDBC, SQL Mapper(MyBatis), ORM (0) | 2021.12.25 |
DTO와 VO는 무엇인가? (0) | 2021.12.23 |