How to Set Up Flask with MongoDB and Docker: 2022 Complete Guide
Tags: flask, mongodb, docker
Published: 2022-12-26 15:44:49

<div class="entry-content">
			<div class="row">
				<div class="col-lg-8 col-xl-8 blog-content-col">
					


<p>In this guide you will learn how to deploy a Python Flask and MongoDB application with Docker. The implementation uses Docker Engine and Docker-compose.</p>



<p>A lot of buzzwords mentioned may sound like the goal is quite complex but let’s break it down into simple steps and conquer them one by one.</p>



<h2>What is Flask?</h2>



<p><a href="https://flask.palletsprojects.com/">Flask</a> is a Python web micro-framework that provides you with the tools, libraries and technologies you need to build a modern web application. A micro-framework is a framework with little to no dependencies to external libraries. This has pros and cons. Pros would be that the framework is light—there is little dependency to update and watch for security bugs. Cons are that sometimes you will have to do more work by yourself or increase the list of dependencies by adding plugins. Flask has the following dependencies:</p>



<ul><li><a href="https://pypi.org/project/Werkzeug/">Werkzeug</a> a WSGI utility library.</li><li><a href="https://pypi.org/project/Jinja2/">jinja2</a> which is its template engine.</li></ul>



<h2>What is MongoDB?</h2>



<p><a href="https://www.mongodb.com/home">MongoDB</a> is a popular open source database, but unlike other databases it’s classified as a NoSQL database. The term ‘NoSQL’ means ‘non-relational’. It means that MongoDB is a document-oriented database that stores data in flexible BSON (similar to JSON format) documents. This is different from the table-like relational database structure. Developers can think of MongoDB as a persistent repository of Python dictionaries. The following image illustrates a simple MongoDB document Structure:</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="570" height="170" src="https://blog.nextideatech.com/wp-content/uploads/2022/12/crud-annotated-document.bakedsvg.png" alt="" class="wp-image-30590" srcset="https://blog.nextideatech.com/wp-content/uploads/2022/12/crud-annotated-document.bakedsvg.png 570w, https://blog.nextideatech.com/wp-content/uploads/2022/12/crud-annotated-document.bakedsvg-480x143.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 570px, 100vw"></figure>



<p>The advantages of using documents are:</p>



<ul><li>Documents (i.e. objects) map to native data types in many programming languages.</li><li>Embedded documents and arrays reduce the need for expensive joins.</li><li>Flexible data model.</li><li>The dynamic schema supports fluent polymorphism.</li><li>Great at handling big data through horizontal scalability.</li></ul>



<h2>What is Docker?</h2>



<p><a href="https://www.docker.com/">Docker</a> is an application that simplifies the process of managing application processes in containers. Containers let you run your applications in resource-isolated processes. They’re similar to virtual machines, but containers are more portable, more resource-friendly, and more dependent on the host operating system.</p>



<h2>Dockerize your Flask + MongoDB and Application</h2>



<h3>Prerequisites:</h3>



<p>To follow along, you need to have:</p>



<ol><li>Familiarity with Python.</li><li>Familiarity with standard code editors such as nano, gedit, vim, or emacs.</li><li>Working knowledge of basic operating system commands.</li><li>A <a href="https://hub.docker.com/signup" class="ek-link">Docker Hub</a> account.</li></ol>



<h4>Step 1: Install Docker Desktop</h4>



<p>Docker Desktop includes Docker Compose along with Docker Engine and Docker CLI which are Compose prerequisites. Compose is a tool for defining and running complex applications with Docker. You can use Docker Compose to define a multi-container application in a single file, then spin your application up in a single command that executes everything that needs to be done to get it running.</p>



<p>Follow the instructions in the following links to install Docker Desktop on:</p>



<ul><li><a href="https://docs.docker.com/desktop/install/linux-install/">Linux</a></li><li><a href="https://docs.docker.com/desktop/install/mac-install/">Mac</a></li><li><a href="https://docs.docker.com/desktop/install/windows-install/">Windows</a></li></ul>



<h4>Step 2: Create the Flask Application</h4>



