아래의 포스트들은 저 혼자 kubernetes에 대한 이해와 실습을 위해서
시행착오들을 적어놓은 포스트들입니다.
완벽하지 않고 순서가 뒤죽박죽임을 알아주시고
참고해주시면 감사하겠습니다!
Mysql Docker Image를 이용해서 React-Node.js-MySQL 애플리케이션 구현해보기
React와 Node.js 애플리케이션 Docker image build
6. React-Node.js image 생성하기
Kubespray와 Ansible을 이용한 Kubernetes 설치하기 - 1편
8. Ansible을 이용해서 Master와 Worker 연결
9. Ansible-playbook을 이용해서 한꺼번에 명령내리기
Kubespray와 Ansible을 이용한 Kubernetes 설치하기 - 2편
10. Kuberspray를 이용해 kubernetes 설치하기
Kubespray와 Ansible을 이용한 Kubernetes 설치하기 - 3편
10. Kuberspray를 이용해 kubernetes 설치하기(계속)
Kubespray와 Ansible을 이용한 Kubernetes 설치하기 - 4편
13. docker image pull 받고 실행시키기
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가 생겨난 것을 볼 수 있습니다.
그런데 문제가 생겼습니다.
저는 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 React App With NodeJS Backend
'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 |