Blog Update
Tulisan ini merupakan update lanjutan dari tulisan sebelumnya tentang bagaimana blog ini dibuat, notes ini merupakan kumpulan dari beberapa pencapain dalam Research n Dev pengembangan pada blog ini, Well mungkin bisa disebut pembaharuan blog dengan versi v.2.0
(Rofl! hahaha).
Berikut dibawah ini merupakan beberapa daftar notes perubahanya :
Pembaharuan Dockerfile
Bagian pertama lebih tepatnya tentang pembaharuan artifactory dari container yang secara pribadi berusaha menekan besarnya ukuran dari kontainer. Dari menggunakan base image keluarga debian:*^slim
sampai proses penulisan yang dibuat secara multistage (kombinasi dari base builder alpine
dan final write images menggunakan nginx:alpine
). Dockerfile yang ditulis sebelumnya menggunakan base image yang terinspirasi dari monachus/hugo
dan memakan ukuran sekitar ~150 MB++
. Menurut dari laman dokumentasi Docker, salah satu cara terbaik menekan ukuran adalah dengan metode multistage dan mungkin kalian dapat mencari contoh untuk proses contoh penulisan multistage seperti dari blog.callr.tech
, Hugo and Nginx multi-stage build Dockerfile
.
Setelah mengimplementasikan multistage dan benar ukuranya turun drastis menjadi sekitar ~15MB
(CMIIW lupa), namun yang menjadi sisi agak idealisme sendiri adalah 2 buah base image tersebut masih asli bawaan dari official dan tidak bisa melakukan tricky things!. Demi somethings tersebut, penulis memutuskan untuk tidak menggunakan multistage (bisa, namun mager kustomisasinya) dengan cara melakukan minify di tingkat file, direktori dan penambahan file .dockerignore
agar file yang mungkin bersifat private dan bloat tidak ikut ke dalam proses build kontainernya. Dibawah ini merupakan isi file .dockerignore
.git
.gitignore
LICENSE
VERSION
README.md
Changelog.md
Makefile
docker-compose.yml
docs
public/
Kemudian untuk Dockerfile
FROM alpine:3.12.1
# Configuration variables
ENV HUGO_VERSION 0.78.2
ENV SITE_DIR '/usr/share/blog'
# Download and install hugo
RUN wget -O - https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.tar.gz | tar -xz -C /tmp \
&& mkdir -p /usr/local/sbin \
&& mv /tmp/hugo /usr/local/sbin/hugo \
&& rm -rf /tmp/hugo_${HUGO_VERSION}_Linux-64bit.tar.gz \
&& rm -rf /tmp/LICENSE.md \
&& rm -rf /tmp/README.md
WORKDIR ${SITE_DIR}
# Expose default hugo port
EXPOSE 1313
# Automatically build site
ADD site/ ${SITE_DIR}
RUN hugo -d /usr/share/nginx/html/ --minify
# By default, serve site
ENV HUGO_BASE_URL http://localhost:1313
CMD hugo server -b ${HUGO_BASE_URL} --bind=0.0.0.0 --appendPort=false --disableFastRender --disableKinds=sitemap --disableLiveReload --minify
# A place where I write tricky and nothingtodo here!
---
Dan berikut ukuran dari kontainer setelah di build dengan ukuran akhir 19.07MB
.
Pembaharuan proses CI/CD
Salah satu hal yang berpengaruh ketika ukuran artifactory kontainer yang besar adalah kemungkinan lama juga proses building kontainer tersebut. Dari pembahasan bagian pertama diatas, menurut penulis dengan penerapan menggunakan base image alpine
dan pengaplikasian .dockerignore
sudah cukup. Bagian kedua ini adalah tweaking pada CI/CD dengan pengaplikasian fitur caching pada GitlabCI
yang katanya dapat mempercepat proses build karena memanfaatkan sistem cache
lapisan kontainer yang sudah dibuat sebelumnya.
Penambahan tweaking pada tahap deploy dalam kasus ini menyesuaikan dari perubahan sisi akses ssh
ke Virtual Private Server dimana sebelum melakukan eksekusi deployment script
, mengerjakan instalasi ssh client dan mendaftarkan kunci privat milik VPS. Berikut dibawah ini contoh file .gitlab-ci.yaml
stages:
- build-image-push
- deploy-to-server
docker build:
stage: build-image-push
only:
- master
script:
- echo "$REGISTRY_PASSWORD" | docker login -u "$REGISTRY_USERNAME" --password-stdin $CI_REGISTRY
- docker pull $DOCKER_TAG_CACHE || true
## Add Cache
- docker build --cache-from $DOCKER_TAG_CACHE -f Dockerfile-alp -t $DOCKER_TAG .
- docker push $DOCKER_TAG && docker image rm $DOCKER_TAG_CACHE
deploy:
stage: deploy-to-server
image: ubuntu
## Add sec's things
before_script:
- 'which ssh-agent || ( apt-get update -qq && apt-get install -qq openssh-client sshpass -y )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIV_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
script:
- ./deploy.sh
Pembaharuan runtime pada Docker Engine
Tahap terakhir salah satu yang menjadi concern penulis ngulik saat ini adalah tentang runtime pada dunia kontainer dan mungkin akan bersambung ke tulisan-tulisan selanjutnya. Runtime yang digunakan untuk menjalankan kontainer blog ini adalah gVisor
dan so far menambah kinerja konsumsi ram sekitar ~100MB
pada VPS 🤣🤣🤣🤣.
$ cat inspect.json | jq | grep runsc
"Runtime": "runsc",
…
Thanks!