<p>Let’s build a simple tasks app where you can create, update, and delete simple one liner tasks. This data will be stored inside a MongoDB database. Complete the following steps on your local machine to create the Flask application files.</p>



<h5>2.1 — Create a new project directory and switch to that directory with the following code:</h5>



<pre class="wp-block-code"><code>$ mkdir flask-mongodb-containers &amp;&amp; cd flask-mongodb-containers</code></pre>



<h5>2.2 — Create a new file, app.py</h5>



<p>Create a new file called <strong>app.py </strong>in your project directory and paste the following code:</p>



<pre class="wp-block-code"><code>from flask import Flask, request, jsonify
from flask_pymongo import PyMongo
from bson.objectid import ObjectId
import socket

app = Flask(__name__)
app.config["MONGO_URI"] = "mongodb://mongo:27017/dev"
app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True
mongo = PyMongo(app)
db = mongo.db


@app.route("/")
def index():
    hostname = socket.gethostname()
    return jsonify(
        message="Welcome to Tasks app!"
    )


@app.route("/tasks")
def get_all_tasks():
    tasks = db.task.find()
    data = []
    for task in tasks:
        item = {
            "id": str(task["_id"]),
            "task": task["task"]
        }
        data.append(item)
    return jsonify(
        data=data
    )


@app.route("/task", methods=["POST"])
def create_task():
    data = request.get_json(force=True)
    db.task.insert_one({"task": data["task"]})
    return jsonify(
        message="Task saved successfully!"
    )


@app.route("/task/&lt;id&gt;", methods=["PUT"])
def update_task(id):
    data = request.get_json(force=True)["task"]
    response = db.task.update_one({"_id": ObjectId(id)}, {"$set": {"task": data}})
    if response.matched_count:
        message = "Task updated successfully!"
    else:
        message = "No Task found!"
    return jsonify(
        message=message
    )


@app.route("/task/&lt;id&gt;", methods=["DELETE"])
def delete_task(id):
    response = db.task.delete_one({"_id": ObjectId(id)})
    if response.deleted_count:
        message = "Task deleted successfully!"
    else:
        message = "No Task found!"
    return jsonify(
        message=message
    )


@app.route("/tasks/delete", methods=["POST"])
def delete_all_tasks():
    db.task.remove()
    return jsonify(
        message="All Tasks deleted!"
    )


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

</code></pre>



<p>In the <strong>app.py</strong> file, we first import all the required modules and create instances of the <strong>Flask </strong>class (our app) and the <strong>PyMongo </strong>class (our database).</p>



<p><strong>Note:</strong> The hostname in the <strong>MONGO_URI </strong>Flask configuration variable has been set to <strong>‘mongo’</strong> instead of <strong>‘localhost’</strong>. This is because <strong>‘mongo’</strong> will be the name assigned to our database container since containers in the same Docker network can talk to each other by their names.</p>



<p>Our app contains six functions which are assigned URLs by <strong>@app.route() </strong>Python decorator. At first glance, it is easy to understand that the decorator is telling our app that whenever a user visits our <strong>@app</strong> domain at the given <strong>route()</strong>, execute the underlying function.</p>



<ol><li><strong>index() </strong>– displays a welcome message whenever you hit the app.</li><li><strong>get_all_tasks()</strong> – displays all the tasks that are available in the database as a list of dictionaries.</li><li><strong>create_task() </strong>– creates a new task which is stored in the database with a unique ID.</li><li><strong>update_task(id) </strong>– modifies any existing task. If no task is found with the queried ID, an appropriate message is returned.</li><li><strong>delete_task(id) </strong>– removes that entry of the task having the queried ID from the database. Returns an appropriate message if no task with the specified ID is found.</li><li><strong>delete_all_tasks() </strong>– removes all the tasks and returns an empty list.</li></ol>



<p>In the final section, where we run the app, we define the host parameter as <strong>‘0.0.0.0’ </strong>to make the server publicly available, running on the machine’s IP address. The machine here I am talking about is a container.&nbsp; When it runs, this application binds to all IPs on the system (<strong>‘0.0.0.0’</strong>) and listens on <strong>port 5000,</strong> which is the default Flask port.</p>



