Implikasi Keamanan dan Mitigasi Risiko
Meskipun build arguments menawarkan fleksibilitas, mereka juga memperkenalkan potensi risiko keamanan yang perlu Anda pahami untuk menjaga image Docker tetap aman.
Vektor kebocoran argumen
Build arguments tidak selangka yang Anda kira. Nilai build args dapat bocor melalui beberapa vektor yang sering diabaikan pengembang. Pertama, riwayat image Docker mengekspos semua build args Anda, artinya siapa pun yang memiliki akses ke image Anda dapat menjalankan docker history untuk melihat nilai yang digunakan saat build, termasuk informasi sensitif seperti API key atau token.
docker history flaskapp:dev

Gambar 4 - Riwayat Docker
Layer perantara juga dapat membocorkan build arguments. Meskipun Anda menggunakan multi-stage build dan tidak menyalin layer yang berisi informasi sensitif, nilai build arg tetap ada di cache layer pada mesin build. Ini berarti siapa pun yang memiliki akses ke Docker daemon di server build Anda berpotensi mengekstrak informasi tersebut.
Log CI/CD juga menimbulkan risiko signifikan. Sebagian besar sistem CI/CD mencatat seluruh perintah build, termasuk build args yang dilewatkan di command line.
Sebagai contoh, seluruh perintah ini, termasuk API_KEY, akan terlihat di log CI/CD:
docker build --build-arg API_KEY=secret123 -t myapp:latest .
Log ini sering dapat diakses oleh lebih banyak pengembang atau bahkan disimpan di sistem pihak ketiga, yang meningkatkan permukaan eksposur nilai sensitif.
Alternatif yang aman
Untuk informasi sensitif, Anda sebaiknya menggunakan fitur secrets dari Docker BuildKit alih-alih build args. BuildKit memungkinkan Anda me-mount secrets saat proses build tanpa menyimpannya dalam image final atau riwayat.
Berikut contoh Dockerfile yang menggunakan secrets Docker BuildKit:
FROM python:3.13-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
# Use secret mount instead of build arg
RUN --mount=type=secret,id=api_key \
cat /run/secrets/api_key > api_key.txt
EXPOSE 5000
CMD ["python", "app.py"]
Untuk membangun image ini dengan secret, pertama buat file api_key.txt:
echo "my-secret-api-key" > api_key.txt
Lalu bangun image dengan secret tersebut:
DOCKER_BUILDKIT=1 docker build \
--secret id=api_key,src=api_key.txt \
-t flaskapp:secure .

