Docker 를 통해 Node 서버 띄우기
Node 이미지 검색 및 다운
docker 허브에 이미 해당 이미지가 있을땐 기분이 좋습니다. 그것도 수많은 star 와 pull 을 가진 이미지는요. 내가 글로벌 스탠다드하게 일하고 있구나 느끼게 해주죠. 암튼 이미 이미지가 있으니 사용합니다.
docker image pull node
이미 이미지를 가지고 있는데 한번 더 pull 해보니 update 를 수행하네요. 그리고 node 이미지는 사이즈가 좀 큽니다. 아마도 내부에 dependency 대상 파일들을 거의 대부분 가지고 있기 때문으로 보입니다. 뭐 이건 추측!.
호스트의 특정 경로를 컨테이너의 특정 경로에 mount 하기
당연한 이야기 지만 docker 의 이미지는 클래스와 같고 docker 의 컨테이너 프로세스는 인스턴스와 같아서 인스턴스에 아무리 수정을 가한들 이미지는 변경되지 않습니다. 또한 이미지는 모든 프로세스가 공유하기 때문에 수정도 불가합니다. 이미지를 새로 만드는 것은 가능하지요.
문제는 서비스를 하려면 이미지에 있는 소스가 아니라 내 소스를 컨테이너 프로세스에 붙여야 하는데 어쩌지? 입니다.
Docker 는 파일들을 Layered File System 형식으로 관리합니다. 계속 계층적으로 덧붙인다는 거죠.
아무튼 아래와 같이 호스트의 특정 경로를 컨테이너의 특정 경로에 mount 할 수 있습니다.
docker run -p 80:4000 -v /var/www node
//node 이미지를 이용해서 컨테이너를 구동하되 호스트의 80 포트를 컨테이너의 4000 에 연결하고 호스트의 임의 경로를 컨테이너의 /var/temp/ 경로에 붙이라는 의미입니다.
이미지를 사용만 하고 아무 daemon 도 구동하지 않았기 때문에 바로 exited 되었습니다.
그런데 컨테이너의 /var/temp 경로는 호스트의 어디에 연결된 걸까요?
inspect 명령어로 확인해 보겠습니다. (위의 컨테이너 중 c3 으로 id 가 시작하는 컨테이너를 조사해 봅니다.)
docker inspect c3
수 많은 정보가 출력 되지만, Mounts 를 보면, Source 즉 호스트의 ....../_data 경로가 Destination 즉 컨테이너의 /var/temp 경로에 mount 된 것을 알 수 있습니다.
로컬 node 소스를 docker container 에서 구동시키기
로컬에 아래와 같이 소스가 있고,
아래 명령어로 구동이 됩니다. (package.json 내용)
npm start
보시는 것처럼 서비스는 4000 번에서 리슨합니다.
이 경우 아래와 같은 명령을 통해 컨테이너 내에서 실행 할 수가 있습니다.
위와 같이 로컬호스트의 80 으로 접속해보면 정상적으로 컨테이너에 구동된 서버가 응답 처리를 합니다.
이번 포스트는 여기까지 입니다.
'Development Tools > Docker' 카테고리의 다른 글
Docker 에서 표준적으로 쓰이는 Apline Linux 는 뭔가요? (3) | 2018.01.02 |
---|---|
Docker 이미지 만들기 (0) | 2017.12.31 |
Docker를 통해 Nginx 띄우기 (0) | 2017.12.30 |
Docker 시작하기 (0) | 2017.12.30 |
Mac 을 위한 Docker Native 가 릴리즈 되었네요. Docker for Mac (0) | 2017.12.30 |