Skip to content

dev Docker container startup scripts

Sam edited this page Jun 23, 2023 · 28 revisions

Building images

From git repo root, create aw_base for most of the containers

docker build -t aw_base -f .\Dockerfile .

Setting up volume

Create a volume vol1 via docker volume create vol1

Then populate it by connecting to it, and git cloning the repo into it

docker run -w /home/app/mapf-multiagent-robot-planning/dev -d -it --name aw_dev --mount source=vol1,destination=/home/app aw_base

Mounting local windows git directory into vol1:

docker run -w /home/app/mapf-multiagent-robot-planning/dev -d -it --name aw_dev --mount source=vol1,destination=/home/app -v C:\Users\sam\Documents\GitHub\mapf-multiagent-robot-planning:/home/app/mapf-multiagent-robot-planning aw_base

Inside the aw_dev container run

apk add git
cd /home/app
git clone <this repo>

Optional - Add existing databases to volume

docker cp .\world.db aw_dev:/home/app
docker cp .\orders.db aw_dev:/home/app

At this point docker compose should work

Docker compose

Use docker compose up -d to start up all containers

[Old] starting containers individually

Shared network for containers to talk on

docker network create aw-net

World Sim

docker run -w /home/app/mapf-multiagent-robot-planning/dev --net aw-net -e REDIS_HOST="aw_redis" -d -it --name aw_world_sim --mount source=vol1,destination=/home/app --log-driver=gcplogs aw_base:latest python -m world_sim

Order Processor

docker run -w /home/app/mapf-multiagent-robot-planning/dev --net aw-net -e REDIS_HOST="aw_redis" -d -it --name aw_order_processor --mount source=vol1,destination=/home/app --log-driver=gcplogs aw_base python -m inventory_management_system.order_processor

Robot Allocator

docker run -w /home/app/mapf-multiagent-robot-planning/dev --net aw-net -e REDIS_HOST="aw_redis" -d -it --name aw_robot_allocator --mount source=vol1,destination=/home/app --log-driver=gcplogs aw_base python -m robot_allocator

Node webserver (access via port 3000)

docker run -w /home/app/mapf-multiagent-robot-planning/dev -p 3000:3000 --net aw-net -e REDIS_HOST="aw_redis" -d -it --name aw_web_node --mount source=vol1,destination=/home/app --log-driver=gcplogs node:alpine /bin/sh -c "npm --prefix ./env_visualizer install && node env_visualizer/"

Sending fake orders with temporary container (at least 10 new orders, 1 per second, max item id 47)

docker run -w /home/app/mapf-multiagent-robot-planning/dev --net aw-net -e REDIS_HOST="aw_redis" -d --rm  --name aw_fake_order_send --mount source=vol1,destination=/home/app --log-driver=gcplogs aw_base python -m inventory_management_system.fake_order_sender -k 10 --max-item-id 47 -d 1

Testing alpine

docker run -w /home/app/mapf-multiagent-robot-planning/dev --net aw-net -d -it --name aw_dev --mount source=vol1,destination=/home/app aw_base

Running redis

docker run -d --net aw-net -p 6379:6379 --name aw_redis --log-driver=gcplogs redis:alpine

Running with host network on GCP cOS instance

Note: docker container prune helps delete old stopped containers

# To reset 
docker run -d --net host -v $PWD/redis/data:/data --log-driver=gcplogs --name host_aw_redis redis:alpine
docker run --rm -w /home/app/mapf/dev --net host -v $PWD:/home/app/mapf --log-driver=gcplogs --env-file $PWD/.env --name host_aw_world_sim aw_base python -m world_sim reset
docker run --rm -w /home/app/mapf/dev --net host -v $PWD:/home/app/mapf --log-driver=gcplogs --env-file $PWD/.env --name host_aw_order_processor aw_base python -m inventory_management_system.order_processor reset
# To restart/start existing
source .env 
docker run -d --net host -v $PWD/redis/data:/data --log-driver=gcplogs --name host_aw_redis redis:alpine
docker run -d -w /home/app/mapf/dev --net host -v $PWD:/home/app/mapf --log-driver=gcplogs --env-file $PWD/.env --name host_aw_world_sim aw_base python -m world_sim
docker run -d -w /home/app/mapf/dev --net host -v $PWD:/home/app/mapf --log-driver=gcplogs --env-file $PWD/.env --name host_aw_order_processor aw_base python -m inventory_management_system.order_processor
docker run -d -w /home/app/mapf/dev --net host -v $PWD:/home/app/mapf --log-driver=gcplogs --env-file $PWD/.env --name host_aw_robot_allocator aw_base python -m robot_allocator
docker run -d -w /home/app/mapf/dev --net host -v $PWD:/home/app/mapf --log-driver=gcplogs --env-file $PWD/.env --name host_aw_fake_order_send aw_base python -m inventory_management_system.fake_order_sender -k 10 --max-item-id $MAX_ITEM_ID -d 1
docker run -d -w /home/app/mapf/dev --net host -v $PWD:/home/app/mapf --log-driver=gcplogs --env-file $PWD/.env --name host_aw_web_node node:alpine /bin/sh -c "export npm_config_cache=/home/app/mapf/npm_cache && npm --prefix ./env_visualizer install && node env_visualizer/"

# Necessary for GCP cOS https://stackoverflow.com/questions/45225191/unable-to-connect-to-http-service-running-on-google-compute-engine-vm-instance
sudo iptables -w -A INPUT -p tcp --dport 3000 -j ACCEPT

OLD

Flask IMS webserver (access via port 5000)

docker run -w /home/app/mapf-multiagent-robot-planning/dev --net aw-net -p 5000:5000 -d -it --name aw_web_flask --mount source=vol1,destination=/home/app aw_base flask --app inventory_management_system.order_tracking_web_server run --host=0.0.0.0