Gambar 5 - Membangun image dengan BuildKit secrets
Untuk konfigurasi yang perlu tersedia saat runtime, environment variable tetap menjadi pendekatan yang disukai. Variabel ini dapat diatur saat menjalankan container tanpa dimasukkan ke dalam image:
# Set environment variables at runtime
docker run -e API_KEY=secret123 -p 5000:5000 flaskapp:latest
Untuk menangani konfigurasi sensitif secara aman di produksi, pertimbangkan menggunakan platform orkestrasi container seperti Kubernetes, yang menyediakan metode aman seperti Secrets untuk mengelola informasi sensitif. Docker Swarm juga menawarkan kemampuan serupa dengan manajemen secrets.
> Docker bukan satu-satunya platform containerization. Baca tentang Podman untuk mengetahui alat mana yang lebih sesuai bagi Anda.
Ingat, aturan praktisnya: gunakan build args untuk konfigurasi saat build yang tidak sensitif, gunakan BuildKit secrets untuk kebutuhan sensitif saat build, dan gunakan environment variable atau secrets pada platform orkestrasi untuk konfigurasi runtime.
Integrasi dengan Ekosistem Container
Setelah memahami dasarnya, mari jelajahi cara memanfaatkan build arguments dalam ekosistem Docker yang lebih luas dan alat build modern.
Docker Compose
Docker Compose memudahkan pendefinisian dan pembagian build arguments di aplikasi multi-container Anda.
Jika Anda ingin mengikutinya, berikut struktur proyek lengkap untuk dua layanan Flask sederhana:
flask-project/
├── docker-compose.yml # Main compose configuration
├── .env # Environment variables for compose
├── web/
│ ├── Dockerfile # Web service Dockerfile
│ ├── app.py # Flask application
│ └── requirements.txt # Python dependencies
├── api/
│ ├── Dockerfile # API service Dockerfile
│ ├── app.py # API Flask application
│ └── requirements.txt # API dependencies
Saya akan membahas cepat isi file satu per satu:
web/app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
return render_template("index.html", title="Flask Web App")
@app.route("/about")
def about():
return "About page - Web Service"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
web/requirements.txt
flask==3.1.0
web/Dockerfile
# Web service Dockerfile
ARG PYTHON_VERSION=3.13
FROM python:${PYTHON_VERSION}-slim
# Redeclare the build arg to use it after FROM
ARG PYTHON_VERSION
ARG ENVIRONMENT=production
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV FLASK_ENV=${ENVIRONMENT}
WORKDIR /app
# Copy and install requirements
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY . .
# Create a simple template folder and file if not exists
RUN mkdir -p templates && \
echo "<html><body><h1>Hello from Web Service</h1><p>Python version: ${PYTHON_VERSION}</p><p>Environment: ${ENVIRONMENT}</p></body></html>" > templates/index.html
EXPOSE 5000
CMD ["python", "app.py"]
api/app.py
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/api/health")
def health():
return jsonify({"status": "healthy"})
@app.route("/api/data")
def get_data():
return jsonify(
{"message": "Hello from the API service", "items": ["item1", "item2", "item3"]}
)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, debug=True)
api/requirements.txt
flask==3.1.0
api/Dockerfile
ARG PYTHON_VERSION=3.13
FROM python:${PYTHON_VERSION}-slim
# Redeclare the build arg to use it after FROM
ARG PYTHON_VERSION
ARG ENVIRONMENT=production
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV FLASK_ENV=${ENVIRONMENT}
WORKDIR /app
# Copy and install requirements
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY . .
# Add metadata label based on build args
LABEL python.version="${PYTHON_VERSION}" \
app.environment="${ENVIRONMENT}"
EXPOSE 8000
CMD ["python", "app.py"]
.env
PYTHON_VERSION=3.10
ENVIRONMENT=development
docker-compose.yml
services:
web:
build:
context: ./web
dockerfile: Dockerfile
args:
PYTHON_VERSION: ${PYTHON_VERSION:-3.13}
ENVIRONMENT: ${ENVIRONMENT:-development}
ports:
- "5000:5000"
depends_on:
- api
api:
build:
context: ./api
dockerfile: Dockerfile
args:
PYTHON_VERSION: ${PYTHON_VERSION:-3.13}
ENVIRONMENT: ${ENVIRONMENT:-production}
ports:
- "8000:8000"
Intinya, ini adalah cara yang sangat sederhana untuk menjalankan dua aplikasi di lingkungan terisolasi, keduanya secara bersamaan, keduanya dengan serangkaian build args tertentu.
Anda dapat menggunakan perintah ini untuk menjalankan setup multi-container:
docker compose up --build

Gambar 6 - Build args dengan Docker Compose
Setelah beberapa detik, Anda akan melihat kedua layanan berjalan:

