Docker Exercise 1
Docker Exercise 1
Preparation
Copy the following files into a local directory on your system.
app.mjs
import express from 'express';
import connectToDatabase from './helpers.mjs'
const app = express();
app.get('/', (req, res) => { res.send('<h2>Hi there!</h2>');});
await connectToDatabase();
app.listen(3000);
helpers.mjs
const connectToDatabase = () => { const dummyPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve(); }, 1000); });
return dummyPromise;};
export default connectToDatabase;
package.json
{ "name": "docker-start", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.17.1" }}
Dockerfile
FROM node:14
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 3000
CMD [ "node", "app.mjs" ]
Build the image
Open a CLI and navigate into the folder you copied the files to.
Run:
docker build .
The output will give you a container Id. Something like
=> => writing image sha256:307e51e493e71a
Run the container based on the image
Use the first few characters of the ID (copy enough so that it is unique) to run a container based on that image.
docker run -p 3000:3000 307e51e
You can then open the app on port 3000 of your local machine.
Try using different ports
Specify different ports for both the exposed container port aswell as the host port.
Make a change
Change the HTML output from the web server to something else. Run the container again and make sure you see the changes.
Optimize the Dockerfile
Make sure that npm install
only executes when the package.json file changes.