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.
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