Gambar 7 - Build args dengan Docker Compose (2)
Cukup verbose untuk aplikasi sesederhana dua ini, tetapi inti pesannya jelas—build arguments ditetapkan di file compose dan direferensikan di Dockerfile masing-masing.
Sebagai catatan, Anda juga dapat meneruskan nilai variabel dari environment Anda ke build args, yang berguna untuk pipeline CI/CD:
services:
web:
build:
context: .
args:
- PYTHON_VERSION=${PYTHON_VERSION:-3.10}
Dan untuk menimpa nilai ini saat menjalankan docker-compose, Anda dapat menggunakan environment variable:
PYTHON_VERSION=3.10 docker-compose up --build
Pendekatan ini memungkinkan Anda mempertahankan build yang konsisten di seluruh tim sambil tetap menawarkan fleksibilitas saat diperlukan.
Fitur BuildKit
BuildKit, mesin build modern Docker, meningkatkan proses build Anda dengan fitur yang membuat penggunaan build args semakin kuat. Saat Anda mengaktifkan BuildKit (dengan menyetel DOCKER_BUILDKIT=1), Anda membuka sejumlah kemampuan baru.
Inline cache meningkatkan kinerja build dengan memanfaatkan cache build dari image jarak jauh. Anda dapat menentukan image sumber untuk digunakan sebagai cache dengan flag --cache-from, dan BuildKit akan secara cerdas menggunakan layer image tersebut:
DOCKER_BUILDKIT=1 docker build \
--build-arg PYTHON_VERSION=3.10 \
--cache-from flaskapp:dev \
-t flaskapp:latest .
Fitur BuildKit berharga lainnya adalah deterministic outputs, yang memastikan build Anda dapat direproduksi. Ini krusial saat Anda menginginkan image yang persis sama terlepas dari kapan atau di mana dibuat:
# Build with deterministic output
DOCKER_BUILDKIT=1 docker build \
--build-arg PYTHON_VERSION=3.10 \
--build-arg BUILD_DATE=2025-05-01 \
--output type=docker,name=flaskapp:stable \
.
Redaksi secret pada log BuildKit melindungi informasi sensitif selama build.
Tidak seperti build args biasa, yang muncul di log build, BuildKit secara otomatis menyembunyikan nilai secrets:
# Create a file with the API key
echo "my-api-key-value" > ./api-key.txt
# Build with secret (value won't appear in logs)
DOCKER_BUILDKIT=1 docker build \
--secret id=api_key,src=./api-key.txt \
-t flaskapp:secure .
Di Dockerfile Anda, secret ini diakses dengan:
RUN --mount=type=secret,id=api_key \
cat /run/secrets/api_key > /app/config/api_key.txt
Fitur-fitur BuildKit ini bekerja bersama build args untuk menciptakan sistem build yang lebih aman, efisien, dan dapat direproduksi yang dapat beradaptasi dengan hampir semua alur kerja containerization.
Praktik Terbaik untuk Adopsi di Perusahaan
Menerapkan Docker build arguments di tim besar memerlukan pendekatan yang terstandarisasi, setidaknya jika Anda ingin meminimalkan kebingungan dan memaksimalkan manfaat keamanan serta kinerja.
Saat mengadopsi build args di lingkungan perusahaan, mulailah dengan validasi argumen yang tepat.
Selalu sediakan nilai default yang masuk akal untuk setiap build argument agar build tidak gagal secara tak terduga ketika argumen tidak diberikan. Anda juga sebaiknya menambahkan pemeriksaan validasi di Dockerfile untuk memastikan build args kritis memenuhi kebutuhan Anda.
Berikut contoh yang memvalidasi versi Python:
ARG PYTHON_VERSION=3.9
# Validate Python version
RUN if [[ ! "$PYTHON_VERSION" =~ ^3\.[0-9]+$ ]]; then \
echo "Invalid Python version: ${PYTHON_VERSION}. Must be 3.x"; \
exit 1; \
fi
Optimalisasi caching layer sangat penting untuk mengurangi waktu build di pipeline CI/CD.
Urutkan instruksi Dockerfile untuk memaksimalkan cache hit dengan menempatkan konten yang jarang berubah (seperti instalasi dependensi) sebelum konten yang sering berubah (seperti kode aplikasi).
Saat menggunakan build args yang mungkin sering berubah, letakkan setelah operasi yang stabil untuk menghindari invalidasi seluruh cache:
FROM python:3.13-slim
WORKDIR /app
# Dependencies change less frequently - good cache utilization
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Build args that might change often come AFTER stable operations
ARG BUILD_NUMBER
ARG COMMIT_SHA
# Now these args won't invalidate the dependency cache
Manajemen metadata melalui build args meningkatkan keterlacakan dan kepatuhan. Gunakan build args untuk menyuntikkan metadata saat build sebagai label:
ARG BUILD_DATE
ARG VERSION
ARG COMMIT_SHA
ARG BUILD_URL
LABEL org.opencontainers.image.created="${BUILD_DATE}" Can you please provide me with access to this document?
org.opencontainers.image.version="${VERSION}" \
org.opencontainers.image.revision="${COMMIT_SHA}" \
org.opencontainers.image.url="${BUILD_URL}"
Label standar ini mengikuti spesifikasi Open Container Initiative (OCI), yang berarti image Anda akan kompatibel dengan berbagai alat manajemen container.
Dokumentasi sering diabaikan, tetapi sangat penting untuk adopsi di perusahaan.
Buat bagian README yang jelas yang mendokumentasikan semua build args yang tersedia, tujuannya, nilai default, dan contoh penggunaan. Sertakan argumen mana yang wajib dan opsional, serta dokumentasikan interaksi antarargumen. Pertimbangkan juga menambahkan informasi ini ke file konfigurasi pipeline CI/CD sebagai komentar agar pengembang memahami nilai apa yang perlu mereka sediakan:
# Example documented CI configuration
build_job:
script:
# BUILD_NUMBER: Unique identifier for this build (required)
# ENVIRONMENT: Target deployment environment [dev|staging|prod] (required)
# PYTHON_VERSION: Python version to use (optional, default: 3.9)
- docker build
--build-arg BUILD_NUMBER=${CI_PIPELINE_ID}
--build-arg ENVIRONMENT=${DEPLOY_ENV}
--build-arg PYTHON_VERSION=${PYTHON_VERSION:-3.9}
-t myapp:${CI_PIPELINE_ID} .
Untuk adopsi kelas perusahaan yang sesungguhnya, pertimbangkan menerapkan skema build argument yang dapat di-versi dan divalidasi. Pendekatan ini memungkinkan Anda mengembangkan konfigurasi build seiring waktu sambil mempertahankan kompatibilitas mundur.
Analisis Perbandingan: Build Args vs. Environment Variables
Jika Anda ingin membuat image Docker yang aman dan fleksibel serta mengikuti praktik terbaik, Anda harus memahami kapan menggunakan build arguments dan kapan menggunakan environment variables.
Berikut tabel referensi yang dapat Anda lihat kapan saja:
|
Fitur |
Build arguments |
Environment variables |
|
Ketersediaan |
Hanya tersedia saat membangun image |
Tersedia saat build dan saat container berjalan |
|
Persistensi |
Tidak dipertahankan dalam image final (kecuali secara eksplisit diubah menjadi |
Dipertahankan dalam image dan tersedia untuk container yang berjalan |
|
Keamanan |
Terlihat di riwayat image dengan docker history |
Tidak terlihat di riwayat image namun dapat diakses oleh proses di dalam container |
|
Penggunaan |
Ideal untuk konfigurasi saat build seperti versi, path build, flag compiler |
Ideal untuk konfigurasi runtime seperti connection string, feature flag, level log |
|
Deklarasi |
Didefinisikan dengan instruksi |
Didefinisikan dengan instruksi |
|
Nilai default |
Dapat memberi nilai default: |
Dapat memberi nilai default: |
|
Cakupan |
Dicakup per tahap build, harus dideklarasikan ulang setelah setiap |
Tersedia di semua tahap build dan diwariskan oleh child image |
|
Metode override |
|
|
Perbedaan utama terletak pada waktu dan tujuan penggunaannya. Build args mengonfigurasi proses build itu sendiri, sedangkan environment variables mengonfigurasi aplikasi yang berjalan. Misalnya, Anda akan menggunakan build arg untuk memilih base image yang digunakan (ARG PYTHON_VERSION=3.10), namun menggunakan environment variable untuk memberi tahu aplikasi port mana yang harus didengarkan (ENV PORT=8080).
Dari sudut pandang keamanan, build args menimbulkan risiko lebih tinggi untuk informasi sensitif karena tetap ada di riwayat image.
Pertimbangkan alur berikut untuk menangani berbagai jenis konfigurasi:
# Build-time configuration (non-sensitive)
ARG PYTHON_VERSION=3.13
FROM python:${PYTHON_VERSION}-slim
# Build-time secrets (use BuildKit secrets)
RUN --mount=type=secret,id=build_key \
cat /run/secrets/build_key > /tmp/key && \
# Use the secret for build operations
rm /tmp/key
# Runtime configuration (non-sensitive)
ENV LOG_LEVEL=info
# Runtime secrets (should be injected at runtime, not here)
# This would be provided at runtime with:
# docker run -e API_KEY=secret123 myimage
Dalam praktiknya, pola umum adalah mengonversi build args tertentu menjadi environment variables saat dibutuhkan pada runtime:
ARG APP_VERSION=1.0.0
# Make the version available at runtime
ENV APP_VERSION=${APP_VERSION}
Untuk aplikasi perusahaan, pemisahan ini memungkinkan tim berbeda mengelola aspek berbeda dari siklus hidup aplikasi. Tim DevOps dapat memodifikasi build args untuk pembuatan image, sementara operator dapat menyesuaikan environment variable saat deployment tanpa membangun ulang image.
Merangkum Docker Build Args
Docker build args bukan sekadar fitur teknis lain — ini adalah alat andalan Anda untuk membuat image yang bekerja konsisten di seluruh tim dan lingkungan.
Saya telah memandu cara menggunakannya dalam proyek Python sederhana, sambil tetap menjaga informasi sensitif tetap aman. Anda juga telah melihat cara mengintegrasikan build args dengan alat seperti Docker Compose.
Anggap build args sebagai fondasi strategi containerization yang fleksibel. Mulailah dari hal kecil dengan memparametrisasi versi Python pada proyek berikutnya. Setelah terasa nyaman, coba tambahkan logika kondisional untuk environment yang berbeda. Tanpa terasa, Anda akan membuat multi-stage build canggih yang dapat dikustomisasi tim tanpa mengubah Dockerfile.
Siap menyelami lebih dalam? Kursus-kursus dari DataCamp berikut adalah langkah terbaik selanjutnya:
FAQs
Apa itu Docker build arguments?
Docker build arguments (build args) adalah variabel yang Anda berikan ke proses build Docker yang hanya tersedia selama pembuatan image. Build args memungkinkan Anda menyesuaikan Dockerfile tanpa memodifikasinya, membuat build container lebih fleksibel dan dapat digunakan kembali. Anggap saja sebagai parameter yang dapat Anda atur setiap kali membangun image, sempurna untuk menangani environment atau konfigurasi yang berbeda.
Apa perbedaan build args dengan environment variables di Docker?
Build args hanya ada saat pembuatan image, sementara environment variable bertahan di container yang berjalan. Build args didefinisikan dengan instruksi ARG dan diberikan melalui flag --build-arg saat build, menjadikannya ideal untuk hal seperti memilih base image atau menetapkan konfigurasi saat build. Environment variable, yang didefinisikan dengan ENV, dirancang untuk konfigurasi runtime yang dibutuhkan aplikasi saat berjalan.
Apa kekhawatiran keamanan yang perlu saya ketahui saat menggunakan Docker build args?
Build args tidak setertutupi yang diasumsikan banyak pengembang — nilainya terlihat di riwayat image dan log CI/CD. Jangan pernah menggunakan build args untuk informasi sensitif seperti API key atau kata sandi karena siapa pun yang memiliki akses ke image Anda dapat melihat nilai tersebut. Untuk data sensitif, gunakan Docker BuildKit secrets sebagai gantinya, yang tidak disimpan di image final atau riwayat.
Bagaimana cara meneruskan build args melalui pipeline CI/CD seperti GitHub Actions?
Sebagian besar platform CI/CD mendukung Docker build args melalui file konfigurasinya. Di GitHub Actions, Anda dapat meneruskan build args di YAML workflow menggunakan parameter build-args di bawah docker/build-push-action. Anda dapat mereferensikan environment variable, repository secrets, atau nilai hardcode tergantung kebutuhan keamanan. Ini memungkinkan Anda mengotomatiskan build dengan konfigurasi berbeda berdasarkan branch, environment, atau variabel CI lainnya.
Apakah ada batas jumlah build args yang dapat saya gunakan di Dockerfile?
Tidak ada batas teknis yang ketat pada jumlah build args, tetapi terlalu banyak dapat membuat Dockerfile sulit dipahami dan dirawat. Untuk proyek data science, fokuslah pada pemfaktoran variabel penting seperti versi Python, pilihan framework, atau konfigurasi dataset. Jika Anda merasa memiliki lebih dari 8–10 build args, pertimbangkan untuk memecah Dockerfile menjadi file yang lebih kecil dan fokus, atau gunakan Docker Compose untuk mengelola kompleksitas.


Apakah Anda kesulitan dengan build Docker yang tidak konsisten di seluruh tim pengembangan? Build arguments mungkin adalah solusi yang Anda cari. Ini adalah solusi andalan untuk membuat image Docker yang fleksibel dan terstandarisasi. Build arguments memungkinkan Anda menyuntikkan nilai ke dalam proses build tanpa hardcode, sehingga Dockerfile Anda menjadi lebih portabel dan mudah dirawat.
Docker build args menyelesaikan masalah umum, seperti menangani base image yang berbeda, versi paket, atau pengaturan konfigurasi lintas lingkungan.
Dokumentasi resmi Docker merekomendasikan build args untuk memparametrisasi build alih-alih menyalahgunakan environment variable. Ini sangat berharga dalam pipeline CI/CD saat Anda perlu membuat image dengan konfigurasi berbeda dari Dockerfile yang sama.
> Baru mengenal Docker dan container? Ikuti panduan kami untuk cepat memahami dasarnya.
Dalam artikel ini, saya akan menunjukkan cara menggunakan Docker build arguments untuk membuat alur kerja containerization yang lebih efisien, aman, dan fleksibel.
Pengenalan Docker Build Args
Build arguments (atau build args) adalah variabel yang Anda berikan ke Docker saat build, dan hanya tersedia selama proses pembuatan image.
Tidak seperti environment variable yang bertahan di container saat runtime, build args hanya ada dalam konteks perintah
docker builddan hilang setelah image Anda dibuat. Fungsinya mirip parameter fungsi, memungkinkan Anda menyuntikkan nilai berbeda setiap kali membangun image.Kasus penggunaan utama build args berpusat pada pembuatan Dockerfile yang fleksibel dan dapat digunakan kembali.
Anda dapat menggunakan build args untuk menentukan base image yang berbeda (misalnya beralih antara Alpine atau Debian), menetapkan versi aplikasi tanpa memodifikasi Dockerfile, atau mengonfigurasi pengaturan saat build seperti server proxy atau URL repository. Fleksibilitas ini sangat bermanfaat dalam pipeline CI/CD di mana Anda mungkin membangun Dockerfile yang sama dengan parameter berbeda berdasarkan target deployment.
Build args sangat berguna saat Anda perlu menyesuaikan build tanpa mempertahankan banyak varian Dockerfile. Ini membantu Anda mengikuti prinsip DRY (Don't Repeat Yourself) dengan memusatkan logika konfigurasi container sembari tetap memungkinkan kustomisasi.
Build args juga ideal untuk menangani perbedaan antara lingkungan pengembangan, pengujian, dan produksi yang seharusnya hanya memengaruhi bagaimana image dibangun, bukan bagaimana container berjalan.
Sekarang setelah Anda tahu apa itu build args, mari saya tunjukkan cara menggunakannya.
Mendefinisikan dan Memanfaatkan Build Arguments
Sekarang mari kita masuk ke aspek praktis penerapan build arguments. Diasumsikan Anda sudah menginstal dan mengonfigurasi Docker.
Sintaks dasar dan cakupan
Anda dapat mendeklarasikan build arguments di Dockerfile menggunakan instruksi
ARG, yang dapat diletakkan sebelum atau sesudah instruksiFROM, tergantung kapan Anda membutuhkannya. Berikut sintaks dasarnya:Anda dapat memberikan nilai saat membangun image menggunakan flag
--build-arg:Gambar 1 - Build args dasar Docker
Cakupan build args mengikuti aturan tertentu yang penting untuk dipahami. Arg yang dideklarasikan sebelum instruksi
FROMhanya tersedia sebelumFROMdan harus dideklarasikan ulang setelahnya jika Anda membutuhkannya lagi.Ini terjadi karena setiap instruksi
FROMmemulai tahap build baru dengan cakupannya sendiri. Perilaku ini wajib Anda ingat, terutama pada multi-stage build.Teknik deklarasi lanjutan
Mari buat aplikasi Flask "Hello World" lengkap yang menggunakan build args untuk mendukung konfigurasi berbeda:
> Pelajari cara membuat container untuk aplikasi menggunakan Docker.
Pertama, buat aplikasi Flask sederhana (
app.py):Sekalian, buat juga file
requirements.txt:Sekarang mari buat Dockerfile yang menggunakan build args untuk konfigurasi fleksibel:
> Apakah Dockerfile di atas terlihat membingungkan? Pelajari Docker dari nol melalui panduan kami.
Untuk membangun image ini untuk pengembangan dengan versi Python tertentu, jalankan perintah berikut dari Terminal Anda:
Gambar 2 - Build args pada aplikasi Python dasar
Dalam multi-stage build, build args memerlukan penanganan khusus. Berikut contoh lengkap yang menunjukkan cara meneruskan argumen melalui beberapa tahap dengan aplikasi Flask kita:
Sekarang Anda dapat membangunnya dengan versi Python dan environment spesifik:
Gambar 3 - Build args dalam multi-stage build
Singkatnya, pendekatan ini memungkinkan Anda mempertahankan konfigurasi yang konsisten di semua tahap build.
Build arguments yang sudah tersedia (predefined)
Docker menyediakan beberapa build args bawaan yang dapat Anda gunakan tanpa mendeklarasikannya terlebih dahulu. Di antaranya:
HTTP_PROXYdanHTTPS_PROXY: Berguna untuk build di lingkungan perusahaan dengan server proxy.FTP_PROXY: Mirip proxy HTTP tetapi untuk koneksi FTP.NO_PROXY: Menentukan host yang harus melewati proxy.BUILD_DATEdanVCS_REF: Sering digunakan untuk metadata image dan versioning.Build args bawaan ini berguna saat Anda membangun image di lingkungan dengan konfigurasi jaringan spesifik. Misalnya, di jaringan perusahaan dengan persyaratan proxy ketat, Anda dapat menggunakan:
Pendekatan ini menjaga Dockerfile Anda tetap portabel namun tetap berfungsi di lingkungan terbatas.