A projecthez tartozó GitHub Repository itt található

Docker telepítése

Részletes leírást itt találsz.

A projectünk dockerizálása

A projectünk gyökérkönyvtárába létrehozunk egy Dockerfile nevű fájlt. Ez fogja tartalmazni az instrukciókat a Docker számára, hogy hogyan építheti meg a docker image-t.

A tartalma a fájlnak az alábbi lesz (a kommenteket nyugodtan töröld ki a fájlból):

# Elnevezzük az első base image-t buildernek
FROM golang:alpine as builder 

# Telepítünk a base image-re egy pár programot
RUN apk add --no-cache git curl make ca-certificates gcc libtool musl-dev

# Létrehozunk egy könyvtárat az alkalmazásunknak
RUN mkdir /app

# A project gyökérkönyvtárából (amiben ez a Docker fájl található), átmásolunk mindent az `app` könyvtárba
ADD . /app

# Mostantól fogva a az `app` mappát tekintjük a go-to könyvtárunknak, ahol minden parancs lefut
WORKDIR /app

# Meghívjuk a Makefile-unkat, azon belül is a `build` targetet, ami összeépíti nekünk a futtatható binaryt
RUN make build


# Egy új base image-t használunk, amiben már nem kellenek programok, csak az kell, hogy tudja futtatni a binary fájlunkat
# Ezt az image-t már nem nevezzük el, mert nem fogunk rá hivatkozni. Ez lehetne egy distroless image is, ami neked szimpatikus
FROM alpine

# A gyökérkönyvtár lesz a go-to könyvtárunk, ahol minden további parancs lefut
WORKDIR /

# Átmásoljuk az elkészült `penguin-api` nevű binary fájlunkat az előző stage-ből, ebbe a könyvtárba
COPY --from=builder /app/bin/penguin-api .

# Elindítjuk a programunkat, teret adva paraméterek átadásának
ENTRYPOINT ["./penguin-api"]

Docker image építése

Megkérjük a Dockert, hogy építse össue nekünk a Docker Image-t. Fontos, hogy abban a könyvtárban futassuk a parancsot, amiben a Dockerfile található.

A -t paraméter opcionális, mi most azért használjuk, hogy “megtaggeljük” az image-t, jelezve, hogy ez egy lokális docker image, amit csak dev környezetre szánunk, nem pedig production környezetre.

docker build -t localhost/penguin-api:dev .

Ezen a ponton a Docker összeépíti nekünk a projectet.

Docker build

A docker images paranccsal meg tudod tekinteni a gépeden lévő docker imageket.

Docker image futtatása

Az image futtatásához csak az image nevére lesz szükségünk. Az rm flag használatával megkérjük a dockert, hogy törölje a containert, amikor már nem futtatjuk. Enélkül, bárhányszor futtatsz egy containert, megmarad a gépeden, miután leállítod. Egy idő után pedig elég sok helyet tud foglalni a sok container a gépen.

docker run --rm localhost/penguin-api:dev

Kilépni a futtatásból ctrl + d -vel tudunk

Makefile módosítása

Mivel most már képesek vagyunk lokálisan építeni és futtatni docker containereket, hozzáadhatunk két új targetet a make fájlhoz.

# Docker-specific targets
local-docker-build:
	docker build -t localhost/$(APP):dev .

local-docker-run:
	docker run --rm localhost/$(APP):dev

Visszaküldés a repositoryba

Végül pedig állítsd össze a módosításaidat és commitold őket GitHubra.

git status  # Információt ad vissza a git repo aktuális állapotáról
git add .   # a stage-re helyezi a módosított/hozzáadott fájlokat
git commit -m "Dockerising our Go Service" # A stage tartalmát commitolja a lokális repositoryba
git push origin main # Felpusholja a commitodat a GitHub repositoryba, aminek a UI-on is megnézheted a tartalmát