Docker DeskTop
설치하고 실행을 해준다.
Visual Studio Code 를 사용한다면 Docker Extension을 설치하면 문법에 대한 도움을 받을 수 있다.
Index.js
다음과 같이 정말 간단한 node.js 파일이 구현되어있다.
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("Dream Coding in Docker!");
});
app.listen(8080, () => console.log("Server is running"));
컨테이너 만들기
이제 위 파일을 컨테이너로 만들어보자!
첫번째로 해야할 것은 바로 docker file을 만드는 것이다.
docker file은 어떤 이미지를 만들 것인지 어떤 것을 만들 지 명시하는 공간이다.
# 16 은 노드 버전 , alpine은 최소단위의 리눅스를 의미한다.
FROM node:16-alpine
# 도커 컨테이너에서 어떤 경로에서 실행할지를 명시해주어야한다.
# 루트의 하위 app 폴더안에 프로젝트에 관련된 모든 파일들을 카피해 오겠다라는 것을 의미한다.
# WORKDIR은 CD 명령어와 같은 의미를 가진다.
WORKDIR /app
# 도커 파일해서 카피하고 명령을 수행하는 것은 레이어 시스템으로 구현되어 있기 때문에
# 빈번히 변경되는 파일 일수록 제일 마지막에 작성하는 것이 좋다.
# package.json 과 package-lock.json을 카피한다.
COPY package.json package-lock.json ./
# npm install이 아닌 npm ci 인 이유는 install 같은 경우에 package.json에
# 특정 라이브러리의 3버전이상 이라고 되어있다면 5버전이 나와있다면 5버전을 다운을 받기 떄문에 문제가 생길 수 있다.
# npm ci 는 package-lock.json 의 특정 버전 ex) 3.1 버전을 다운 받기 떄문에 위 같은 오류를 방지할 수 있다.
RUN npm ci
COPY index.js .
ENTRYPOINT ["node","index.js"]
빈번하게 변경되는 명령일 수록 아래에 두어야하는 이유는 도커 컨테이너의 레이어가 아래 그림처럼 쌓이기 떄문에 자주 변경될 수록 상위에 위치한다면 업데이트 될때에 상단의 레이어만 변경하면 되므로 리소스를 절약할 수 있다.
// . 은 현재 경로를 의미 ex ./
// - t 옵션은 이미지의 이름을 부여함
// - f 옵션은 어떤 도커파일을 사용할 것인지를 정함 (현재 파일이름이 Dockerfile)
docker build -f Dockerfile -t fun-docker .
docker images
// -d 백그라운드에서 동작하도록
// -p 포트를 지정
docker run -d -p 8080:8080 fun-docker
// 현재 사용중인 도커 이미지를 알려주는 명령어
docker ps
// 컨테이너 ID 와 docker logs 명령어를 사용하면 터미널에 console.log가 찍힌다.
docker logs 926b416bb03a
Docker Hub
이제 Docker Hub에 만든 이미지를 push 해봅시다!
image 의 이름이 레포의 이름과 매칭이 되어야합니다.
다음 명령어를 사용해서 도커 이미지의 이름을 변경한다.
:latest는 docker images 명령어를 실행하면 나오는 tag 이다.
docker tag fun-docker:latest ehddud1006/docker-example:latest
그다음 docker login을 해주고
레포에 푸쉬하면 된다!
docker push ehddud1006/docker-example:latest
추가가 된 모습이다.
https://techblog-history-younghunjo1.tistory.com/246
'공부기록 > 웹 개발' 카테고리의 다른 글
UI에서 이후 이벤트 발생 제한하기. (0) | 2022.07.16 |
---|---|
hello skin 에서 마우스 오버 UI 구현하기 (0) | 2022.07.16 |
zsh: command not found: code (0) | 2022.07.15 |
PWA란? (0) | 2022.07.14 |
폴리필(Polyfill)이란? (0) | 2022.07.14 |