Docker Configuration Example
If you are new to Docker, setting up a simple container manually may help to clarify how Docker works. This can be done by creating a directory docker and placing the following files into it.
Dockerfile:
FROM python:3.7 WORKDIR /app RUN pip install --trusted-host pypi.python.org Flask EXPOSE 80 CMD ["python", "app.py"]
app.py:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "<h3>Hello World!</h3>Your app is working.<br/></br/>"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80, use_reloader=True)
Then build the Docker container by typing the following in the docker directory:
docker build --tag=myapp .
You can now run your container like this:
docker run -v "/path/to/docker":/app -p 4000:80 myapp
You will need to substitute /path/to/docker with the path to the docker directory you created above; the quotes make it work if the path has spaces in it.
You can now try this tiny Flask web app by pointing a browser running on your host system at it:
If you are using Docker Desktop, then use http://localhost:4000/
If you are using Docker CE, you will need to determine the IP address of your container and use that instead of localhost. One way to do this is to type docker ps to find the Container ID for your container and then use it in the following in place of c052478b0f8a:
docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" c052478b0f8a
Notice that if you make a change to app.py in Wing, then the change will be reflected in your browser when you reload the page. This is due to using both the -v argument for docker run to mount a volume in the container (so container files are immediately updated if they change on the host), and the fact that app.run() for Flask is being passed use_reloader=True (so that changed container files are automatically reloaded by Flask).