Skip to main content

Packaging a Static Website with Dockerfile and pushing to DockerHub

 Want to read this with better formatting? Of course you do; Check out the page on Notion!

 

What's in the image?

A simple static webpage I had created for fun a few months ago. I knew it would come in handy!

What did I do?

  • Used demo static webpage for testing.
  • Created Dockerfile

💡 It should be Dockerfile, no extension. Dockerfile.Dockerfile is incorrect!

  • Used nginx Alpine as server and the following code:

 FROM scratch as static-site 

WORKDIR /app 

COPY . . [#to same directory]

FROM nginx:1.16.0-alpine as server

 COPY --from=static-site /app /usr/share/nginx/html 

EXPOSE 80 [#For web access]

CMD [ "nginx", "-g", "daemon off;"]

 From Mwiza Kumwenda (see resources below).

 

CMD [ "nginx", "-g", "daemon off;"]
 
 

 

I wondered if I should use "start" in the CMD [ "nginx", "-g", "daemon off;"] list/tuple, but it worked to package the image without it

 Actually, pushing the image required me to start it as a container and then package the container, otherwise, you're met with the following error messages;

Error Pushing to Docker Hub:

An image does not exist locally with the tag username/staticapptest an 'denied: requested access to the resource is denied', 'failed to read dockerfile:
open /var/lib/docker/tmp/buildkit-mount267173172/Dockerfile: no such file or directory'

It seems odd to me, but I'm not a Docker Developer, I'm sure they have a good reason for this!

The Fix

  • Creating the image as a container and then pushing it works

Steps Taken:

  1. Package app (above)
  2. Run the Image
  3. Take the Image ID and run within a container;
776442dod12   libtest:latest   "nginx -g 'daemon of…"   18 seconds ago   Up 13 seconds   0.0.0.0:80->80/tcp   hopeful_thompson
  1. Commit the container;
docker commit 776442dod12   <name>/libtest:<tag>
  1. 5 docker images reveals;
libtest            latest    776442dod12   25 hours ago     29.4MB
  1. Then I push it to my DockerHub;

 And it works; Check it out publicly here.

Make Sure...

  • You're in the right directory with the file. 
  • The file is simple Dockerfile, not Dockerfile.Dockerfile. 
  • The image is run in a container before you package.

 

Resources used:

 

Comments