Dockerize Your First Go Application
Create the main.go file with the following content:
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
fmt.Println("Go Docker Tutorial")
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World")
})
log.Fatal(http.ListenAndServe(":8081", nil))
}
Now that we have our server, let’s set about writing our Dockerfile and constructing the container in which our newly born Go application will live.
create dockerfile with following content:
FROM golang:1.12.0-alpine3.9
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN go build -o main .
CMD ["/app/main"]
Now that we have defined everything we need for our Go application to run in our Dockerfile we can now build an image using this file. In order to do that, we’ll need to run the following command:
$ docker build -t my-go-app .
Sending build context to Docker daemon 5.12kB
Step 1/6 : FROM golang:1.12.0-alpine3.9
---> d4953956cf1e
Step 2/6 : RUN mkdir /app
---> Using cache
---> be346f9ff24f
Step 3/6 : ADD . /app
---> eb420da7413c
Step 4/6 : WORKDIR /app
---> Running in d623a88e4a00
Removing intermediate container d623a88e4a00
---> ffc439c5bec5
Step 5/6 : RUN go build -o main .
---> Running in 15805f4f7685
Removing intermediate container 15805f4f7685
---> 31828faf8ae4
Step 6/6 : CMD ["/app/main"]
---> Running in 9d54463b7e84
Removing intermediate container 9d54463b7e84
---> 3f9244a1a240
Successfully built 3f9244a1a240
Successfully tagged my-go-app:latest
We can now verify that our image exists on our machine by typing docker images:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-go-app latest 3f9244a1a240 2 minutes ago 355MB$ docker images
In order to run this newly created image, we can use the docker run command and pass in the ports we want to map to and the image we wish to run.
$ docker run -p 8080:8081 -it my-go-app
-p 8080:8081
- This exposes our application which is running on port 8081 within our container on http://localhost:8080 on our local machine.-it
- This flag specifies that we want to run this image in interactive mode with a tty for this container process.my-go-app
- This is the name of the image that we want to run in a container.
Awesome, if we open up http://localhost:8080 within our browser, we should see that our application is successfully responding with Hello, "/".
Running our Container In the Background
You’ll notice that if we ctrl-c
this within the terminal, it will kill the container. If we want to have it run permanently in the background, you can replace -it with -d
to run this container in detached mode.
In order to view the list of containers running in the background you can use docker ps which should output something like this:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
70fcc9195865 my-go-app "/app/main" 5 seconds ago Up 3 seconds 0.0.0.0:8080->8081/tcp silly_swirles
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.