You can make a own repository from this template and then work in your own repository.
How? check here:
creating-a-repository-from-a-template
To experiment with different Webprojects it is good to go with templates.
And use a Webserver, beacause of CORS is disable loading file URLs.
In this Project there are 2 main directories.
And on the root directory 2 Dockerfiles.
In this directory is the Go Webserver and the Podman / Docker Files.
In this directory are all the Websites Projects in its own subdirectories i.e. web-project1.
see in Dockerfile - later in this description we use this Dockerimage first
// copy all web-projects in web-projects
COPY web-projects/ ./web-projects/
// build the go application webserver-in-go-on-podman
RUN CGO_ENABLED=0 GOOS=linux go build
// important: to run the image NOT as a root user
USER $USER:$USER
// run the go application webserver-in-go-on-podman
CMD [ "./webserver-in-go-on-podman" ]
see in Dockerfile.multistage
// in the go image
FROM golang:latest AS build-stage
// build the go application webserver-in-go-on-podman
RUN CGO_ENABLED=0 GOOS=linux go build
// in the base-debian11 image
// copy the go application webserver-in-go-on-podman
COPY --from=build-stage /app/webserver-in-go-on-podman /app/webserver-in-go-on-podman
// copy all web-projects in web-projects
COPY web-projects/ ./web-projects/
// expose port 8080
EXPOSE 8080
// important: to run the image NOT as a root user
USER nonroot:nonroot
// run the go application webserver-in-go-on-podman
CMD [ "./webserver-in-go-on-podman" ]
The multistage Dockerfile is at the end the smaller image / container because of the small run base image base-debian11.
local install first Podman Desktop
from https://podman-desktop.io/
then start it.
In the main GUI, there is a message no podman is running / installed
Here you can install Podman with one Click.
Now Podman and Podman Desktop are installed.
Great - lets go ahead.
if you cloned this Github Repo
in Podman Desktop open Images
then Build an Image ...
select for 'Containerfile path' the File Dockerfile
let 'Build context directory' to subdirectory Webserver-in-Go-on-Podman
change Image Name to (all lowercase) webserver-in-go-on-podman
press Build
one minute later ...
on a Error a new <none> Image is created. Delete it.
on PASS a new docker.io/library/webserver-in-go-on-podman Image is created.
press Done
in Podman Desktop open Images
on the new Image docker.io/library/webserver-in-go-on-podman press the play icon.
in the upper Basic Tab
change Container Name to (all lowercase) webserver-in-go-on-podman
for now you do not will experiment with changes is your LOCAL web-projects directory
on Volumes do not define someting (remark for developing see create and run a development container)
let Port mapping on 8080
Environments variales: no additional Variables needed.
press Start Container
2 seconds later ...
on PASS a new running webserver-in-go-on-podman Container in Containers is created.
why is this new container already running ? = because there is a stop icon displayed.
on this new running Container webserver-in-go-on-podman press the tree dots icon / menu
then Open Browser
now you can choose:
press Yes open the link in your default browser.
press Copy link copies the link in the clipboard, the you have to open your favorite browser and copy (Ctrl-C) the link in the URL.
in the browser there are the files
current not optimal because all files (webserver and projects) are there:
change to directory web-projects, here you will finde README.md and web-project1 directory
change to directory web-project1
then the index.html file will be rendered
the URL in the browser is then http://localhost:8080/web-projects/web-project1/
on running Container webserver-in-go-on-podman press the tree dots icon / menu
then Open Terminal
in the terminal enter bash to have a bash shell
the bash stell has command history and tabbing to help enter commands
pwd<Enter> // or cd /app<Enter>
/app
ls -al<Enter>
web-projects
cd web-projects<Enter>
ls -al<Enter>
web-project1
cd web-project1<Enter>
ls -al<Enter>
images
index.html
scripts
styles
ls -al *<Enter>
all files and all subdirectories are here
exit<Enter>
ends bash
exit<Enter>
ends terminal
in Podman Desktop open Images
on the new Image docker.io/library/webserver-in-go-on-podman press the play icon.
Set Container Name to (all lowercase) webserver-in-go-on-podman-develop
yes now you would experiment with changes is your LOCAL web-projects directory
on Volumes on Path on the host select the web-projects directory and on Path inside the container select /app/web-projects/ (see Dockerfile)
let Port mapping on 8080
Environments variales: no additional Variables needed.
press Start Container
2 seconds later ...
on PASS a new running webserver-in-go-on-podman-develop Container in Containers is created.
why is this new container already running ? = because there is a stop icon displayed.
Open Browser and open Terminal is same as described above.
But now you change the files in web-projects local and there are mapped to the docker image, because of the Volume mapping.
try it, for example:
look at the current running webpage the
title shows
HTML5 Template Page
because of
<title>HTML5 Template Page</title> in index.htmlchange it to e.g.
<title>my HTML5 Template Page</title>reload the page in the browser (reload or Control & Reload to really reload)
be careful, the browser page cache doesn't always load everything from scratch
changed title is shown
my HTML5 Template Page
great, your first change works
Robert Halter
to try this smaller mulitstage Dockerfile stop other running Containers
in this mulitstage Dockerfile, the difference is as follows
in the first stage build-stage
FROM golang:latest AS build-stage
the webserver is build with go
then in the next stage release-stage
FROM gcr.io/distroless/base-debian11 AS release-stage
all the webprojects are copied in
and the webserver runs then on the smaller Baseimage base-debian11
Images / Build an Image
select Dockerfile.multistage
change Image Name to (all lowercase) webserver-in-go-on-podman-small
on a Error a new <none> Image is created. Delete it.
on PASS a new smaller (30 MB) docker.io/library/webserver-in-go-on-podman-small Image is created from release-stage
and a bigger (940 MB) Image from the build-stage.
press Done
wait some seconds until all the images are displayed.
in Podman Desktop open Images
on the new Image docker.io/library/webserver-in-go-on-podman-small press the play icon.
in the upper Basic Tab
change Container Name to (all lowercase) webserver-in-go-on-podman-small
for now you do not will experiment with changes is your LOCAL web-projects directory
on Volumes do not define someting (remark for developing see create and run a development container)
let Port mapping on 8080
Environments variales: no additional Variables needed.
press Start Container
2 seconds later ...
on PASS a new running webserver-in-go-on-podman-small Container in Containers is created.
why is this new container already running ? = because there is a stop icon displayed.
in the browser on http://localhost:8080/
change to / select web-projects/
then change to / select web-project1/
cool, the webpage of web-project1 is displayed / rendered
in Podman Desktop open Images
on the new Image docker.io/library/webserver-in-go-on-podman-small press the play icon.
Set Container Name to (all lowercase) webserver-in-go-on-podman-small-develop
yes now you would experiment with changes is your LOCAL web-projects directory
on Volumes on Path on the host select the web-projects directory and on Path inside the container select /app/web-projects/ (see Dockerfile)
let Port mapping on 8080
Environments variales: no additional Variables needed.
press Start Container
2 seconds later ...
on PASS a new running webserver-in-go-on-podman-small-develop Container in Containers is created.
why is this new container already running ? = because there is a stop icon displayed.
Open Browser and open Terminal is same as described above.
But now you change the files in web-projects local and there are mapped to the docker image, because of the Volume mapping.
try it, for example:
look at the current running webpage the
title shows
HTML5 Template Page
because of
<title>HTML5 Template Page</title> in index.htmlchange it to e.g.
<title>my small HTML5 Template Page</title>reload the page in the browser (reload or Control & Reload to really reload)
be careful, the browser page cache doesn't always load everything from scratch
changed title is shown
my small HTML5 Template Page
great, your second! change works too
Robert Halter