Added secrets and health checks
							parent
							
								
									52459a009c
								
							
						
					
					
						commit
						b216aab7aa
					
				@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					# Create a test NFS volume
 | 
				
			||||||
 | 
					# make sure the permissions on the NFS volume don't map to a user that can't access them
 | 
				
			||||||
 | 
					docker volume create --driver local --opt type=nfs --opt o=addr=nas1.androiddrew.com,rw --opt device=:/volume1/expanse nfs-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					docker run --name test-postgres -v nfs-test:/var/lib/postgresql/data -d postgres:10.4-alpine
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build a docker machine and push it to the docker hub
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## First set the docker env back to the local Host
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					eval $(docker-machine env -u)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## build with the tag using the docker file and the path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					docker build -t androiddrew/flask-docker-swarm_web:latest -f ./services/web/Dockerfile ./services/web
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					docker push androiddrew/flask-docker-swarm_web:latest
 | 
				
			||||||
@ -0,0 +1,105 @@
 | 
				
			|||||||
 | 
					# Image: Instead of referencing the local build directory, we are now using an image to set the context
 | 
				
			||||||
 | 
					# Deploy: We added a deploy keyword to configure the number of replicas, restart_policy, and placement contstraints for each service
 | 
				
			||||||
 | 
					# REFERENCE: https://docs.docker.com/compose/compose-file/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version: '3.6'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					services:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  web:
 | 
				
			||||||
 | 
					    image: androiddrew/flask-docker-swarm_web:latest
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      replicas: 1
 | 
				
			||||||
 | 
					      restart_policy:
 | 
				
			||||||
 | 
					        condition: on-failure
 | 
				
			||||||
 | 
					      placement:
 | 
				
			||||||
 | 
					        constraints: [node.role == worker]
 | 
				
			||||||
 | 
					    expose:
 | 
				
			||||||
 | 
					      - 5000
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - FLASK_ENV=production
 | 
				
			||||||
 | 
					      - APP_SETTINGS=project.config.ProductionConfig
 | 
				
			||||||
 | 
					      - DB_USER=postgres
 | 
				
			||||||
 | 
					      - DB_PASSWORD=postgres
 | 
				
			||||||
 | 
					    #  - SECRET_CODE=myprecious
 | 
				
			||||||
 | 
					    # here we are going to use docker secrets to keep everything safe
 | 
				
			||||||
 | 
					    #see the secrets section below
 | 
				
			||||||
 | 
					    secrets:
 | 
				
			||||||
 | 
					      - secret_code
 | 
				
			||||||
 | 
					    depends_on:
 | 
				
			||||||
 | 
					      - db
 | 
				
			||||||
 | 
					    networks:
 | 
				
			||||||
 | 
					      - app
 | 
				
			||||||
 | 
					    # We can add a health check to either a conmpose file or Dockerfile https://docs.docker.com/engine/reference/builder/#healthcheck
 | 
				
			||||||
 | 
					    healthcheck:
 | 
				
			||||||
 | 
					      # Test is the actual command that will be run to check the health status
 | 
				
			||||||
 | 
					      # It should return 0 (Healthy) or 1 (Unhealthy)
 | 
				
			||||||
 | 
					      test: curl --fail http://localhost:5000/ping || exit 1
 | 
				
			||||||
 | 
					      interval: 10s
 | 
				
			||||||
 | 
					      timeout: 2s
 | 
				
			||||||
 | 
					      retries: 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  db:
 | 
				
			||||||
 | 
					    image: androiddrew/flask-docker-swarm_db:latest
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      replicas: 1
 | 
				
			||||||
 | 
					      restart_policy:
 | 
				
			||||||
 | 
					        condition: on-failure
 | 
				
			||||||
 | 
					      placement:
 | 
				
			||||||
 | 
					        #constraints: [node.role == manager]
 | 
				
			||||||
 | 
					        constraints: [node.role == worker]
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - data-volume:/var/lib/postgresql/data
 | 
				
			||||||
 | 
					    expose:
 | 
				
			||||||
 | 
					      - 5432
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - POSTGRES_USER=postgres
 | 
				
			||||||
 | 
					      - POSTGRES_PASSWORD=postgres
 | 
				
			||||||
 | 
					    networks:
 | 
				
			||||||
 | 
					      - app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  nginx:
 | 
				
			||||||
 | 
					    image: androiddrew/flask-docker-swarm_nginx:latest
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      replicas: 1
 | 
				
			||||||
 | 
					      restart_policy:
 | 
				
			||||||
 | 
					        condition: on-failure
 | 
				
			||||||
 | 
					      placement:
 | 
				
			||||||
 | 
					        constraints: [node.role == worker]
 | 
				
			||||||
 | 
					    ports:
 | 
				
			||||||
 | 
					      - 80:80
 | 
				
			||||||
 | 
					    depends_on:
 | 
				
			||||||
 | 
					      - web
 | 
				
			||||||
 | 
					    networks:
 | 
				
			||||||
 | 
					      - app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  visualizer:
 | 
				
			||||||
 | 
					    image: dockersamples/visualizer:latest
 | 
				
			||||||
 | 
					    ports:
 | 
				
			||||||
 | 
					      - 8080:8080
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - "/var/run/docker.sock:/var/run/docker.sock"
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      placement:
 | 
				
			||||||
 | 
					        constraints: [node.role == manager]
 | 
				
			||||||
 | 
					    networks:
 | 
				
			||||||
 | 
					      - app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# We are now using an overlay network to connect multiple Docker engines across each host and enable communication between Swarm services
 | 
				
			||||||
 | 
					networks:
 | 
				
			||||||
 | 
					  app:
 | 
				
			||||||
 | 
					    driver: overlay
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					volumes:
 | 
				
			||||||
 | 
					  #data-volume:
 | 
				
			||||||
 | 
					  #  driver: local
 | 
				
			||||||
 | 
					  data-volume:
 | 
				
			||||||
 | 
					    driver: local
 | 
				
			||||||
 | 
					    driver_opts:
 | 
				
			||||||
 | 
					      type: nfs
 | 
				
			||||||
 | 
					      o: addr=nas1.androiddrew.com,rw
 | 
				
			||||||
 | 
					      device: ":/volume1/expanse/flask_data"
 | 
				
			||||||
 | 
					# Secrets can be configured in either external or file-based manner
 | 
				
			||||||
 | 
					secrets:
 | 
				
			||||||
 | 
					  secret_code:
 | 
				
			||||||
 | 
					    external: true
 | 
				
			||||||
					Loading…
					
					
				
		Reference in New Issue