Create env.list
file with such variables as bellow:
# env.list
POSTGRES_USER=alexpurhalo
POSTGRES_PASSWORD=123123
POSTGRES_DB=notes
DB_HOST=db
For development
docker-compose up
For production
docker-compose build --build-arg node_env=production client ./client
docker-compose build --build-arg rack_env=production server ./server
docker-compose up -d
Step 1. The Database container
# start server
docker run \
--detach \
--name database \
--env-file env.list \
--volume $(pwd)/tmp/data/postgres:/var/lib/postgresql/data \
postgres
# execute database
docker exec \
--interactive \
--tty \
database \
bash -c 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB"'
Step 2. The Server App container
# build image
docker build \
--build-arg rack_env=development \
--tag server_app_image \
./server
# start server
docker run \
--detach \
--name server_app \
--link database:db \
--publish 3000:3000 \
--env-file env.list \
--volume $(pwd)/server:/server_app \
server_app_image start migrate
# access to console
docker exec \
--interactive \
--tty \
server_app rake console
# execute tests
docker exec \
--interactive \
--tty \
server_app rake test
Step 3. The Client App container
# build image
docker build \
--build-arg node_env=development \
--tag client_app_image \
./client
# start server
docker run \
--detach \
--name client_app \
--publish 8080:8080 \
--volume $(pwd)/client:/client_app \
client_app_image
Step 4. The Proxy Reverse container
docker run \
--detach \
--name nginx \
--volume $(pwd)/default.conf:/etc/nginx/conf.d/default.conf \
--publish 80:80 \
--link server_app:server \
--link client_app:client \
nginx