Docker Image

 

Docker Image

Apa itu docker image

Docker adalah aplikasi open source untuk menyatukan file-file yang dibutuhkan sebuah software sehingga menjadi menjadi satu kesatuan yang lengkap dab berfungsi. Data pengaturan dan file pendukung disebut sebagai image. Selanjutnya kumpulan image digabung dalam satu wadah yang disebut Container.

Docker Image adalah sebuah kumpulan root file system dan execution parameter atau command yang digunakan dalam container runtime. Terdiri dari app binaries, dependencies, metada data dan minimum OS

·         File – App binaries dan dependencies yang telah kita develop

·         Metadata – Informasi detail mengenai image dan bagaimana cara menjalankanya

·         Minimum OS – Hanya mengandung binaries OS yang dibutuhkan saja

Image Repository – Docker Hub

Official Docker Image Repository, Docker Hub adalah salah satu cloud service untuk mencari, mendownload dan mengupload docker image. Pertama kita akan membuat akun docker hub https://hub.docker.com/ agar bisa mengupload image ke docker hub, diperlukan login di terminal/command prompt, Untuk login pada docker kita cukup ketikan sintak di bawah ini pada terminal kita

docker login


Bagaimana Mencari Docker Image Yang Baik?

1.       Gunakan menu explorer

Kunjungi https://hub.docker.com/search?q=&type=image dancari image yang kita inginkan, misalkan nginx



2.       Official image first

Gunakan image yang official, lalu Lihat jumlah download dan star, semakin besar semakin bagus dan juga Lihat latest modified, semakin baru semakin bagus

3.       Image tag

Pilihlah image tag yang sesuai pada Best practice, untuk development gunakan latest tag, untuk production gunakan spesifik tag

4.       Pilih base image OS

Pilih base image OS sesuai dengan kebutuhan, jika memungkinkan, pilihlah image OS yang paling kecil, misalkan alpine

 

Praktikum

1.       Download image

Cukup dengan menjalankan command pada terminal

 

docker pull <image_name>

 

2.       Melihat Image yang ada di local Komputer

Cukup dengan menjalankan command pada terminal

docker image ls



3.       Membuat Tag

docker image tag <image_name> <new_image>:<tag_name>

docker image tag : docker image tag nginx username/nginx:latest

  

4.       Push Image

docker image push <image_name>:<tag_name>

docker image push username/nginx:latest

 

Apa itu Dockerfile dan bagaimana code nya?

Dockerfile adalah file yang perlu kita buat dan berisi mengenai code-code atau command yang perlu dijalankan supaya bisa mem-build dan me-run image

1.       FROM

Ini adalah base image OS, Bisa menggunakan speisifk tag : https://hub.docker.com/_/nginx

2.       RUN

Setiap menjalankan command line, awalai dengan RUN, RUN adalah arbitrary shell command

3.       EXPOSE dan ENV

EXPOSE digunakan untuk open port pada virtual network, sehingga bisa di baca oleh Host OS. ENV digunakan untuk men-setting environtment variable

4.       CMD

Command yang akan dijalankan ketika menjalankan docker container

 

Bagaimana Cara Membuat Docker File

1.       Kita akan membuat custome nginx image melalui Dockerfile

2.       Buat folder baru dengan nama custom-nginx

3.       Create docker file – custom-nginx/Dockerfile

4.       Ketik code dibawah ini

 

# NOTE: this example is taken from the default Dockerfile for the official nginx Docker Hub Repo

# https://hub.docker.com/_/nginx/

# NOTE: This file is slightly different than the video, because nginx versions have been updated 

#       to match the latest standards from docker hub... but it's doing the same thing as the video

#       describes

FROM debian:stretch-slim

# all images must have a FROM

# usually from a minimal Linux distribution like debian or (even better) alpine

# if you truly want to start with an empty container, use FROM scratch

 

ENV NGINX_VERSION 1.13.6-1~stretch

ENV NJS_VERSION   1.13.6.0.1.14-1~stretch

# optional environment variable that's used in later lines and set as envvar when container is running

 

