정현수
현수 세상
정현수
전체 방문자
오늘
어제
반응형
  • 분류 전체보기 (267)
    • NEXTSTEP 자바스크립트 클린코드 2기 (1)
    • 우테코 4기 (6)
    • 회고록 (5)
    • 개발지식 (6)
    • React (3)
      • React Clone Coding (3)
    • React Native (2)
    • Kubernetes & Docker (36)
      • 궁금한 것 (13)
    • Flutter (2)
    • 알고리즘 (168)
      • 프로그래머스 1단계 (27)
      • 프로그래머스 2단계 (37)
      • 백준 (98)
      • 이론 (6)
    • 자료구조 (3)
    • 유튜브 (1)
    • 책 읽자 (1)
    • 취업준비 (1)
    • 대내 활동 (31)
      • 2022년 겨울방학 알고리즘 특강 (0)
      • 2020년 여름방학 모각코 (13)
      • 2020년 겨울방학 모각코 (13)
      • 웹프로그래밍 상상튜터링 (5)

인기 글

최근 글

공지사항

  • 블로그 이동

태그

  • 알고리즘
  • 이코테
  • 노드
  • flutter
  • 리액트
  • image pull
  • Jenkins
  • Deployment
  • replicaset
  • kubelet
  • 쿠버네티스
  • mysql
  • 프로그래머스
  • 디플로이먼트
  • 개발지식
  • docker
  • Kubernetes
  • javascript
  • NodePort
  • 자바스크립트
  • 그리디
  • 백준
  • React
  • programmers
  • 공식문서
  • 레플리카셋
  • 우테코
  • 모각코
  • 파이썬
  • image run

최근 댓글

블로그 메뉴

  • 홈

티스토리

hELLO · Designed By 정상우.
정현수

현수 세상

React와 Node.js 애플리케이션 Docker image build하기
Kubernetes & Docker

React와 Node.js 애플리케이션 Docker image build하기

2020. 7. 24. 16:43
반응형

아래의 포스트들은 저 혼자 kubernetes에 대한 이해와 실습을 위해서

시행착오들을 적어놓은 포스트들입니다.

완벽하지 않고 순서가 뒤죽박죽임을 알아주시고

참고해주시면 감사하겠습니다!

 

Mysql Docker Image를 이용해서 React-Node.js-MySQL 애플리케이션 구현해보기

1. React 설치

2. Node.js 설치

3. React와 Node.js 동시 구동

4. mySQL image pull하기

5. mySQL, React, Node.js 연동하기

 

React와 Node.js 애플리케이션 Docker image build

6. React-Node.js image 생성하기

 

Kubespray와 Ansible을 이용한 Kubernetes 설치하기 - 1편 

7. 가상머신을 통해 멀티 노드 환경 구성

8. Ansible을 이용해서 Master와 Worker 연결

9. Ansible-playbook을 이용해서 한꺼번에 명령내리기

 

Kubespray와 Ansible을 이용한 Kubernetes 설치하기 - 2편 

10. Kuberspray를 이용해 kubernetes 설치하기

 

Kubespray와 Ansible을 이용한 Kubernetes 설치하기 - 3편 

10. Kuberspray를 이용해 kubernetes 설치하기(계속)

11. kubernetes 설치 성공

 

Kubespray와 Ansible을 이용한 Kubernetes 설치하기 - 4편 

12. dashboard 띄우기

13. docker image pull 받고 실행시키기

14. deployment 생성 후 pod관리

15. Database의 Volume설정(PersistentVolume, PersistentVolumeClaim) 

16. Database의 초기화 설정(configMap 사용하기)

17. 현재 파일 구조와 오브젝트들 설명과 목표 짚고 가기.

18.  DB와 Web-app을 같은 Pod에서 구동시키기


 

 

전편까지는 React와 Node.js, mySQL을 쿠버네티스로 관리하기 위해

React는 create-react-app으로 설치 후 Node.js로 서버를 열어주었고,

mySQL은 도커허브에서 image pull을 해온 뒤 컨테이너에서 실행해서 한번 연결까지 해보았습니다.

이번편에서 할 것은

React와 Node.js로 만든 간단한 웹 애플리케이션을 dockerfile을 이용해서 image로 만들기 입니다.

전편에서 이어서 번호를 매기겠습니다!

6. React-Node.js image 생성하기

전체 파일 구조

react-nodejs(메인 폴더)
ㄴclient (클라이언트 폴더)
     ㄴ create-react-app
     ㄴ package.json
     ㄴ package-lock.json
     ㄴ node-modules
ㄴserver (서버 폴더)
     ㄴ server.js
     ㄴ package.json
     ㄴ package-lock.json
    ㄴ node-modules
package.json
yarn.lock

현재의 파일구조는 이렇게 되어있습니다.

저희가 해주어야 하는것은 메인폴더에 Dockerfile을 생성하고, image를 build 하는 것인데요

FROM node:10.19.0
WORKDIR /app
COPY . .
RUN yarn install

WORKDIR /app/client
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent

WORKDIR /app/server
RUN npm install --silent

EXPOSE 3000

WORKDIR /app
CMD ["yarn", "dev"]

Dockerfile을 이렇게 작성해주었습니다.

 

Dockerfile 설명

 

설명드리겠습니다.

 

FROM node:10.19.0

 

맨 처음에는 FROM으로 시작합니다.

