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
docker image tag
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