Traffine I/O

Bahasa Indonesia

2022-06-06

Dockerfile dan Membangun Gambar Kustom

Pengenalan

Dockerfile merupakan dasar dari gambar kustom pada ekosistem Docker. Pada artikel ini, saya akan membahas secara lebih dalam tentang anatomi Dockerfile dan mengulas instruksi-instruksi umum yang digunakan untuk membuat gambar kustom.

Anatomi Dockerfile

Sebuah Dockerfile umumnya terdiri dari tiga komponen berikut:

  • Gambar dasar
    Ini adalah titik awal untuk membangun gambar kustom Anda. Anda dapat memilih dari berbagai macam gambar resmi atau buatan komunitas yang tersedia di Docker Hub.

  • Instruksi
    Ini adalah perintah yang mengubah gambar dasar menjadi gambar baru, kustom.

  • Komentar
    Baris yang diawali dengan simbol # dianggap sebagai komentar.

Instruksi-Instruksi Umum pada Dockerfile

Berikut adalah beberapa instruksi yang sering digunakan dalam Dockerfile:

FROM

Menentukan gambar dasar yang digunakan. Instruksi ini wajib ada dan harus menjadi instruksi pertama dalam Dockerfile.

Dockerfile
FROM ubuntu:18.04

RUN

Menjalankan perintah dan menghasilkan hasilnya. Instruksi RUN yang berbeda akan menghasilkan layer yang berbeda dalam gambar. Untuk mengurangi layer, gabungkan perintah menggunakan &&.

Dockerfile
RUN apt-get update && \
 apt-get install -y nginx

CMD

Menentukan perintah default yang dijalankan saat kontainer dimulai. Jika terdapat beberapa instruksi CMD, hanya yang terakhir yang berlaku.

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

ENTRYPOINT

Menentukan titik masuk untuk kontainer, sehingga dapat dijalankan sebagai executable. Ini dapat di-overwrite menggunakan flag --entrypoint saat memulai kontainer.

Dockerfile
ENTRYPOINT ["python", "app.py"]

COPY

Mengcopy file dari sistem host ke dalam gambar. Disarankan untuk menggunakan COPY daripada ADD kecuali Anda membutuhkan fitur lanjutan seperti dukungan URL atau extracting archives.

Dockerfile
COPY . /app

ADD

Menambahkan file ke dalam gambar, dengan dukungan URL dan extracting archives. Gunakan dengan bijak, dan lebih suka menggunakan COPY untuk transfer file sederhana.

Dockerfile
ADD https://example.com/file.tar.gz /app

ENV

Menentukan variabel lingkungan di dalam gambar. Mereka dapat diakses oleh proses yang berjalan di dalam kontainer.

Dockerfile
ENV APP_PORT=8080

EXPOSE

Memberitahu Docker bahwa kontainer mendengarkan pada port jaringan tertentu. Instruksi ini tidak secara langsung mem-publish port, tetapi berfungsi sebagai dokumentasi.

Dockerfile
EXPOSE 80

WORKDIR

Menentukan direktori kerja untuk instruksi selanjutnya. Jika direktori yang ditentukan tidak ada, maka akan dibuatkan direktori baru.

Dockerfile
WORKDIR /app

USER

Menentukan pengguna untuk instruksi selanjutnya. Ini berguna untuk menjalankan proses non-root di dalam kontainer.

Dockerfile
USER www-data

VOLUME

Membuat titik mount untuk penyimpanan eksternal. Instruksi ini digunakan untuk mempertahankan data yang dihasilkan oleh kontainer.

Dockerfile
VOLUME /var/lib/mysql

Membangun Gambar Kustom

Membuat gambar kustom menggunakan Dockerfile memungkinkan pengembang untuk menyederhanakan proses pengaturan lingkungan, mengkonfigurasi aplikasi, dan mendeploy perangkat lunak. Pada bab ini, saya akan membahas proses pembuatan.

Untuk membangun gambar kustom dari Dockerfile, gunakan perintah docker build diikuti dengan konteks build (biasanya direktori saat ini):

bash
$ docker build -t your-image-name:tag .

Flag -t memberikan nama dan tag opsional untuk gambar baru. Konteks build berisi Dockerfile dan file tambahan lainnya yang diperlukan selama proses pembuatan. Konteks build penting karena Docker mencari file yang dirujuk pada Dockerfile di dalam konteks build.

Proses pembuatan terdiri dari langkah-langkah berikut:

  1. Docker membaca Dockerfile dan memproses setiap instruksi secara berurutan.
  2. Setiap instruksi membuat layer baru dalam gambar. Layer di-cache untuk mempercepat proses build selanjutnya.
  3. Layer terakhir mewakili gambar kustom baru, yang dapat digunakan untuk membuat kontainer.

Sebagai contoh, pertimbangkan Dockerfile berikut untuk aplikasi Node.js sederhana:

Dockerfile
# Tentukan gambar dasar
FROM node:14

# Tentukan direktori kerja
WORKDIR /app

# Copy file package
COPY package*.json ./

# Install dependensi
RUN npm install

# Copy kode aplikasi
COPY . .

# Expose port aplikasi
EXPOSE 3000

# Jalankan aplikasi
CMD ["npm", "start"]

Ketika membangun gambar ini, Docker akan melakukan tindakan-tindakan berikut:

  1. Mengambil gambar dasar node:14 dari Docker Hub.
  2. Menentukan direktori kerja menjadi /app.
  3. Menyalin file package.json dan package-lock.json ke dalam gambar.
  4. Menjalankan npm install untuk menginstal dependensi aplikasi.
  5. Menyalin kode aplikasi yang tersisa ke dalam gambar.
  6. Mengekspos port 3000.
  7. Menentukan perintah default untuk menjalankan aplikasi dengan npm start.

Setelah gambar dibuat, Anda dapat membuat dan menjalankan kontainer menggunakan perintah docker run:

$ docker run -d -p 3000:3000 your-image-name:tag

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!