우리는 node version 10.19.0 으로 된 이미지를 만들고 싶다는 얘기입니다.

제 node -v이 10.19.0이라서 설정해주었습니다.

 

WORKDIR /app

 

work directory를 /app에 잡겠다는 얘기입니다.

이건 컨테이너 안에서의 폴더를 얘기합니다.

 

COPY . .

 

COPY <local folder> <container folder> 를 얘기합니다.

둘 다 현재위치를 의미하는데

local folder는 Dockerfile이 존재하는 파일의 위치를 가리키고

container folder는 WORKDIR로 설정해준 /app 폴더를 가리킵니다.

 

RUN yarn install

 

/app폴더에서 yarn install 명령어를 실행하겠다는 겁니다.

 

WORKDIR /app/client

 

컨테이너안에서의 work directory를 변경해줍니다.

 

RUN npm install --silent

 

package.json 파일에 적힌 dependecies 파일들을 설치하겠다는 얘기입니다.

요기서는 client의 package.json을 말합니다.

 

RUN npm install react-scripts@3.4.1 -g --silent

 

react-scripts가 설치가 잘 안되는 것 같아서 따로 설치를 해주었습니다.

 

WORKDIR /app/server

 

컨테이너의 work directory를 /app/server로 옮깁니다.

 

RUN npm install --silent

 

/server 폴더에서의 package.json dependecies들을 설치하겠다는 얘기입니다.

 

EXPOSE 3000

 

Port는 3000번으로 노출하겠다 라는 얘기입니다.

 

WORKDIR /app

CMD ["yarn", "dev"]

 

우리는 메인폴더에서 yarn dev 명령어를 실행해야 하므로

work directory를 /app (메인폴더)로 옮기고

yarn dev 명령어를 실행시켜주는 명령어입니다.

 

그 다음에는

docker build -t <image name> .

으로 도커 image를 build 해줍니다.

제 이미지 이름을 저렇게 해놓은건 도커 허브에 올리려고

name/image-name 타입으로 설정해놓았습니다!

docker images

명령어를 입력하면 image가 생겨난 것을 볼 수 있습니다.

그런데 문제가 생겼습니다.

server.js

저는 mysql의 ip를 직접적으로 적어주었는데

mysql의 컨테이너가 종료가 되고 다시 실행이되면

ip가 바뀐다는 것을 간과하고 있었습니다. 그래서

다음과 같이 localhost로 바꿔주고

container를 실행할 때 network_mode를 host로 바꿔주었습니다.

 

docker-compose 변경

version: '3.1'

services:
  mysql:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    container_name: mysql
    network_mode: host
    environment:
      MYSQL_ROOT_PASSWORD: admin

  adminer:
    image: adminer
    restart: always
    network_mode: host
    ports:
      - 8080:8080

  react-node-app-with-mysql:
    image: jung660317/react-node-app-with-mysql
    container_name: react-node-app
    restart: always
    ports:
      - 3000:3000
    network_mode: host

 

network_mode를 host로 바꿔준 것을 볼 수 있습니다.

 

다시 image를 build 해 주고

docker-compose로 실행을 해주면

다음과 같이 잘 동작하고

localhost:3000번 으로 들어가면 잘 동작하는 것을 볼수 있습니다.

도커허브와 깃허브에 소스코드와 간단히 실행하는 법을 전부 올려놓았습니다.

 

전체 파일 구조

react-nodejs(메인 폴더)
ㄴclient (클라이언트 폴더)
     ㄴ create-react-app 
     ㄴ package.json
     ㄴ package-lock.json
 ㄴ node-modulesㄴserver (서버 폴더)
     ㄴ server.js
     ㄴ package.json
     ㄴ package-lock.json
     ㄴ node-modules
package.json
yarn.lock

react = 3000 port (proxy : 5000포트)
node.js = 5000 port
mysql = 8080 port

dockerhub, github 주소

GIT (소스코드) : https://github.com/junghyeonsu/react-node-app-with-mysql

BLOG : https://junghyeonsu.tistory.com/42

DOCKERHUB : https://hub.docker.com/repository/docker/jung660317/react-node-app-with-mysql

 

다음주 부터는

1. kubernetes 멀티 노드 설치 (ansible과 kubespray를 이용)

2. 만들어진 image들을 kubernetes로 관리

참고

How to use Docker and Docker Compose with NodeJS (NodeJS + Mongodb + Elasticsearch)

Dockerizing a React App

Dockerizing React App With NodeJS Backend

mysql과 node.js 연결

 

반응형

'Kubernetes & Docker' 카테고리의 다른 글

Kubespray와 Ansible을 이용한 Kubernetes 설치하기 - 2편  (0) 2020.07.29
Kubespray와 Ansible을 이용한 Kubernetes 설치하기 - 1편  (2) 2020.07.28
Mysql Docker Image를 이용해서 React-Node.js-MySQL 애플리케이션 구현해보기  (2) 2020.07.23
쿠버네티스 공식문서 파헤치기 : 레플리카셋(ReplicaSet)  (0) 2020.07.16
쿠버네티스 공식문서 파헤치기 : 파드(Pod)  (0) 2020.07.16
    정현수
    정현수
    깃허브 : https://github.com/junghyeonsu 개인 블로그 : https://junghyeonsu.com/ (양질의 글을 올리려고 항상 노력합니다.)

    티스토리툴바