도커라이징

DONNIE·2022년 12월 5일
0

VM / Container

목록 보기
1/6

📌 Docker

진행한 프로젝트 프론트 서버 환경을 도커 이미지로 만들것입니다.
이유는 바로 서버에 배포후에도 OS나 라이브러리등의 버전 차이로 오는 에러를 막기위해서,,

두 가지 방법이 있다.

  1. 로컬
  2. 서버

💡 로컬

  • front : build -> build 파일 압축
  • back : node_module 삭제 후 tar 파일로 압축
## front ##

# root directory
npm run build
# ./build directory안에서 빌드 파일 압축 
tar cvf 20221214_front.tar ./

## back ##
# root directory
rm -rf node_modules/
# 빌드 파일로 압축
tar cvf 20221214_back.tar ./
  • tar file 서버에 올리고 압축 풀기
# ssh key가 있는 폴더에서만 접근됨;
scp -i ./keyname.pem 2022121_front.tar centos@ip:/home/centos/directory
# 서버 접속, 동일하게 ssh key directory
ssh -i ./keyname.pem centos@ip
# 지정 폴더에서 압축해제
tar -xvf 20221214_front.tar ./

💡 서버

  • 소스코드있는 서버 접속
// AWS 서버 접속
ssh -i ~key~ ~ip~
// 해당하는 디렉토리로 이동
cd Project
// 도커 파일 생성 
Vi Dockerfile 

💡 도커 파일 작성

프론트서버는 nginx로 가동하고 백은 express이므로 node로 가동

  • node 서버
FROM node:16-alpine
MAINTAINER:user@email.com
WORKDIR /usr/src/app
COPY package*.json ./
COPY . .
EXPOSE 3001
CMD ["npm","start"]

or

FROM node:16

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

RUN npm install -g pm2

COPY . .

EXPOSE 8080

CMD ["pm2-runtime", "start", "app.js"]
  • nginx 서버
FROM nginx:latest
WORKDIR /usr/share/nginx/html/
COPY ./build/ .
EXPOSE 3002
CMD ["nginx","-g","daemon off;"]//세미콜론필수 ㅠㅜㅠ

💡 도커 이미지생성

  • 도커 이미지 목록 확인
docker images
  • 도커 빌드
# 도커 이미지 생성
npm run build
# docker build, -옵션, 이미지명:버전 ~현재디렉토리에서 도커파일 찾아라~
docker build  -t adpot_front:0.1 .
  • 도커 실행

    • nginx file에서 도메인,포트명 지정

      // 경로
      root/etc/nginx/conf.g/default.conf
      // sudo 권한으로 편집 실행
      sudo vi default.conf
      // 하기 코드 추가
      server {
      listen  80;
      server_name   sub-domain.domain.co.kr;
      location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass  http://127.0.0.1:3001;
      }
      
      listen 443 ssl; # managed by Certbot
      # ssl_certificate /etc/letsencrypt/live/app.anypot.co.kr/fullchain.pem; # managed by Certbot
      # ssl_certificate_key /etc/letsencrypt/live/app.anypot.co.kr/privkey.pem; # managed by Certbot
      ssl_certificate /etc/nginx/ssl/wildcard.anypot/fullchain1.pem; # managed by Certbot
      ssl_certificate_key /etc/nginx/ssl/wildcard.anypot/privkey1.pem; # managed by Certbot
      include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
      ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
      			}
    • 컨테이너가동

      netstat -tnl #사용중인 포트 확인
      docker run -d -p 3001:80 --restart=always --name=실행명  이미지명:태그

💡 도커 이미지 삭제하기

  • 일반 이미지
docker rmi 이미지명
  • none 이미지 삭제하기
docker rmi $(docker images -f "dangling=true" -q)

💡 도커 명령어

// 가동중인 컨테이너 로그확인
docker logs -f cal_front
// nginx 재시작 (nginx 파일 변경시 ㅇㅇ)
sudo systemctl restart nginx
// 서버 ip주소 확인
ping www.domain.com
// html 확인
curl ip or domain..
// 도커 이미지 변경시에 컨테이너 중단 및 삭제 후 컨테이너 다시 만드세여
docker stop cal_front (컨테이너 중단)
docker rm -f cal_front (컨테이너 삭제)

(프론트)
최신 소스 코드 -> 서버에서 소스파일 build -> 도커 이미지 생성 -> 도커 컨테이너 실행
(백)
최신 소스 코드 -> build 필요없이 바로 Dockerfile로 이미지 생성

도커 이미지 생성 전 서버를 express로 돌리는지 nginx로 돌리는지 확인
도커 컨테이너 실행 전에 이전 컨테이너 종료,삭제 후진행

포트 이해를 도와줌

profile
후론트엔드 개발자

0개의 댓글