The full context of the code shown here can be viewed here
|-- package.json
|-- docker-compose.yml
|-- config.js
|-- table_tennis.sql
|-- zseeds.sql
|-- server.js
|-- client
|-- postcss.config.js
|-- webpack.config.js
I recently discovered that to get around Cylance anti-virus blocking postgresapp from starting a server Docker was the fastest and simplest solution. This is how I took a project underway and dockerized it - the fast way, not necessaarily the recommended way!
Condense into one top-level package.json file.
This should contain a script to run your webpack, and include npm, nodemon, and webpack.
If you are using one docker container to run both your frontend and backend make sure that your npm start runs both your server and webpack.
package.json
{
"name": "express_server",
"version": "1.0.0",
"main": "server.js",
"scripts": {
"test": "mocha client/src/models/specs",
"start": "nodemon server.js & npm run webpack",
"webpack": "cd client && webpack -w"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.17.2",
"cookie-parser": "^1.4.3",
"express": "^4.15.3",
"js-sha512": "^0.3.0",
"jsonwebtoken": "^7.4.1",
"pg": "^6.0.2",
"babel-core": "^6.23.1",
"babel-loader": "^6.4.0",
"babel-plugin-transform-object-assign": "^6.22.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.23.0",
"babel-preset-stage-2": "^6.24.1",
"postcss": "^6.0.3",
"postcss-cssnext": "^2.11.0",
"postcss-each": "^0.10.0",
"postcss-import": "^10.0.0",
"postcss-loader": "^2.0.6",
"postcss-mixins": "^6.0.0",
"redux-devtools": "^3.4.0",
"style-loader": "^0.13.1",
"npm": "^3.10.8"
},
"devDependencies": {
"mocha": "^3.4.2",
"react": "^15.4.2",
"react-dom": "^15.4.2",
"react-redux": "^5.0.5",
"react-router-dom": "^4.1.1",
"react-toolbox": "^2.0.0-beta.12",
"redux": "^3.7.1",
"redux-thunk": "^2.2.0",
"webpack": "^2.2.1",
"nodemon": "^1.11.0"
},
"description": ""
}
Make a docker-compose.yml file in your top level.
If you are running a seperate seeds file to seed your database be aware docker runs them in alphabetical order, hence renaming it zseeds.sql to ensure the seeds were run last.
docker-compose.yml
server:
image: node:7
command: npm start
working_dir: /app
volumes:
- .:/app
environment:
PORT: 3000
ports:
- "3000:3000"
links:
- db
db:
image: postgres
expose:
- 5432
volumes:
- ./table_tennis.sql:/docker-entrypoint-initdb.d/table_tennis.sql
- ./zseeds.sql:/docker-entrypoint-initdb.d/zseeds.sql
environment:
POSTGRES_PASSWORD: password
POSTGRES_USER: user
POSTGRES_DB: react_table_tennis
Update any connection link to your database, for me:
config.js
module.exports = {
'database': 'postgres://user:password@db:5432/react_table_tennis'
}
You should be done. Now just follow the instructions below to run your containers.
In top level folder
$ npm install
START
$ docker-compose up
REMOVE
$ docker-compose down
To see container IDs:
$ docker ps
$ docker exec -it [POSTGRES_CONTAINER_ID] /bin/bash
root@[CONTAINER_ID] $ su - postgres
root@[CONTAINER_ID] $ psql db