<h5>2.3 — Create a new file, requirements.txt</h5>



<p>Edit the file and add the following code:</p>



<pre class="wp-block-code"><code>Flask==2.2.2
Flask-PyMongo==4.3.3
</code></pre>



<p>Then, save the file.</p>



<p><strong>requirements.txt</strong> files are used to specify what Python packages are required by the application. For this minimal Flask application there are two packages that are required, <strong>Flask</strong> and <strong>Flask-PyMongo</strong> which will be installed when we build our Docker image. <strong>PyMongo</strong> is a Python distribution containing tools for working with MongoDB.</p>



<h5>2.4 — Authorize Docker to authenticate with Docker Hub</h5>



<p>Create a Docker Hub account, if you don’t have one and then authorize Docker to connect to the Docker Hub account using the <strong>docker login</strong> command as shown below:</p>



<pre class="wp-block-code"><code>$ docker login &lt;Username&gt;: &lt;Password&gt;</code></pre>



<p>Supply your username and password to authenticate with Docker Hub.</p>



<h5>2.5 — Dockerize the Flask MongoDB application</h5>



<p>Now, let us build a Docker image of our app which can be pushed to the Docker Hub registry. Inside our working directory <strong>flask-mongodb-containers</strong>, create a new file named <strong>Dockerfile</strong>. Edit the file and add the following commands to it:</p>



<pre class="wp-block-code"><code># Set base image (host OS)
FROM python:alpine3.8

# Copy the content of the project directory to the working directory
COPY . /app

# Set the working directory in the container
WORKDIR /app

# Install any dependencies
RUN pip install -r requirements.txt

# Specify the Flask environment port
ENV PORT 5000

# By default, listen on port 5000
EXPOSE 5000

# Set the directive to specify the executable that will run when the container is initiated
ENTRYPOINT [ "python" ]

# Specify the command to run on container start
CMD [ "app.py" ]
</code></pre>



<p>We are using the official Python image, based on the Alpine Linux project, as the base image. The Python alpine image ensures the resulting container is as compact and small as possible. We are then copying the contents of our working directory to a new directory on the image. We are instructing the image to expose the <strong>port 5000</strong> when run as a container, on which we can access our app. Finally, our app container is configured to run python <strong>app.py</strong> automatically when it is created.</p>



<p>At this point, your working directory <em>flask-mongodb-containers</em> should contain the following files:</p>



<pre class="wp-block-code"><code>$ tree
.
├── app.py
├── Dockerfile
└── requirements.txt
</code></pre>



<p>0 directories, 3 files</p>



<h4>Step 3: Build your Docker container image</h4>



<p>Complete the following steps to build and test the container image locally:</p>



<h5>3.1 — Build the container using Docker</h5>



<p>Execute the following command from the same directory as the Dockerfile:</p>



<pre class="wp-block-code"><code>$ docker build -t &lt;username&gt;/flask-container:1.0.0 .</code></pre>



<p>This command builds a container using the <strong>Dockerfile</strong> in the current directory with tag <strong>&lt;username&gt;/&lt;image-name&gt;:&lt;version&gt;</strong> format.</p>



<p><strong>Note:</strong> Replace <strong>&lt;username&gt;</strong> with your Docker Hub username.</p>



<h5>3.2 — Run the Container</h5>



<p>Once the container build is done, test the Flask application locally by running the container.</p>



<pre class="wp-block-code"><code>$ docker run -p 5000:5000 &lt;username&gt;/flask-container:1.0.0</code></pre>



<h5>3.3 — View the application</h5>



<p>After executing the previous command, the Flask app will run in the container and will be exposed to your local system on <strong>port 5000</strong>.</p>



<p>Browse to <strong>http://localhost:5000</strong> or use <strong>curl</strong> from the command line and you will see “Welcome to Tasks App!”</p>



<pre class="wp-block-code"><code>$ curl localhost:5000</code></pre>



<p>Run the following commands to test your image locally:</p>



<pre class="wp-block-code"><code>$ curl localhost:5000/task

