요즘 도커(Docker)라고 불리는 기술이 굉장히 인기가 많습니다.
개발자로서 아래의 이미지의 파란색 고래를 한 번쯤은 보신 적이 있으실텐데요.
이 도커! 도대체 뭐고 어디에 쓰는 걸까요?
간단하게 알려드리겠습니다.
도커가 뭐야?
도커(Docker)는 쉽게 말해 가상머신(VM) 같은거라고 생각하면 됩니다.
근데 가상머신의 단점을 빼고 장점만 모은겁니다.
가상머신이 뭘까요?
저는 몇 년째 맥북을 쓰고 있는데, 가끔 어렸을 때 하던 메이플스토리가 하고 싶을 때가 있어요.
하지만 맥북에서는 메이플스토리가 돌아가지 않습니다...!
그래서 맥북에 원도우를 깔아서 메이플스토리를 하곤 했습니다.
이때 MacOS가 돌아가고 있는 상태에서, 또 다른 OS인 Windows를 가상머신의 형태로 설치한 겁니다.
이런 가상머신의 문제점은
1. OS를 모두 깔아야 하기 때문에 무겁고,
2. 내 컴퓨터의 메모리를 미리 정해진 만큼 잡아먹기 때문에 손해가 많습니다.
그래서 가상머신의 무거움은 덜어내고, 가상머신의 장점인 분리된 환경은 제공하는 게 도커(Docker)입니다.
도커의 장점?
도커의 장점은 2가지로 나눠 볼 수 있습니다.
가상머신을 쓰는 이유 자체 + 도커가 해결한 가상머신의 문제점입니다.
애초에 개발자가, 특히 서버 개발자가 가상머신을 왜 쓸까요?
서버 개발자는 서버에서 돌아가는 프로그램을 만듭니다.
서버는 대부분 Linux라는 OS를 사용하고 있지만
많은 개발자들이 MacOS나 Windows에서 개발을 합니다.
그래서 분명 열심히 개발해서 문제없이 돌아갔는데 배포를 하면 문제가 생기는 경우가 많습니다.
하지만 처음부터 서버랑 똑같은 환경에서 개발하고 테스트한다면 어떨까요?
심지어 그냥 도커 이미지만 올리면 서버에서 알아서 배포가 된다면 어떨까요?
굉장히 편리할 거에요.
도커가 처음에는 복잡해 보이지만, 모든 기술은 결국 문제를 해결하고 더 간단히 하기 위해 있습니다.
여기에 위에서 언급한 가상머신의 문제점을 해결한 것도 큰 장점입니다.
아무리 이론상 편리해도 가상머신은 너무 무겁고, 용량도 많고, 느려서 쓰기가 힘들어요.
하지만 도커는
더 적은 용량을 차지하고,
구동도 빠르고,
메모리도 적게 먹고,
완전한 OS가 필요하지 않기 때문에 위의 장점을 활용할 수 있게 됐습니다.
도커 설치하기
도커는 아래 링크에서 설치할 수 있습니다.
영어로 되어 있긴 하지만 사용하고 계신 OS를 선택하고 따라 하기만 하면 간단히 설치됩니다.
컨테이너, 이미지? 이게 다 뭐야. 도커에서 쓰는 용어 간단 정리
도커가 무엇인진 알았어도 막상 공부해 보려고 하면 처음 보는 용어가 많아서 헷갈리실 수 있습니다.
하지만 도커가 무엇인지(가상화 도구)를 생각하면서 용어의 의미를 보면 어렵지 않습니다!
이미지 (Docker Image)
도커 이미지는 한 마디로 레시피라고 생각하면 됩니다.
소프트웨어를 만들었는데
- 이 환경에는 OS는 리눅스를 쓰고
- 처음 구동할 땐 이런 명령어를 실행하고
- 이 라이브러리를 쓰고
등의 각종 설정과 소프트웨어가 모여 있어서 실행할 수 있는 레시피입니다.
도커 허브 (Docker Hub)
도커 허브는 각종 도커 이미지를 공유하는 곳 + 깃허브처럼 나만의 도커이미지를 올릴 수 있는 곳입니다.
보통 나만의 도커 이미지를 만들 때도 도커 허브에 있는 이미지를 바탕으로 나만의 설정을 추가하는 방식입니다.
컨테이너 (Container)
도커 이미지를 실행하면 도커 컨테이너가 됩니다.
우리가 웹 브라우저의 창을 여러 개 띄울 수 있듯이,
똑같은 도커 이미지로부터 여러 개의 컨테이너를 동시에 구동할 수 있습니다.
OOP의 용어를 빌리면 컨테이너는 이미지의 인스턴스라 볼 수 있습니다.
태그 (tag)
같은 이미지도 여러 버전이 있을 수 있습니다.
이때 똑같은 이미지의 여러 버전에 붙이는 별명 같은 게 태그입니다.
MySQL 이미지를 예로 들면 각종 버전이 붙어있는 태그가 있고, 가장 최신 버전을 사용하고 싶으면 latest 태그를 사용하면 됩니다. latest 외에도 alpine이라 불리는 태그는 이미지의 가벼운(용량이 더 적은) 버전입니다.
DockerFile로 나만의 이미지 만들기
프로젝트를 도커로 관리하고 싶다면, 나만의 이미지를 만들어야 합니다.
Docker Hub에 있는 필요한 이미지로부터 나만의 설정 + 명령어를 조합해서
프로젝트 최상단 폴더에 DockerFile에 저장하면
프로젝트에 맞는 도커 이미지를 만들 수 있습니다.
공식 docs를 참고하면 자세히 나와 있습니다!
자주 쓰는 거 몇 개만 요약하자면,
FROM | 바탕을 둘 도커 이미지를 알려주는 명령어 |
ADD | 파일을 도커 이미지에 추가하는 명령어 |
RUN | 컨테이너가 실행될때 터미널에 입력할 명령어 |
CMD | 컨테이너가 실행되고 터미널에 입력할 명령어 |
예시로 만든 이미지입니다.
리엑트를 실행할 때 이런 이미지를 사용할 수 있습니다
FROM node:latest // 노드 이미지로부터 시작해서
ADD . . // 현재 경로에 있는 모든 파일을 이미지에 추가하고
RUN npm install // 컨테이너가 실행될때 npm install을 실행하고
CMD node index.js // 실행되고 node index.js를 실행
Docker 명령어 간단정리
- 컨테이너 관련 명령어
명령어 | 뭐하는 명령어? |
docker ps | 현재 실행되고 있는 컨테이너를 모두 보여주는 명령어입니다 |
docker ps -a | 실행되고 있지 않은 컨테이너도 모두 보여주는 명령어입니다. -a가 all이라는 뜻이에요 |
docker rm 컨테이너이름/아이디 | 종료된 컨테이너를 삭제하는 명령어입니다. 실행되고 있는 컨테이너를 그냥 삭제하려면 -f를 붙여주면 되요 |
docker stop 컨테이너이름/아이디 | 컨테이너를 중지하는 명령어입니다 |
docker start 컨테이너이름/아이디 | 컨테이너를 시작하는 명령어입니다 |
- 이미지 관련 명령어
명령어 | 뭐하는 명령어? |
docker images | 내 컴퓨터에 설치된 도커 이미지를 모두 보여주는 명령어입니다 |
docker rmi 이미지이름 | 내 컴퓨터에서 도커 이미지를 삭제하는 명령어입니다 |
docker pull 이미지이름 | Docker Hub에서 도커 이미지를 내 컴퓨터에 다운로드하는 명령어입니다 |
docker run 이미지이름 | 이미지를 실행하는 (컨테이너로 만드는) 명령어입니다 |
- 도커 허브 관련 명령어
명령어 | 뭐하는 명령어? |
docker login | 도커 허브에 로그인하는 명령어입니다 |
docker push | 내 도커 이미지를 도커 허브에 올리는 명령어입니다 |
요약
1. 도커는 배포/테스팅을 간편하게 하기 위해 가상머신의 단점인 무거움을 없앤 새로운 기술이다.
2. Docker Hub에 있는 이미지를 바탕으로 나만의 이미지를 만들어 간단하게 배포할 수 있다.
'👨💻 프로그래밍 > ⚙️ 배포 (AWS, Docker, K8S)' 카테고리의 다른 글
다양한 배포 전략 비교 (카나리, 블루그린, 롤링, 그림자) (0) | 2024.08.24 |
---|---|
Logback 간단하게 알아보기 (0) | 2023.10.01 |
Git 파일의 Life Cycle 이해하기 (0) | 2023.06.29 |
쿠버네티스가 뭘까? 작동원리, 아키텍처 정리! (0) | 2023.04.02 |