직접 깡으로 배포하는 경험이 있는 사람에게 도커의 편안함이 많이 와닿을 것이다. 나는 SSH
에서 node
db
를 직접 설치하고, 각각의 환경변수 셋팅하는 과정에서 많은 에러가 발생했다. 또한 해결하는 과정도 역시 쉽지 않았다. 애초에 에러가 많이 발생하는 이유는 환경이 독립되지 않아서 충돌이 발생했기 때문이다. 하지만 도커를 사용하면 이러한 걱정을 할 필요가 없다. 컨테이너를 제공함으로써 독립된 환경을 제공하고, 설치 또한 명령어 한줄로 모든 게 다 된다.
도커를 이해하기 위해서는 컨테이너와 이미지라는 개념을 알고 있어야한다. 먼저 이 두용어에 대해서 알아보자. 컨테이너란 호스트 컴퓨터 내부의 독립된 환경의 미니 컴퓨터이다.
하나의 호스트 컴퓨터에 여러개의 컨테이너 환경을 구성할 수 있다.
컨테이너 환경은 독립적이기 때문에, 각각 독자적인 저장 공간과 네트워크(ip. port) 를 가지고 있다.
이미지는 닌텐도 칩에 비유할 수 있겠다. 닌텐도 칩은 각각 게임을 탑재하고 있다. 예시로 마리오 칩이 있다면 그것을 닌텐도에 꼽기만 하면 닌텐도에서 바로 마리오 게임을 즐길 수 있게 된다. 도커에서 이미지는 이와 매우 유사하다. 예시로 Mysql
이라는 이미지를 컨테이너 (미니컴퓨터) 에 꼽기만 하면 해당 컨테이너에서 Mysql
을 사용할 수 있다.
즉, 도커는 이미지를 통해서 뛰어난 이식성을 갖추고 있다.
따라서 도커에서 컨테이너를 띄울 때 보통 이미지와 함께 컨테이너를 띄운다. 이미지를 사용하지 않으면 사실상 도커를 사용하는 의미가 없기 때문이다.
도커의 전반적인 흐름은 다음과 같다.
- 이미지를 다운 받는다.
- 다운로드 받은 이미지를 컨테이너에 올린다.
2-1. 만약에 서버를 컨테이너에 올린 경우 포트 매핑을 신경 써준다.
간단하게 nginx
서버를 도커를 이용해서 띄어보자.
그러기 위해서는 우선 nginx
이미지 부터 dockerhub
로 부터 다운로드 받을 수 있도록 하자.
docker pull nginx
다음으로는 image 가 잘 다운로드 받아졌는지 확인하기 위해서 아래 명령어를 수행하자.
docker image ls
마지막 과정으로 nginx
이미지를 컨테이너에 올려 띄우면 끝이다.
docker run --name my-server -d -p 80:80 nginx
run
은 컨테이너를 띄우는 명령어인데 컨테이너의 이름을 my-server
로 하였다. -d
는 백그라운드 환경에서 컨테이너를 띄우는 뜻이고, -p 80:80
는 호스트 포트 80번과 컨테이너 포트 80번을 이어준 것이다. 아래의 그림을 참고하도록 하자.