> For the complete documentation index, see [llms.txt](https://burkeholland.gitbook.io/vs-code-can-do-that/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://burkeholland.gitbook.io/vs-code-can-do-that/exercise-5-docker/dockerizing-an-application.md).

# Dockerizing an application

Containers are made up of images. Images contain your project and it's dependencies.&#x20;

{% tabs %}
{% tab title="Exercise" %}

* Add a Dockerfile to the start project. The Dockerfile should do the following...
  * Include a base Node image
  * Copy all the project files into the image
  * Run an npm install
  * Expose port 3000
  * Run npm start
* Build the image
  {% endtab %}

{% tab title="Answer" %}

* Open the Command Palette (**Cmd/Ctrl + Shift + P**)
* Select "Add Dockefiles to workspace"

![](/files/-Lm5k9ehyr0vtJqcloRd)

* Select the "start" project

![](/files/-Lm5kNgnZz-MyvIpclKp)

* Select "Node.js" from the prompt

![](/files/-Lm5kW5xSWtLZs8hLKPW)

* Enter "3000" in the prompt

![](/files/-Lm5kdiTNV98EX7NC8Qc)

* VS Code will add "Dockerfile", "docker-compose.yml" and "debug.docker-compose.yml" files to the project
* Open the "Dockerfile" in the "start" project
* Add two ENV variables, "API\_BASE" and "PORT"

```
FROM node:10.13-alpine
ENV NODE_ENV production
ENV API_BASE https://lifx-lamp-api.azurewebsites.net/api
ENV PORT 3000
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm install --production --silent && mv node_modules ../
COPY . .
EXPOSE 3000
CMD npm start
```

* Open the Command Palette (**Cmd/Ctrl + Shift + P**)
* Select "Docker Images: Build Image"

![](/files/-Lm5kztfOb6ykQWVN5dr)

* Select "start" as the workspace folder

![](/files/-Lm5lH52aZYdl5Q4XU2D)

* Take the default image tag

![](/files/-Lm5lNxLbtU21WKSWUQy)

* An integrated terminal instance will open and Docker will build the image

{% hint style="info" %}
Note that if you get an error saying "cannot connect to Docker daemon", make sure that Docker is installed and running on your machine.
{% endhint %}
{% endtab %}
{% endtabs %}
