From 24999254237db80aa80a2c5f9d4d1194921cefbd Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Tue, 1 Oct 2024 15:52:46 +0800 Subject: [PATCH] Refactor dockerfiles for clarity --- Docker/.gitignore | 10 +++++-- Docker/client.Dockerfile | 22 -------------- Docker/{ => dev}/build_images.sh | 10 +++---- Docker/dev/client.Dockerfile | 15 ++++++++++ Docker/dev/docker-compose.yaml | 30 +++++++++++++++++++ Docker/dev/mongoDB.Dockerfile | 3 ++ Docker/{ => dev}/redis.Dockerfile | 0 Docker/dev/server.Dockerfile | 13 ++++++++ Docker/dist/client.Dockerfile | 8 ++--- .../nginx/conf.d/default.conf} | 0 Docker/dist/server.Dockerfile | 4 +-- Docker/mongoDB.Dockerfile | 4 --- Docker/prod/build_images.sh | 24 +++++++++++++++ Docker/prod/client.Dockerfile | 17 +++++++++++ Docker/{ => prod}/docker-compose.yaml | 0 Docker/{ => prod}/mongo/init/create_users.js | 0 Docker/prod/mongoDB.Dockerfile | 4 +++ Docker/{ => prod}/nginx/conf.d/default.conf | 0 Docker/prod/redis.Dockerfile | 2 ++ Docker/{ => prod}/server.Dockerfile | 0 20 files changed, 126 insertions(+), 40 deletions(-) delete mode 100644 Docker/client.Dockerfile rename Docker/{ => dev}/build_images.sh (65%) create mode 100644 Docker/dev/client.Dockerfile create mode 100644 Docker/dev/docker-compose.yaml create mode 100644 Docker/dev/mongoDB.Dockerfile rename Docker/{ => dev}/redis.Dockerfile (100%) create mode 100644 Docker/dev/server.Dockerfile rename Docker/{nginx/conf.d/dist_default.conf => dist/nginx/conf.d/default.conf} (100%) delete mode 100644 Docker/mongoDB.Dockerfile create mode 100755 Docker/prod/build_images.sh create mode 100644 Docker/prod/client.Dockerfile rename Docker/{ => prod}/docker-compose.yaml (100%) rename Docker/{ => prod}/mongo/init/create_users.js (100%) create mode 100644 Docker/prod/mongoDB.Dockerfile rename Docker/{ => prod}/nginx/conf.d/default.conf (100%) create mode 100644 Docker/prod/redis.Dockerfile rename Docker/{ => prod}/server.Dockerfile (100%) diff --git a/Docker/.gitignore b/Docker/.gitignore index 3035bcf7..9b501e10 100644 --- a/Docker/.gitignore +++ b/Docker/.gitignore @@ -1,7 +1,11 @@ *.sh !quickstart.sh !build_images.sh -mongo/data/* -redis/data/* +dev/mongo/data/* +dev/redis/data/* +dist/mongo/data/* +dist/redis/data/* +prod/mongo/data/* +prod/redis/data/* *.env -certbot/* \ No newline at end of file +prod/certbot/* \ No newline at end of file diff --git a/Docker/client.Dockerfile b/Docker/client.Dockerfile deleted file mode 100644 index 0f7935cd..00000000 --- a/Docker/client.Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -FROM node:20-alpine as build - -WORKDIR /app - -COPY ./Client/package*.json ./ - -RUN npm install - -COPY ./Client . - -RUN npm run build - -# RUN npm install -g serve - -# CMD ["serve","-s", "dist", "-l", "5173"] - -FROM nginx:1.27.1-alpine - -# COPY ./Docker/nginx/default.conf /etc/nginx/conf.d/default.conf -COPY --from=build /app/dist /usr/share/nginx/html - -CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/Docker/build_images.sh b/Docker/dev/build_images.sh similarity index 65% rename from Docker/build_images.sh rename to Docker/dev/build_images.sh index 72540168..2de827df 100755 --- a/Docker/build_images.sh +++ b/Docker/dev/build_images.sh @@ -2,19 +2,19 @@ #!/bin/bash # Change directory to root Server directory for correct Docker Context -cd .. +cd ../.. #Client -client="./Docker/client.Dockerfile" +client="./Docker/dev/client.Dockerfile" # MongoDB -mongoDB="./Docker/mongoDB.Dockerfile" +mongoDB="./Docker/dev/mongoDB.Dockerfile" # Redis -redis="./Docker/redis.Dockerfile" +redis="./Docker/dev/redis.Dockerfile" # Server -server="./Docker/server.Dockerfile" +server="./Docker/dev/server.Dockerfile" docker build -f $client -t uptime_client . docker build -f $mongoDB -t uptime_database_mongo . diff --git a/Docker/dev/client.Dockerfile b/Docker/dev/client.Dockerfile new file mode 100644 index 00000000..a650e0f7 --- /dev/null +++ b/Docker/dev/client.Dockerfile @@ -0,0 +1,15 @@ +FROM node:20-alpine AS build + +WORKDIR /app + +COPY ../../Client/package*.json ./ + +RUN npm install + +COPY ../../Client . + +RUN npm run build + +RUN npm install -g serve + +CMD ["serve","-s", "dist", "-l", "5173"] diff --git a/Docker/dev/docker-compose.yaml b/Docker/dev/docker-compose.yaml new file mode 100644 index 00000000..5cae3f5f --- /dev/null +++ b/Docker/dev/docker-compose.yaml @@ -0,0 +1,30 @@ +services: + client: + image: uptime_client:latest + ports: + - "5173:5173" + + depends_on: + - server + server: + image: uptime_server:latest + ports: + - "5000:5000" + env_file: + - server.env + depends_on: + - redis + - mongodb + redis: + image: uptime_redis:latest + ports: + - "6379:6379" + volumes: + - ./redis/data:/data + mongodb: + image: uptime_database_mongo:latest + command: ["mongod", "--quiet"] + ports: + - "27017:27017" + volumes: + - ./mongo/data:/data/db diff --git a/Docker/dev/mongoDB.Dockerfile b/Docker/dev/mongoDB.Dockerfile new file mode 100644 index 00000000..969a320c --- /dev/null +++ b/Docker/dev/mongoDB.Dockerfile @@ -0,0 +1,3 @@ +FROM mongo +EXPOSE 27017 +CMD ["mongod"] diff --git a/Docker/redis.Dockerfile b/Docker/dev/redis.Dockerfile similarity index 100% rename from Docker/redis.Dockerfile rename to Docker/dev/redis.Dockerfile diff --git a/Docker/dev/server.Dockerfile b/Docker/dev/server.Dockerfile new file mode 100644 index 00000000..3a9ed590 --- /dev/null +++ b/Docker/dev/server.Dockerfile @@ -0,0 +1,13 @@ +FROM node:20-alpine + +WORKDIR /app + +COPY ../../Server/package*.json ./ + +RUN npm install + +COPY ../../Server/ ./ + +EXPOSE 5000 + +CMD ["node", "index.js"] \ No newline at end of file diff --git a/Docker/dist/client.Dockerfile b/Docker/dist/client.Dockerfile index 46ce12f3..1edbfa52 100644 --- a/Docker/dist/client.Dockerfile +++ b/Docker/dist/client.Dockerfile @@ -1,19 +1,19 @@ -FROM node:20-alpine as build +FROM node:20-alpine AS build WORKDIR /app -COPY ./Client/package*.json ./ +COPY ../../Client/package*.json ./ RUN npm install -COPY ./Client . +COPY ../../Client . RUN npm run build FROM nginx:1.27.1-alpine -COPY ./Docker/nginx/conf.d/dist_default.conf /etc/nginx/conf.d/default.conf +COPY ./Docker/dist/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf COPY --from=build /app/dist /usr/share/nginx/html CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/Docker/nginx/conf.d/dist_default.conf b/Docker/dist/nginx/conf.d/default.conf similarity index 100% rename from Docker/nginx/conf.d/dist_default.conf rename to Docker/dist/nginx/conf.d/default.conf diff --git a/Docker/dist/server.Dockerfile b/Docker/dist/server.Dockerfile index 5d4ea736..3a9ed590 100644 --- a/Docker/dist/server.Dockerfile +++ b/Docker/dist/server.Dockerfile @@ -2,11 +2,11 @@ FROM node:20-alpine WORKDIR /app -COPY ./Server/package*.json ./ +COPY ../../Server/package*.json ./ RUN npm install -COPY ./Server/ ./ +COPY ../../Server/ ./ EXPOSE 5000 diff --git a/Docker/mongoDB.Dockerfile b/Docker/mongoDB.Dockerfile deleted file mode 100644 index 19fc6e35..00000000 --- a/Docker/mongoDB.Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM mongo -COPY ./Docker/mongo/init/create_users.js /docker-entrypoint-initdb.d/ -EXPOSE 27017 -CMD ["mongod"] diff --git a/Docker/prod/build_images.sh b/Docker/prod/build_images.sh new file mode 100755 index 00000000..98d77e66 --- /dev/null +++ b/Docker/prod/build_images.sh @@ -0,0 +1,24 @@ + +#!/bin/bash + +# Change directory to root directory for correct Docker Context +cd ../.. + +#Client +client="./Docker/prod/client.Dockerfile" + +# MongoDB +mongoDB="./Docker/prod/mongoDB.Dockerfile" + +# Redis +redis="./Docker/prod/redis.Dockerfile" + +# Server +server="./Docker/prod/server.Dockerfile" + +docker build -f $client -t uptime_client . +docker build -f $mongoDB -t uptime_database_mongo . +docker build -f $redis -t uptime_redis . +docker build -f $server -t uptime_server . + +echo "All images built" \ No newline at end of file diff --git a/Docker/prod/client.Dockerfile b/Docker/prod/client.Dockerfile new file mode 100644 index 00000000..cbdb75aa --- /dev/null +++ b/Docker/prod/client.Dockerfile @@ -0,0 +1,17 @@ +FROM node:20-alpine AS build + +WORKDIR /app + +COPY ../../Client/package*.json ./ + +RUN npm install + +COPY ../../Client . + +RUN npm run build + +FROM nginx:1.27.1-alpine + +COPY --from=build /app/dist /usr/share/nginx/html + +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/Docker/docker-compose.yaml b/Docker/prod/docker-compose.yaml similarity index 100% rename from Docker/docker-compose.yaml rename to Docker/prod/docker-compose.yaml diff --git a/Docker/mongo/init/create_users.js b/Docker/prod/mongo/init/create_users.js similarity index 100% rename from Docker/mongo/init/create_users.js rename to Docker/prod/mongo/init/create_users.js diff --git a/Docker/prod/mongoDB.Dockerfile b/Docker/prod/mongoDB.Dockerfile new file mode 100644 index 00000000..80c8b9c8 --- /dev/null +++ b/Docker/prod/mongoDB.Dockerfile @@ -0,0 +1,4 @@ +FROM mongo +COPY ./Docker/prod/mongo/init/create_users.js /docker-entrypoint-initdb.d/ +EXPOSE 27017 +CMD ["mongod"] diff --git a/Docker/nginx/conf.d/default.conf b/Docker/prod/nginx/conf.d/default.conf similarity index 100% rename from Docker/nginx/conf.d/default.conf rename to Docker/prod/nginx/conf.d/default.conf diff --git a/Docker/prod/redis.Dockerfile b/Docker/prod/redis.Dockerfile new file mode 100644 index 00000000..af68ec61 --- /dev/null +++ b/Docker/prod/redis.Dockerfile @@ -0,0 +1,2 @@ +FROM redis +EXPOSE 6379 \ No newline at end of file diff --git a/Docker/server.Dockerfile b/Docker/prod/server.Dockerfile similarity index 100% rename from Docker/server.Dockerfile rename to Docker/prod/server.Dockerfile