$ curl localhost:5000/tasks
</code></pre>



<h4>Step 4–Push your image to Docker Hub</h4>



<p>To make your image publicly available on Docker Hub so that anybody in the world can download and run it, run the following command:</p>



<pre class="wp-block-code"><code>$ docker push &lt;username&gt;flask-container:1.0.0</code></pre>



<h2>Conclusion</h2>



<p>You built a small Flask web application for managing tasks that communicates with a MongoDB database. You learned how to dockerize a Flask MongoDB application, connect Flask to a MongoDB database server, create collections that store a group of documents, insert data to a collection, and retrieve and delete data from a collection.</p>



<p>If you would like to read more about Flask, check out the other tutorials in our blog.</p>
					<!-- <section class="cta-card">
					  <div class="cta-card__container">
					    <div class="cta-card__header">
					      <p class="cta-card__title">Tell us the skills you need and we'll find the best developer for you in days, not weeks.</p>
					      <a href="https://nextideatech.com/contact/">Hire Developers</a>
					    </div>
					  </div>
					</section> -->

					<!-- subscribe form -->
					<div id="mc_embed_signup" class="subscribe-form">
						<form action="https://nextideatech.us7.list-manage.com/subscribe/post?u=ae45185df605e4c3b1371d09f&amp;id=22c96b1894&amp;f_id=0004c5e4f0" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate="novalidate">
							<div id="mc_embed_signup_scroll">
								<h4>Subscribe to our newsletter and get<br> exclusive content</h4>
								<div class="mc-field-group">
									<input type="email" value="" name="EMAIL" class="required email" placeholder="Email Address" id="mce-EMAIL" aria-required="true">
									<span id="mce-EMAIL-HELPERTEXT" class="helper_text"></span>
									<input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button">
								</div>
								<div id="mce-responses" class="clear foot">
									<div class="response" id="mce-error-response" style="display:none"></div>
									<div class="response" id="mce-success-response" style="display:none"></div>
								</div>
						    <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_ae45185df605e4c3b1371d09f_22c96b1894" tabindex="-1" value=""></div>
						   </div>
						</form>
					</div>
					<script type="text/javascript" src="//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js"></script>
					<script type="text/javascript">(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';fnames[3]='ADDRESS';ftypes[3]='address';fnames[4]='PHONE';ftypes[4]='phone';}(jQuery));var $mcj = jQuery.noConflict(true);</script>

				</div>

				<div class="col-lg-4 col-xl-4 blog-sidebar-col">
						<div id="sidebar">
		<div id="block-17" class="et_pb_widget widget_block">
<h5>Related Posts</h5>
</div><div id="block-18" class="et_pb_widget widget_block widget_recent_entries"><ul class="wp-block-latest-posts__list has-dates wp-block-latest-posts"><li><div class="wp-block-latest-posts__featured-image alignleft"><a href="https://blog.nextideatech.com/chatgpt-threat-freelance-workers/" aria-label="Is ChatGPT a Threat to the Gig Economy?"><img width="300" height="169" src="https://blog.nextideatech.com/wp-content/uploads/2022/12/img_0120-2-2-300x169.png" class="attachment-medium size-medium wp-post-image" alt="chatgpt freelancers gig workers" loading="lazy" style="" srcset="https://blog.nextideatech.com/wp-content/uploads/2022/12/img_0120-2-2-300x169.png 300w, https://blog.nextideatech.com/wp-content/uploads/2022/12/img_0120-2-2-1024x576.png 1024w, https://blog.nextideatech.com/wp-content/uploads/2022/12/img_0120-2-2-768x432.png 768w, https://blog.nextideatech.com/wp-content/uploads/2022/12/img_0120-2-2-1536x864.png 1536w, https://blog.nextideatech.com/wp-content/uploads/2022/12/img_0120-2-2-2048x1152.png 2048w" sizes="(max-width: 300px) 100vw, 300px"></a></div><a class="wp-block-latest-posts__post-title" href="https://blog.nextideatech.com/chatgpt-threat-freelance-workers/">Is ChatGPT a Threat to the Gig Economy?</a><time datetime="2022-12-24T15:04:08+00:00" class="wp-block-latest-posts__post-date">December 24, 2022</time></li>
<li><div class="wp-block-latest-posts__featured-image alignleft"><a href="https://blog.nextideatech.com/how-to-build-intelligent-chatbots-with-python-and-chatgpt/" aria-label="How To Build Intelligent Chatbots with Python and ChatGPT"><img width="240" height="300" src="https://blog.nextideatech.com/wp-content/uploads/2022/12/andrea-de-santis-zwd435-ewb4-unsplash-240x300.jpg" class="attachment-medium size-medium wp-post-image" alt="ChatGPT python" loading="lazy" style=""></a></div><a class="wp-block-latest-posts__post-title" href="https://blog.nextideatech.com/how-to-build-intelligent-chatbots-with-python-and-chatgpt/">How To Build Intelligent Chatbots with Python and ChatGPT</a><time datetime="2022-12-23T17:48:52+00:00" class="wp-block-latest-posts__post-date">December 23, 2022</time></li>
<li><div class="wp-block-latest-posts__featured-image alignleft"><a href="https://blog.nextideatech.com/how-to-set-up-flask-with-mongodb-and-docker-2022-complete-guide/" aria-label="How to Set Up Flask with MongoDB and Docker: 2022 Complete Guide"><img width="300" height="167" src="https://blog.nextideatech.com/wp-content/uploads/2022/12/flask-mongo-docker-300x167.png" class="attachment-medium size-medium wp-post-image" alt="How to Set Up Flask with MongoDB and Docker" loading="lazy" style=""></a></div><a class="wp-block-latest-posts__post-title" href="https://blog.nextideatech.com/how-to-set-up-flask-with-mongodb-and-docker-2022-complete-guide/">How to Set Up Flask with MongoDB and Docker: 2022 Complete Guide</a><time datetime="2022-12-16T16:59:32+00:00" class="wp-block-latest-posts__post-date">December 16, 2022</time></li>
</ul></div><div id="block-19" class="et_pb_widget widget_block">
<div class="sticky-block-wrapper sticky-block-wrapper-0"><div class="sticky-block-placeholder sticky-block-placeholder-0" style="width:0; height:0; margin:0; padding:0; visibility:hidden;"></div><div class="wp-block-senff-sticky-block senff-sticky-block-0 sticky-block-original-0 block-is-not-sticky sticky-block-active-0" data-topspace="100" data-cfa="true" data-minwidth="980" data-maxwidth="99999" data-pushup="#main-footer" data-zindex="1" style="">
<h5>Share</h5>


<p></p><div class="addtoany_shortcode"><div class="a2a_kit a2a_kit_size_32 addtoany_list" data-a2a-url="https://blog.nextideatech.com/how-to-set-up-flask-with-mongodb-and-docker-2022-complete-guide/" data-a2a-title="How to Set Up Flask with MongoDB and Docker: 2022 Complete Guide" style="line-height: 32px;"><a class="a2a_button_facebook" href="/#facebook" title="Facebook" rel="nofollow noopener" target="_blank"><span class="a2a_svg a2a_s__default a2a_s_facebook" style="background-color: rgb(10, 107, 216);"><svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#FFF" d="M17.78 27.5V17.008h3.522l.527-4.09h-4.05v-2.61c0-1.182.33-1.99 2.023-1.99h2.166V4.66c-.375-.05-1.66-.16-3.155-.16-3.123 0-5.26 1.905-5.26 5.405v3.016h-3.53v4.09h3.53V27.5h4.223z"></path></svg></span><span class="a2a_label">Facebook</span></a><a class="a2a_button_twitter" href="/#twitter" title="Twitter" rel="nofollow noopener" target="_blank"><span class="a2a_svg a2a_s__default a2a_s_twitter" style="background-color: rgb(10, 107, 216);"><svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#FFF" d="M28 8.557a9.913 9.913 0 0 1-2.828.775 4.93 4.93 0 0 0 2.166-2.725 9.738 9.738 0 0 1-3.13 1.194 4.92 4.92 0 0 0-3.593-1.55 4.924 4.924 0 0 0-4.794 6.049c-4.09-.21-7.72-2.17-10.15-5.15a4.942 4.942 0 0 0-.665 2.477c0 1.71.87 3.214 2.19 4.1a4.968 4.968 0 0 1-2.23-.616v.06c0 2.39 1.7 4.38 3.952 4.83-.414.115-.85.174-1.297.174-.318 0-.626-.03-.928-.086a4.935 4.935 0 0 0 4.6 3.42 9.893 9.893 0 0 1-6.114 2.107c-.398 0-.79-.023-1.175-.068a13.953 13.953 0 0 0 7.55 2.213c9.056 0 14.01-7.507 14.01-14.013 0-.213-.005-.426-.015-.637.96-.695 1.795-1.56 2.455-2.55z"></path></svg></span><span class="a2a_label">Twitter</span></a><a class="a2a_button_pinterest" href="/#pinterest" title="Pinterest" rel="nofollow noopener" target="_blank"><span class="a2a_svg a2a_s__default a2a_s_pinterest" style="background-color: rgb(10, 107, 216);"><svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#FFF" d="M16.539 4.5c-6.277 0-9.442 4.5-9.442 8.253 0 2.272.86 4.293 2.705 5.046.303.125.574.005.662-.33.061-.231.205-.816.27-1.06.088-.331.053-.447-.191-.736-.532-.627-.873-1.439-.873-2.591 0-3.338 2.498-6.327 6.505-6.327 3.548 0 5.497 2.168 5.497 5.062 0 3.81-1.686 7.025-4.188 7.025-1.382 0-2.416-1.142-2.085-2.545.397-1.674 1.166-3.48 1.166-4.689 0-1.081-.581-1.983-1.782-1.983-1.413 0-2.548 1.462-2.548 3.419 0 1.247.421 2.091.421 2.091l-1.699 7.199c-.505 2.137-.076 4.755-.039 5.019.021.158.223.196.314.077.13-.17 1.813-2.247 2.384-4.324.162-.587.929-3.631.929-3.631.46.876 1.801 1.646 3.227 1.646 4.247 0 7.128-3.871 7.128-9.053.003-3.918-3.317-7.568-8.361-7.568z"></path></svg></span><span class="a2a_label">Pinterest</span></a><a class="a2a_button_linkedin" href="/#linkedin" title="LinkedIn" rel="nofollow noopener" target="_blank"><span class="a2a_svg a2a_s__default a2a_s_linkedin" style="background-color: rgb(10, 107, 216);"><svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M6.227 12.61h4.19v13.48h-4.19V12.61zm2.095-6.7a2.43 2.43 0 0 1 0 4.86c-1.344 0-2.428-1.09-2.428-2.43s1.084-2.43 2.428-2.43m4.72 6.7h4.02v1.84h.058c.56-1.058 1.927-2.176 3.965-2.176 4.238 0 5.02 2.792 5.02 6.42v7.395h-4.183v-6.56c0-1.564-.03-3.574-2.178-3.574-2.18 0-2.514 1.7-2.514 3.46v6.668h-4.187V12.61z" fill="#FFF"></path></svg></span><span class="a2a_label">LinkedIn</span></a><a class="a2a_button_email" href="/#email" title="Email" rel="nofollow noopener" target="_blank"><span class="a2a_svg a2a_s__default a2a_s_email" style="background-color: rgb(10, 107, 216);"><svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#FFF" d="M26 21.25v-9s-9.1 6.35-9.984 6.68C15.144 18.616 6 12.25 6 12.25v9c0 1.25.266 1.5 1.5 1.5h17c1.266 0 1.5-.22 1.5-1.5zm-.015-10.765c0-.91-.265-1.235-1.485-1.235h-17c-1.255 0-1.5.39-1.5 1.3l.015.14s9.035 6.22 10 6.56c1.02-.395 9.985-6.7 9.985-6.7l-.015-.065z"></path></svg></span><span class="a2a_label">Email</span></a></div></div><p></p>
</div></div>
</div>	</div>
				</div>

			</div>
		</div>