Docker란

docker.hub : 개발에 필요한 환경들을 이미지로 찾을 수 있다.

도커의 이미지란 , 리눅스 컴퓨터의 특정 상태를 캡처해놓은 것을 말한다.

 

node.js는 브라우저에서만 굴러가는 js를 내 컴퓨터에서 사용할 수 있게 해준다.

내 컴퓨터에서 node.js를 설치하지 않고 컴퓨터에서 자바스크립트를 사용할 순 없을까요?

터미널에서 docker run -it node 를 입력해봅시다.

다운로드가 된 뒤에 node.js의 입력 콘솔인 ">"가 나오는 것을 알 수 있다.

여기에 console.log('Hello world!')를 입력하면 출력이 된다.

이 node.js 환경은 어디에서 나타난 걸까?

위 명령어에서 run은 도커가 일단 내 컴퓨터에서 그 이미지를 찾아보고, 없으면 클라우드로 가서 이미지를 다운로드 받는 것을 명령한다. 그 뒤 이미지를 사용하여 내 컴퓨터에 컨테이너를 만든다. (이미지 한 개로 여러개의 컨테이너를 만들 수도 있다.)

-it는 이 컨테이너를 연 다음 그 환경 안에서 CLI를 사용한다는 걸 의미한다. (컨테이너 안의 근로자와 창(CLI)을 통해 소통한다)

이 node 이미지는 컨테이너가 만들어져 설치되면 바로 node.js를 실행하도록 설계가 되어있다. 그렇기에 컨테이너가 만들어지며 바로 입력 콘솔인 ">"가 뜨는 것이다.

 

docker images 명령어를 입력해보자. node라는 이미지가 다운받아진 걸 볼 수 있을 것이다.

 

docker ps 명령어. (실행중인 것만 보여줌)

docker ps -a (모든 걸 보여줌)

 

docker exec -it (컨테이너명) bash 를 사용해서 컨테이너 안으로 들어가보자. (run되고 있는 컨테이너에만 들어갈 수 있다.) (이 컨테이너 내에서 bash shell을 실행한다는 의미이다.) 그러면 리눅스 환경으로 들어간 걸 볼 수 있다.


서비스를 실행하기 위해서는 node.js만 있어서는 안되고 npm등으로 http-server가 전역으로 깔려있어야 한다.

node.js의 이미지에는 http-server는 없기 때문에 컨테이너로 실행할 때마다 서버를 받아줘야하는 불편함이 생긴다.

node.js와 http-server까지 묶인 이미지를 만든다면 서비스를 실행할 때 훨씬 쉬울 것이다.

node.js 이미지를 튜닝해보자

 

RUM npm install -g http-server : http-server 설치 명령어 <-- 이미지를 생성하는 과정에서 실행됨 (컨테이너가 실행될 때 이미 http-server가 설치되어 있도록 함)

WORKDIR /home/node/app : 이 디렉토리 안에서 아래 CMD 명령어를 실행한다

CMD ["http-sersver", "-p", "8080", "./public"] <-- 이미지로부터 컨테이너가 만들어져서 가동될 때 기본으로 실행되는 명령어

 

docker build -t frontend-img . (docker build -t 이미지이름 dockerfile상대경로:파일명이 Dockerfile이면 따로 명시할 필요 없음)


docker-compose

 

frontend, backend, db의 이미지를 각각 관리하기 번거롭기에 등장했다.

위의 세가지 요소가 docker-compse.yml파일의 services라는 항목으로 들어간다.

build는 dockerfile이 위치한 곳이다.

 

docker-compose.yml 파일이 위치한 곳에서 docker-compose up을 해준다.

 

Docker와 docker-compose 모두 각각 설치해줘야한다.