chilin89117 / ms21-05-multi

Section 5 Udemy course "Docker & Kubernetes: The Practical Guide [2022 Edition]" by Academind

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[ms21-05]

A. Docker Network

$ docker network create ms21-05-net

B. MongoDB Database

  • Use image from https://hub.docker.com/_/mongo

  • Use network ms21-05-net for Node backend to connect

    • Does not need to expose port 27017 because backend will connect using container name mongodb
  • Use named volume data to persist database data

  • Use environment variables to set username/password

$ docker container run -d --rm \
      --name mongodb \
      --network ms21-05-net \
      -v data:/data/db \
      -e MONGO_INITDB_ROOT_USERNAME=<username> \
      -e MONGO_INITDB_ROOT_PASSWORD=<password> \
      mongo:latest

C. Node.js Backend

$ docker image build -t chilin89117/ms21-05-node ./backend
  • Connect to MongoDB database port 27017

    • Use network ms21-05-net and container name mongodb
    • Use username/password set in .env file which overrides those set in Dockerfile
  • Expose port 80 for React frontend where browser JavaScript can not access ms21-05-net network

  • Use anonymous volume for node_modules

  • Use named volume nodelogs for log files

  • Use bind volume for source files

$ docker container run --rm -dp 80:80 \
      --name ms21-05-node \
      --network ms21-05-net \
      -v nodelogs:/app/logs \
      -v $PWD/backend:/app:ro \
      -v /app/node_modules \
      --env-file $PWD/backend/.env \
      chilin89117/ms21-05-node

D. React Frontend

$ docker image build -t chilin89117/ms21-05-react ./frontend
  • Does not need to be part of ms21-05-net network becasue React runs in browser and needs to access localhost

  • React development server requires -it

  • Use bind volume for source files

$ docker run --rm -it -dp 3000:3000 \
      --name ms21-05-react \
      -v $PWD/frontend/src:/app/src:ro \
      chilin89117/ms21-05-react

About

Section 5 Udemy course "Docker & Kubernetes: The Practical Guide [2022 Edition]" by Academind


Languages

Language:JavaScript 63.9%Language:CSS 17.7%Language:HTML 13.7%Language:Dockerfile 4.6%