Skip to content

leetcode-golang-classroom/docker-compose-learning

Folders and files

NameName
Last commit message
Last commit date

Latest commit

4a5b8ca · Aug 9, 2024

History

6 Commits
Aug 9, 2024
Jul 27, 2024
Aug 9, 2024
Aug 9, 2024
Jul 25, 2024
Jul 27, 2024
Aug 9, 2024
Jul 25, 2024
Jul 25, 2024
Jul 25, 2024
Jul 25, 2024
Jul 25, 2024
Jul 25, 2024
Jul 25, 2024

Repository files navigation

docker compose learning

This repository is for demo how to use docker compose

demo with mongo and mongo-express

1 architecture diagram

architecture

2 with docker command

  1. create bridge network for container communication
docker network create mongo-network

network-created

  1. ls current network created
docker network ls

network-ls

  1. run mongo over mongo-network
docker run -d \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=supersecret \
--network mongo-network \
--name mongodb \
mongo

docker-mongo

mongo-container

  1. run mongo-express over mongo-network
docker run -d \
-p 8081:8081 \
-e ME_CONFIG_MONGODB_ADMINUSERNAME=admin \
-e ME_CONFIG_MONGODB_ADMINPASSWORD=supersecret \
-e ME_CONFIG_MONGODB_SERVER=mongodb \
--network mongo-network \
--name mongo-express \
mongo-express

mongo-express-container

docker log for check mongo-express default user/password

docker-log-for-mongo-express

login-web-page

3 with docker-compose

  1. create docker-compose.yml
networks:
  mongo-network:
    driver: bridge
    name: mongo-network
services:
  mongodb:
    image: mongo:latest
    container_name: mongodb
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: supersecret
    networks:
      - mongo-network
    ports:
      - 27017:27017
    healthcheck:
      test: echo 'db.runCommand("ping").ok' | mongosh mongodb://admin:supersecret@localhost:27017/ --quiet
      interval: 5s
      timeout: 10s
      retries: 3
  mongo-express:
    image: mongo-express:latest
    container_name: mongo-express
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: admin
      ME_CONFIG_MONGODB_ADMINPASSWORD: supersecret
      ME_CONFIG_MONGODB_SERVER: mongodb
    depends_on:
      mongodb:
        condition: service_healthy
    networks:
      - mongo-network
    ports:
      - 8081:8081 
  1. use docker compose command to start
docker compose up -d

add web app connect with mongodb

This app will directly load data from mongodb

mkdir app

server.js

target

deploy-app-with-mongo

add new container setup on docker-compose.yml

  app:
    build:
      context: .
      dockerfile: ./app/Dockerfile
      target: prod
    container_name: web-app
    image: web-app
    networks:
      - mongo-network
    environment:
      MONGO_DB_USERNAME: admin
      MONGO_DB_PWD: supersecret
    ports:
      - 3000:3000
    depends_on:
      mongodb:
        condition: service_healthy

for security issue: set those secret with environment variable

  1. use environment to inject credential data
  environment:
    MONGO_INITDB_ROOT_USERNAME: ${MONGO_DB_ADMIN_USER}
    MONGO_INITDB_ROOT_PASSWORD: ${MONGO_DB_ADMIN_PASSWD}

use docker compose secret to inject secret

services:
  myapp:
    image: maapp:latest
    secrets:
      - my_secret
secrets:
  my_secret:
    file: ./my_secret.txt