No Description

Frederic G. MARAND 1d504928ce Step 3: working PostgreSQL. 6 years ago
nginx 43bf980d17 First commit: basic intro, create a custom Nginx images using a Dockerfile. 6 years ago
node 6ecdf31079 Step 2: working node app without persistence. 6 years ago
postgres 1d504928ce Step 3: working PostgreSQL. 6 years ago
.gitignore 6ecdf31079 Step 2: working node app without persistence. 6 years ago
Dockerfile 43bf980d17 First commit: basic intro, create a custom Nginx images using a Dockerfile. 6 years ago
README.md 1d504928ce Step 3: working PostgreSQL. 6 years ago

README.md

From https://www.codeschool.com/screencasts/build-a-node-app-with-postgres-and-docker

Step 1: Nginx

  • Run nginx

    • in foreground
      • docker run -p 81:80 --name web nginx
    • in foreground and removing it when stopped
      • docker run -p 81:80 --name web --rm nginx
    • in background
      • docker run -p 81:80 --name web -d nginx
    • foreground, mounting the nginx/html directory:

      docker run --rm \
      -p 81:80      \
      --name web    \
      --mount type=bind,source="$PWD"/nginx/html,target=/usr/share/nginx/html \
      nginx
      
      # or...
      
      docker run --rm                              \
      -p 81:80                                   \
      --name web                                 \
      -v "$PWD"/nginx/html,/usr/share/nginx/html \
      nginx
      
  • Enter the container: docker exec -it web /bin/bash

  • Build a local image from the Dockerfile

    docker build -t osinet/nginx:latest .
    
  • Run the newly built image:

    docker run --rm \
    -p 81:80 \
    --name web \
    --mount type=bind,source=$PWD/nginx/html,target=/usr/share/nginx/html \ 
    osinet/nginx
    
  • List images

    • All except intermediates: docker images
    • All including intermediates: docker images -a
    • Images with this name: docker images osinet/nginx

Step 2: Node.js app

mkdir node
cd node
# edit Dockerfile
docker build -t node-app .
docker run -p 8888:8888             \
  -v $PWD/node/src:/usr/src/app/src \ 
  --name voting-node                \
  --rm                              \
  node-app 

Step 3: PostgreSQL

  • Build and run the container

    mkdir postgres
    cd postgres
    # edit Dockerfile
    docker build -t node-pg .
    docker run -p 5432:5432             \
    --name voting-pg                  \
    --rm                              \
    node-pg
    
  • Enter the container with a PG client:

    # Without the -U, PG will try to use undeclared used root.  
    docker container exec -it psql -U postgres
    
  • In psql in the container, list databases, create table, list tables:

    \l
    
    CREATE TABLE votes (
    id INTEGER PRIMARY KEY,
    number_of_votes INTEGER,
    option_name VARCHAR(20)
    );
    
    \dt
    
    • Now we have a table:

       List of relations
      Schema | Name  | Type  |  Owner
      --------+-------+-------+----------
      public | votes | table | postgres
      (1 row)
      
    • Insert initial data

      INSERT INTO votes (id, number_of_votes, option_name) VALUES (1, 0, 'sandwiches');
      INSERT INTO votes (id, number_of_votes, option_name) VALUES (2, 0, 'tacos');
      SELECT * FROM votes;
      
    • Results:

      id | number_of_votes | option_name
      ----+-----------------+-------------
      1 |               0 | sandwiches
      2 |               0 | tacos
      (2 rows)