Build a Docker container image for your application

Create the image

A Docker container image is one of the best formats to distribute your application. The container provides an immutable environment, so the application runs the same way on your workstation and on any server.

We will use the simple Go application we have created in the Your first Go application post. In the main application directory open the text editor and create the Dockerfile

code Dockerfile

We will create a multi-stage build script. The advantage is that the final image is very small, as it only contains the compiled Go application, not the source code, not even the Go compiler. Enter the code

FROM golang:alpine as builder

WORKDIR /src

COPY . /src

RUN go build -o myapp cmd/myapp/*

FROM alpine:3.11.3

 WORKDIR /app

 COPY --from=builder /src/myapp /app

 ENTRYPOINT ["/app/myapp"]

Build the image

docker build -t myapp .

Check the image. myapp should be the image on the top

docker images

The output should be something like this

REPOSITORY        TAG        IMAGE ID            CREATED           SIZE
myapp             latest     267e26010d88        2 minutes ago     7.66MB

Run the image to test it.

docker run --rm -it myapp

If you want to run the image with Docker Compose create a compose file

code docker-compose.yml

Enter the code

version: '3'

services:
  myapp:
    image: myapp

Run the image in Docker Compose

docker-compose up

The output should be

Creating network “myapp_default” with the default driver
Creating myapp_myapp_1 … done Attaching to myapp_myapp_1
myapp_1 | Application config
myapp_1 | MyPackage running
myapp_myapp_1 exited with code 0

Runt the image in Docker Swarm

Initialize the Docker Swarm

docker swarm init

Run the container in the swarm

docker stack deploy -c docker-compose.yml myapp

The output should be

Creating network myapp_default
Creating service myapp_myapp

Check if the stack is running

docker stack ls

The output should be

NAME                SERVICES            ORCHESTRATOR
myapp               1                   Swarm

Check if the service is running

docker service ls

Remove the stack

docker stack rm myapp

Leave a comment

Leave a Reply