RUN apt-get update \

    && apt-get install --no-install-recommends --no-install-suggests -y gnupg1 \

    && \

    NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62; \

    found=''\

    for server in \

        ha.pool.sks-keyservers.net \

        hkp://keyserver.ubuntu.com:80 \

        hkp://p80.pool.sks-keyservers.net:80 \

        pgp.mit.edu \

    ; do \

        echo "Fetching GPG key $NGINX_GPGKEY from $server"\

        apt-key adv --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$NGINX_GPGKEY" && found=yes && break; \

    done; \

    test -z "$found" && echo >&2 "error: failed to fetch GPG key $NGINX_GPGKEY" && exit 1; \

    apt-get remove --purge -y gnupg1 && apt-get -y --purge autoremove && rm -rf /var/lib/apt/lists/* \

    && echo "deb http://nginx.org/packages/mainline/debian/ stretch nginx" >> /etc/apt/sources.list \

    && apt-get update \

    && apt-get install --no-install-recommends --no-install-suggests -y \

                        nginx=${NGINX_VERSION} \

                        nginx-module-xslt=${NGINX_VERSION} \

                        nginx-module-geoip=${NGINX_VERSION} \

                        nginx-module-image-filter=${NGINX_VERSION} \

                        nginx-module-njs=${NJS_VERSION} \

                        gettext-base \

    && rm -rf /var/lib/apt/lists/*

# optional commands to run at shell inside container at build time

# this one adds package repo for nginx from nginx.org and installs it

 

RUN ln -sf /dev/stdout /var/log/nginx/access.log \

    && ln -sf /dev/stderr /var/log/nginx/error.log

# forward request and error logs to docker log collector

 

EXPOSE 80 443

# expose these ports on the docker virtual network

# you still need to use -p or -P to open/forward these ports on host

 

CMD ["nginx""-g""daemon off;"]

# required: run this command when container is launched

# only one CMD allowed, so if there are multiple, last one wins

 

5.       Sekarang jalankan command untuk mem-build custom nginx image

docker image build -t custom-nginx .


6.       Code tersebut akan membuat image dengan nama custom-nginx:latest

berdasarakan pada file custom-nginx/Dockerfile

7.       Kita juga bisa memberikan tag dengan menjalankan command docker

Docker image build -t custom-nginx:0.0.1 .


8.      Secara default docker akan membaca file Dockerfile, kita bisa membuat custom docker file name, misalkan kita membuat dockerfile dengan nama custom-nginx/DockerfileCustom Untuk mem-build nya gunakan command ini:

docker image build –f DockerfileCustom -t custom-nginx

9.       Untuk pertama kali build, kalua image FROM nya belum ada di local maka akan mendownload dulu dari Docker Hub

10.   Docker akan meng-cache FROM base image command-command yang dijalankan, sehingga ketika melakukan build selanjutnya akan menjadi lebih cepat.Untuk melihat image yang sudah di build gunakan command docker image ls


Membuat Web App Image

1.       Kita akan membuat dan menjalankan web app dengan menggunakan docker

2.       Buat folder baru dengan nama nginx-web-app

3.       Create file Dockerfile dan Index.html , disini saya menambahkan stylenya juga

FROM nginx:latest

 

WORKDIR /usr/share/nginx/html

 

COPY index.html index.html

COPY main.css main.css

Docker File

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />

        <meta http-equiv="X-UA-Compatible" content="IE=edge" />

        <title>Hello World</title>

        <meta name="viewport" content="width=device-width, initial-scale=1" />

        <link rel="stylesheet" type="text/css" media="screen" href="main.css" />

    </head>

    <body>

        <div class="parent">

            <div class="child">

                <div>

                    <code>Docker Container Run</code><br />

                    Hello World

                </div>

            </div>

 

            <div class="child">This is web app in docker</div>

        </div>

    </body>

</html>

       Index.html

 

4.       Build image: docker image build -t nginx-web-app .


5.       Lihat image yang barusan dibuild: docker image ls


6.       Run container: docker container run -p 80:80 --rm nginx-web-app



7.       Pada browser buka http://localhost atau http://127.0.0.1


8.       Halaman tersebut akan berisi file index.html

9.       Buat image tag untuk persiapan push: docker image tag nginx-webapp:latest moehamadmoebarok/nginx-web-app:latest

10.   Push image ke dokcer hub: docker image push nginx-web-app:latest

 

 

Dockerize Lumen App

Kita akan membuat dan menjalankan lume app dengan menggunakan docker

1.       Buat project baru:

composer create-project --prefer-dist laravel/lumen lumen-app

2.       Create file Dockerfile

FROM php:7.4.16-fpm

 

RUN apt-get update -y && apt-get-install -y libmcrypt-dev libonig-dev openssl zip unzip git

RUN docker-php-ext-install pdo pdo_mysql_mbstring

 

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

 

WORKDIR /app

 

COPY . /app

 

RUN composer install

 

CMD ["php""-S""0.0.0.0:8000""-t""public"]

EXPOSE 8000

 

 

3.       Build image:

docker image build -t lumen-app .


4.       Lihat image yang barusan dibuild: docker image ls


5.       Run container:

docker container run --rm -p 8000:8000 lumenapp



6.       Pada browser buka http://localhost:8000/



7.       Menyiapkan tagging untuk push:

docker image tag lumen-app:latest <username>/lumen-app:latest

 

8.       Push image ke dokcer hub:

docker image push <username>/lumen-app:latest

 

Next Post Previous Post
No Comment
Add Comment
comment url