지난 시간에 이어서 Docker 기초 실습 부분 진행하겠습니다.
Docker의 개념에 대해서는 이전 포스팅 https://toki0411.tistory.com/16을 참고해주시길 바랍니다.
1. 먼저 js파일을 만듭니다.
코드는 express에서 제공해주는 코드 그대로 들고왔습니다. https://expressjs.com/en/starter/hello-world.html
2. Dockerfile을 만듭니다.
FROM node:16.13.2
#app 디렉토리 생성
RUN mkdir -p /app
#docker container의 작업 디렉토리를 설정하는 명령
WORKDIR /app
#파일이나 디렉토리를 이미지로 복사합니다. 일반적으로 소스를 복사하는 데 사용합니다. target디렉토리가 없다면 자동으로 생성합니다, npm install 실행 디렉토리
COPY ./ /app
#이미지 생성 과정에서 실행할 명령어
RUN npm install
#컨테이너 실행 시 실행할 명령어
CMD ["node", "server.js"]
vsc에서 ~.dockerfile로 생성하거나 dockerfile이라고만 파일명을 입력해도 됩니다.
FROM 은 베이스 이미지를 의미합니다. FROM node:latest도 가능하지만, 되도록이면 버전을 명시해 주는 것이 좋습니다.
CMD는 컨테이너 시작시 제일 먼저 실행할 명령어를 입력합니다.
3. 이미지 생성
dockerfile기반 이미지 생성명령어
$ docker build -t getting-started ./
//-t name은 이미지의 이름을 설정하는 옵션이다.
// ./ 은 Dockerfile 의 경로를 나타낸다.
docker 컨테이너 실행 명령어
$ docker run -dp 3000:3000 getting-started //d는 백그라운드 실행, p는 포트지정옵션
getting-started자리에 이미지의 이름을 설정하면 됩니다.
포트 지정은 로컬의 3000번대 포트를 컨테이너 내부의 3000번대에 연결한다는 의미입니다.
4. 컨테이너 실행
컨테이너가 실행이 되면, vsc에서는 왼쪽 상단에서 실행중인 container를 볼 수 있습니다. (docker extension 설치 시)
이제 open in browser를 클릭하면, 예쁜 헬로월드가 3000번 포트로 출력이 됩니다.
이것은 Docker Desktop이라는 애플리케이션을 설치해서도 확인할 수 있는데, 현재 컨테이너의 이름은 임의로 지정 되었고 이미지의 이름은 getting-started로 잘 들어가져있는 것을 확인할 수 있습니다.
vsc랑 도커 데스크톱 모두 이미지 목록도 확인할 수 있는데,
이미지는 컨테이너를 찍어내는 틀 이라고 했습니다. 따라서, 이 이미지들을 가지고 컨테이너를 얼마든지 찍어낼 수 있는 것입니다. 저기 내가 만든 getting-started이미지가 보입니다.
+) 터미널에서 docker ps를 입력해도 실행중인 컨테이너들을 볼 수 있습니다. 이때 정지된 컨테이너들까지 볼려면 docker ps -a를 입력합니다.