도커(Docker)가 뭔지 쉽게 설명해볼게요
도커가 뭔지, 왜 쓰는지 개발 입문자도 이해할 수 있게 정리했어요.
개발 공부하다 보면 도커 얘기가 꼭 나오는데, 처음엔 뭔지 감이 잘 안 잡혀요. 저도 그랬거든요. 근데 알고 나면 생각보다 단순한 개념이에요. 최대한 쉽게 풀어볼게요.
도커가 왜 필요한 건가요?
일단 도커가 왜 나왔는지부터 보면 이해가 빨라요.
개발하다 보면 이런 상황이 자주 생겨요. 내 컴퓨터에서는 코드가 잘 돌아가는데, 팀원 컴퓨터에서 실행하면 오류가 나는 거예요. 원인을 찾아보면 대부분 환경이 달라서 생기는 문제예요. 파이썬 버전이 다르다거나, 라이브러리 버전이 다르다거나, 운영체제가 달라서 경로 설정이 꼬인다거나요.
이게 생각보다 꽤 자주 있는 일이에요. 그래서 나온 해결책이 도커예요.
도커가 뭔가요?
도커는 컨테이너 방식으로 프로그램을 실행하는 도구예요.
컨테이너라는 개념이 생소할 수 있는데, 이렇게 생각해보세요. 프로그램 하나를 실행하는 데 필요한 것들, 그러니까 코드, 라이브러리, 설정 파일, 실행 환경까지 전부 하나의 박스에 담아서 포장하는 거예요. 이 박스를 다른 사람한테 주면, 받은 사람은 박스 그대로 실행하면 돼요. 환경이 이미 박스 안에 다 들어있으니까 어디서 실행해도 똑같이 돌아가는 거예요.
그래서 “내 컴퓨터에서만 됨” 문제가 사라지는 거예요.
가상머신이랑 다른 건가요?
비슷한 걸로 가상머신(VM)이 있는데, 도커 컨테이너랑 개념적으로 달라요.
가상머신은 컴퓨터 안에 컴퓨터를 통째로 만드는 방식이에요. OS 전체를 올리는 거라 설치 용량도 크고, 켜는 데 시간이 꽤 걸려요. VMware나 VirtualBox 써보셨다면 느낌 알 거예요.
도커 컨테이너는 달라요. OS 전체를 올리는 게 아니라 실행에 필요한 부분만 묶어서 돌리는 방식이에요. 그래서 훨씬 가볍고, 시작하는 데 몇 초도 안 걸려요. 컨테이너 여러 개를 동시에 띄워도 부담이 적어요.
실제로 어디에 쓰냐면요
MySQL 같은 DB 설치할 때
MySQL 직접 설치하면 설정 파일 건드리고, 포트 열고, 환경변수 설정하고 꽤 번거로워요. 도커 쓰면 이렇게 끝이에요.
1
docker run -d -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 mysql
명령어 한 줄로 MySQL이 켜져요. 쓰다가 필요 없어지면 컨테이너 삭제하면 되고, 찌꺼기 파일 같은 거 안 남아요.
팀 프로젝트 환경 맞출 때
Dockerfile이나 docker-compose.yml 파일 하나 공유하면 팀원 모두 같은 환경에서 개발할 수 있어요. “왜 나만 안 돼?”가 사라지는 거죠.
서버 배포할 때
개발 환경이랑 서버 환경을 똑같이 맞출 수 있어서 배포할 때 예상치 못한 오류가 줄어요.
이미지랑 컨테이너, 뭐가 달라요?
도커 쓰다 보면 이 두 단어가 계속 나와요. 처음엔 헷갈리는데 한 번만 이해하면 돼요.
- 이미지(Image): 컨테이너를 만들기 위한 설계도예요. 실행 전 상태라고 보면 돼요. 파일 형태로 저장되고 변경이 안 돼요.
- 컨테이너(Container): 이미지를 실행한 상태예요. 실제로 돌아가고 있는 프로세스예요.
붕어빵 틀이 이미지고, 찍어낸 붕어빵이 컨테이너예요. 틀 하나로 붕어빵을 여러 개 만들 수 있듯이, 이미지 하나로 컨테이너를 여러 개 띄울 수 있어요.
Docker Hub
도커에는 Docker Hub라는 공식 이미지 저장소가 있어요. MySQL, Nginx, Redis, Python 같이 자주 쓰는 프로그램 이미지가 전부 올라와 있어요. 직접 이미지를 만들 필요 없이 가져다 쓰면 돼요. 깃허브랑 비슷한 느낌인데, 코드 대신 도커 이미지를 올리고 내려받는 곳이에요.
개념은 이 정도면 충분해요. 다음 포스트에서는 윈도우에서 도커를 쓰기 전에 먼저 설정해야 하는 WSL2 활성화 방법을 다뤄볼게요.
