k8s/docker
Docker 3tier Arc with nodejs&mysql&nginx
부엉이사장
2023. 11. 2. 20:05
# 기본 명령어들
웹 빌드 : docker build -t web_muzzi:1.0 -f ./web_Dockerfile .
와스 빌드 : docker build -t was_muzzi:1.0 -f ./was_Dockerfile .
db 빌드 : docker build -t db_muzzi:1.0 -f ./db_Dockerfile .
웹 런 : docker run -dp 8989:80 -v /muzziweb/web_volume:/usr/share/nginx/html --link was --link db --name web web_muzzi:1.0
와스 런 : docker run -d -v /muzziweb/was_volume/server.js:/app/server.js -v /muzziweb/was_volume/package.json:/app/package.json --link db --name was was_muzzi:1.0
디비 런 : docker run -d --name db db_muzzi:1.0 --default-authentication-plugin=mysql_native_password
순서는 db => was => web순으로 하시길..
# web_Dockerfile
FROM nginx:latest
RUN apt update
RUN apt-get install -y vim systemd iproute2 iputils-ping net-tools
WORKDIR /usr/share/nginx/html/
ADD ./web_volume/index.html ./index.html
WORKDIR /etc/nginx/conf.d/
ADD ./web_defaultconf ./default.conf
# was_Dockerfile
FROM node:latest
COPY ./was_volume/ /app
ENV DB_USER=muzzi
ENV DB_PASSWORD=dori
ENV DB_DATABASE=muzzidb
WORKDIR /app
RUN npm install express
RUN npm install mysql
RUN npm -g install
CMD ["npm","start"]
# db_Dockerfile
FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD=test123
ENV MYSQL_DATABASE=muzzidb
ENV MYSQL_USER=muzzi
ENV MYSQL_PASSWORD=dori
EXPOSE 3306
# web_defaultconf
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /db {
proxy_pass http://was:3000;
}
location /was {
proxy_pass http://was:3000;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
# web_volume/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</head>
<body>
<button id="dori">was btn</button>
<button id="muzzi">db btn</button>
<script>
console.log('hello index')
document.getElementById("muzzi").addEventListener("click",()=>{axios.get('/db').then((res)=>{
alert(JSON.stringify(res.data))
})})
document.getElementById("dori").addEventListener("click",()=>{axios.get('/was').then((res)=>{
alert(res.data)
})})
</script>
</body>
</html>
# was_volume/package.json
{
"name": "b",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"express": "^4.18.2",
"mysql": "^2.18.1",
"nodemon": "^3.0.1"
}
}
# was_volume/server.js
const express = require("express");
const app = express();
const mysql = require('mysql')
const cors = require('cors')
let corsOptions = {
origin: '*',
credential: true,
}
app.use(cors(corsOptions))
let env = process.env;
const connection = mysql.createConnection({
host : 'db',
user : env.DB_USER,
password : env.DB_PASSWORD,
database : env.DB_DATABASE
});
app.get("/was", (req, res)=> {
res.send('was연결됐음')
});
app.get("/db", (req, res)=> {
connection.query('show databases;', (error, rows, fields) => {
if (error) throw error;
res.send(JSON.stringify(rows));
});
});
app.listen(3000, ()=> {
console.log("서버가동");
})