도커는 개발 환경 요소들이 설치된 모습을 이미지로 저장해준다.
저장한 이미지를 클라우드에 올린다. 이미지들이 서로 연결되어서 동작하는 설정을 문서(Dockerfile)로 저장한다. 새 컴퓨터에 가서 복사한 문서의 내용대로 이미지를 다운받아 설치한다.

가상머신과 비슷하다고 생각할 수 있지만 도커는 불필요한 추가 OS 설치없이 앱과 서버를 실행할 수 있다는 점에서 도커는 개발에 있어서 필수적인 요소라고 할 수 있다.
서버를 실행시키려면 환경이 갖춰져야 한다.
만약 내가 어느 IT회사의 개발자로 취업했다고 하자. 협업을 하기 위해서는 컴퓨터의 개발환경을 모두 똑같이 만들어줘야 한다. 하지만 DB, 언어버전, Node.js의 런타임 환경 등..
이 작업은 한 두가지가 아니다.
이를 위해서 도커가 필요하다.
내 컴퓨터에 있는 소스코드(index.js)를 도커의 가상 컴퓨터에 넣어보도록 하자
// index.js
console.log("이 파일은 도커 안에서 실행됩니다.")
여기서부터 가상 컴퓨터를 만들어야 한다. 우리가 컴퓨터를 처음 조립할 때 설명서를 보고 조립하듯이 도커 역시 어떠한 설명서를 참고해서 가상 컴퓨터를 만들게 된다.
그 설명서 역할이 Dockerfile 이다.
디렉토리 안에 Dockerfile이라는 파일을 만들고 아래의 코드를 작성해본다.
# 컴퓨터 만드는 설명서
# 1. 운영체제 설치(node 16버전과 npm과 yarn이 모두 설치되어있는 리눅스)
FROM node:16
# 2. 내 컴퓨터에 있는 폴더나 파일을 도커 컴퓨터 안으로 복사하기
COPY ./index.js /index.js
# 3. 도커안에서 index.js 실행시키기
CMD node index.js
FROM 리눅스:최신버전 이런식으로 쓰면, 리눅스의 최신 버전이 깔린 컴퓨터가 한 대 만들어진다.
그런데 이 때, 컴퓨터에 node, npm, yarn도 설치해야 한다. 도커에는 다른 사람들이 만들어놓은 여러 이미지가 있는데 우리가 필요한 것들이 이미 설치되어 있는 이미지도 있다.
FROM node:16 을 하면 node, npm, yarn이 모두 설치된 리눅스 컴퓨터가 하나 생긴다.
COPY ./index.js /index.js 를 하면 현재위치에 있는 index.js 파일에 있는 모든 소스 코드를 가상 컴퓨터 안의 index.js 파일을 생성해 그곳에 복사하여 저장한다.
우리가 만든 가상 컴퓨터내에는 index.js 파일이 존재하게 된다.
CMD node index.js 명령어를 통해서 복사하여 저장된 파일을 실행해 준다.
이제 만들어진 설명서를 가지고 하나로 묶여진 이미지로 만들어 보자.
이를 build한다고 표현한다.

1. docker build .온점도 포함한 명령어를 통해 빌드한다. 빌드가 완료되면 이미지가 생성된다.

2. docker images위 명령어를 통해 도커의 이미지가 생성되었는지 확인할 수 있다.
이렇게 한 번 이미지를 만들어놓으면 언제 어디서든 똑같은 환경의 가상 컴퓨터를 만들 수 있다.

3. docker run IMAGE IDdocker images 로 알 수 있던 도커의 IMAGE ID 를 통해서 docker run IMAGE ID 명령어를 입력한다.
이렇게 이미지를 실행하면 하나의 가상 컴퓨터가 생성된다.
이 때, 도커로 만들어진 가상 컴퓨터를 컨테이너 라고 한다.

docker psdocker 내의 실행중인 컨테이너 목록을 볼 수 있는 명령어이다.

docker ps -adocker 내의 종료된 컨테이너를 포함한 모든 컨테이너 목록을 보여주는 명령어이다.

docker rm 컨테이너ID위 명령어로 컨테이너를 완전하게 지워줄 수 있다.
위 명령어로 컨테이너는 종료, 삭제되었으나 이미지까지 삭제된 것은 아니다.
우리는 만들어진 이미지로 언제든 컨테이너를 생성할 수 있다.
만약 이미지까지 삭제하고 싶어졌다면
docker rmi 이미지ID
위 명령어를 사용해 이미지까지 삭제해보자
만일 도커 컴퓨터를 실행해서 해당 컴퓨터 내부의 bash shell 을 사용하고 싶다면
docker exec -it CONTAINER ID /bin/bash
도커가 아닌 일반 터미널에서 docker ps 로 container id 를 확인한 이후,
터미널 창에서 docker 컴퓨터 내부를 조작할 수 있게 된다.


만일, 종료하고 싶다면
exit
을 입력해 나가주고
docker stop CONTAINER ID위 명령어를 입력해서 최종적으로 도커를 종료해 줄 수 있다.