도커는 실행 환경을 image 로 추상화 하여
추상화된 image 를 container 단위로 실행하는
가상 머신 같은..... 그런 것
프로젝트 폴더에
Dockerfile 이름으로 된 파일을 작성하여
빌드 시 실행할 명령어를 정해줄 수 있으며
이름은 반드시 Dockerfile
Dockerfile.dev
Dockerfile.prod 등으로도 작성할 수 있다
도커 허브는 깃허브 같은 곳인데
node.js, linux 등의 이미지 파일이 올라가 있다
해당 이미지들을 Dockerfile 로 한 개 이상 불러와
내 환경에 맞는 새로운 환경 이미지를 만들어 사용한다
도커 설치 후
프로젝트 폴더 바로 아래에 Dockerfile 작성
FROM node:16.15.1-alpine as builder
// node.js 서버 이미지를 사용해서 환경을 구성 후 다른 서버에서 빌더로 사용하기 위해 as builder
WORKDIR /app
COPY package*.json ./
// 현재 프로젝트 폴더에서 package.json, package.lock.json 을 복사해간다
RUN npm ci // 복사해간 package.json 을 이용하여 의존성 설치
COPY ./ ./ // 현재 폴더내의 데이터를 복사해간다
RUN npm run build // react build
FROM nginx:1.20-alpine
// nginx image
COPY --from=builder /app/build /usr/share/nginx/html
// as builder 로 가져온 node.js 서버 환경에서 build 폴더를 찾아 nginx 의 html 폴더 내로 복사
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
// 프로젝트 폴더에 nginx.conf 설정 파일을 만들어서 내용 작성을 먼저 선행한다 (nginx 로 복사해간다)
EXPOSE 80 // 80포트 명시적으로 개방
CMD ["nginx", "-g", "daemon off;"]
// cmd 명령어를 실행 -> nginx -g daemon off
위 도커 파일에서 설정한 nginx.conf 파일
server {
listen 80;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
}
}
기본 설정만 하여 80포트로 접속하면 html 폴더 index.html 로 접근
try_files index.html 을 작성하지 않으면 리액트 실행이 안된다
docker build -t [이미지 이름]:[tag 명] [Dockerfile 위치]
-t 옵션은 이미지에 대한 태그명을 작성하기 위해 사용
docker images
명령으로 이미지 생성 확인
docker run -itd --name [컨테이너 이름] -p 80:80 --restart always [이미지 이름]
-p 는 포트 번호 설정으로 [도커 외부에서 진입하는 번호]:[내부에서 연결해줄 번호]
--restart always
는 도커가 예상치 못하게 종료되었을 경우
재실행을 항상 시도한다
docker ps
명령으로 실행중인 컨테이너 확인
docker ps -a
명령은 실행중이지 않은 컨테이너도 확인 가능
docker stop [컨테이너 이름]
으로 컨테이너 실행 중지
docker restart [컨테이너 이름]
으로 컨테이너 재실행
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
docker system prune --volumes
.dockerignore
파일을 작성하여
이미지에서 제외할 폴더나 파일을 설정할 수 있다
/node_modules