Docker를 사용하는 이유
개발환경이 바뀐다고 가정해 볼 때 가상 환경에 운영 환경과 같은 운영 체제를 설치하고 환경 구축 작업을 해야 합니다.
Node.js와 같은 런타임 환경 그리고 사용하는 언어의 버전, 데이터베이스, 수많은 node_modules를 버전을 맞춰서 설치하는 등 매번 이렇게 구축하는 것은 매우 번거로운 일입니다.
이 때 로컬 환경에 도커만 설치하면 몇 줄짜리 구성 파일과 명령어 한 줄로 어플리케이션이나 미들웨어가 이미 갖추어진 테스트용 가상환경(도커 컨테이너)을 빠르게 구축할 수 있습니다.
docker - > 가상컴퓨터 ( 컨테이너 )
docker compose -> 가상컴퓨터를 묶음으로 실행시키는 것 (컨테이너 묶음)
docker swarm ( 컨테이너 관리자 )
[ 도커 컨테이너실행방법 ]

컨테이너를 실행하기 전에 먼저 해줘야 할 것은 이미지를 만드는 것입니다. Dockerfile 이라는 이름의 파일을 만들고 이미지를 만들기 위한 명령어를 입력합니다. 그리고 docker build 명령어를 통해 이미지를 만들게 됩니다.
1. Dockerfile 만들기
가상 컴퓨터를 만들 때 어떠한 설명서를 참고하여 컴퓨터를 만들게 되는데,
이 역할을 하는 것이 바로 Dockerfile입니다.
// Dockerfile 만들기 예시
FROM node:14
COPY ./index.js /myfolder/
WORKDIR /myfolder/
CMD node index.js
- FROM 리눅스:최신 버전
이런 식으로 쓰면, 리눅스의 최신 버전이 깔린 컴퓨터가 한대 만들어집니다.
그런데 우리는 컴퓨터에 node, npm, yarn도 설치해야 합니다. 도커에는 다른 사람들이 만들어놓은 여러 이미지가 있는데 우리가 필요한 것들이 이미 설치되어 있는 이미지도 있습니다. - FROM node:14
을 하면 node, npm, yarn이 모두 설치된 리눅스 컴퓨터가 하나 생기게 됩니다. - COPY ./index.js /<myfolder>/
index.js 파일에 있는 모든 소스 코드를 가상 컴퓨터 안의 myfolder 폴더로 복사하여 해당 폴더에 저장합니다.
이때 가상 컴퓨터 안에 myfolder라는 이름의 폴더가 존재하지 않는다면 폴더가 자동으로 생성됩니다. - WORKDIR /<myfolder>/
가상 컴퓨터가 만들어지면 이후 명령어를 실행할 작업 폴더를 지정해 줍니다. - CMD node index.js
명령어를 사용해 가상 컴퓨터 내부에 복사해 둔 파일을 실행합니다.
2. docker를 build해 이미지 만들기
이제 만들어진 설명서를 가지고 하나로 묶여진 이미지로 만들어 주겠습니다.
이를 build한다고 표현합니다.
터미널에서 dockerfile이 있는 폴더로 들어가 docker build . 명령어를 입력해 줍니다.
빌드가 완료되면 이미지가 생성된 것이고, 이는 docker images 명령어로 확인해 볼 수 있습니다.
이렇게 한번 이미지를 만들어놓으면, 언제 어디서든 똑같은 환경의 가상 컴퓨터를 만들 수 있게 됩니다.
3. docker run해 새로운 컴퓨터(컨테이너) 만들기
이제 만들어진 이미지를 사용하여 새로운 컴퓨터를 만들기 위해 이미지를 실행해 보겠습니다.
docker run 이미지ID
이렇게 이미지를 실행시키면 가상 컴퓨터 하나가 만들어집니다.
이때, 도커로 만들어진 가상의 컴퓨터를 우리는 컨테이너라고 부릅니다.
빌드과정 정리
1. docker build . 로 build를 하게되면 docker id가 생기면서 image가 생성된다.

2. image가 생기면 < docker run docker id > 으로 실제 도커 컨테이너를 띄울 수 있는데
이 과정은 다시 build과정을 거치는게 아닌 이미 빌드 과정을 거쳐 만들어져 있는 image 컴퓨터가 열리는 것
3. 마지막엔 열린 image컴퓨터에서 cmd가 실행된다.
+ 이미지가 이미 빌드 되어있는 상태에서 도커 런을하게되면 마지막 cmd명령만 실행된다.
* build: 미리실행되는 명령어 ,cmd 제외한 나머지를 의미 ( run명령어까지 실행된다 )

* image: 빌드시 하나하나 실행되어 코드가 모두 세팅되어있는 컴퓨터가 만들어진 것
[ Docker-compose ]
복수 개의 컨테이너를 실행시키는 도커 애플리케이션이 정의를 하기 위한 툴입니다.
기본적으로 YAML/YML 파일을 사용하여 애플리케이션의 서비스를 구성할 수 있습니다.
즉 YAML 파일로 여러 개의 docker 내부 속성을 설정하고 YAML 파일을 실행시켜 마치 docker를 일괄적으로 한 번에 실행시키는 것과 같다고 생각하시면 됩니다.