Kursus
Jika Anda bertanya-tanya bagaimana cara menjalankan Docker image, Anda tidak sendirian. Baik Anda baru saja menarik image dari Docker Hub atau membangunnya sendiri, menjalankannya adalah langkah penting yang menghidupkan aplikasi Anda.
Tutorial ini adalah panduan ramah pemula untuk perintah docker run dan seterusnya. Anda akan mempelajari:
- Apa sebenarnya Docker image dan container itu.
- Cara menjalankan sebuah image dengan berbagai opsi.
- Dan cara menghentikan, menghapus, serta memecahkan masalah container secara andal.
Pada akhirnya, Anda akan percaya diri meluncurkan container Anda sendiri dan memahami apa yang terjadi di balik layar.
Memahami Docker Image dan Container
Sebelum masuk ke contoh perintah, mari pahami Docker image dan container dengan istilah yang sederhana.
Jika Anda sudah familier dengan istilah ini, silakan lewati ke bagian berikutnya!
Apa itu Docker image?
Docker image adalah cetak biru yang tidak dapat diubah (immutable) untuk aplikasi Anda. Ia mendefinisikan semua yang dibutuhkan container: kode, library, environment, dan konfigurasi. Setelah Anda memiliki image, Anda dapat menggunakannya untuk menjalankan satu container atau seratus. Hasilnya akan konsisten setiap kali.
Lalu, dari mana image berasal? Dockerfile yang membangunnya. Dockerfile adalah tempat Anda menentukan base image yang digunakan, dependensi apa yang perlu diinstal, dan bagaimana aplikasi Anda harus dijalankan.
Setelah Dockerfile siap, Anda menjalankan perintah docker build. Perintah ini mengikuti langkah-langkah di file tersebut dan mengubahnya menjadi image yang dapat digunakan kembali.
Apa itu Docker container?
Docker container adalah versi aktif dari Docker image. Ini memungkinkan aplikasi Anda berjalan dalam lingkungan terisolasi, memastikan perilaku yang konsisten terlepas dari sistem host.
Ini mengikuti pendekatan “build once, run anywhere”, sehingga Anda tidak perlu menyiapkan environment secara manual setiap kali.
Image vs container
Tabel berikut membandingkan image dan container secara berdampingan:
|
Image |
Container |
|
Image adalah paket standar yang mencakup semua file, binary, library, dan konfigurasi untuk menjalankan container. |
Instance runtime dari sebuah image. |
|
Image bersifat immutable. Artinya tidak dapat berubah sampai dibangun ulang. |
Container bersifat mutable. Anda dapat memodifikasinya saat berjalan, menginstal paket baru, atau mengubah file konfigurasi. |
|
Dockerfile (kumpulan instruksi untuk membangun image) membuat image. |
Sebuah image membuat container. |
|
Komputer Anda menyimpan file image. |
Container berjalan di memori Anda. |
Jika Anda benar-benar baru dalam kontainerisasi, kursus Introduction to Docker kami memandu Anda melalui konsep inti dengan contoh langsung.
Perintah docker run
Saat Anda mengeksekusi perintah docker run, Anda memberi tahu Docker untuk menyalakan container baru berdasarkan sebuah image.
Secara sederhana, Anda meluncurkan sebuah program di dalam lingkungan terisolasi. Program itu bisa apa saja, dari aplikasi web sederhana hingga layanan penuh dengan banyak proses.
Sintaks dasar
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
[OPTIONS]- Flag tambahan untuk menyesuaikan cara container berjalanIMAGE- Nama Docker image[COMMAND]- (Opsional) Menimpa perintah default di dalam image.[ARG...]- (Opsional) Argumen.
Flag dan opsi umum
-d: Mode detached: menjalankan container di latar belakang-p: Pemetaan port: Untuk mengakses sebuah layanan (seperti API atau aplikasi web) dari browser Anda, Anda perlu mengekspos port. Contoh:-p 3000:3000memetakan port 3000 di mesin Anda ke port 3000 di container.--name: Docker memberikan nama default ke container, tetapi Anda bisa menggunakan flag ini untuk memberinya nama baru.-v: Anda menggunakan ini untuk memisahkan data dari container itu sendiri, memastikan data tetap ada meskipun container dihentikan atau dihapus.--rm: Saat container berhenti, flag ini akan menghapusnya secara otomatis.-e: Gunakan untuk meneruskan kata sandi database atau kunci API tanpa menanamkannya langsung di aplikasi Anda.
Menjalankan container interaktif vs detached
Docker menjalankan container dengan dua cara: mode interaktif (-it) dan mode detached (-d). Setiap mode memiliki kegunaan khusus tergantung tujuan Anda.
-it: Mode interaktif: Jika Anda ingin bekerja langsung di dalam container menggunakan terminal, gunakan flag-it. Ini menempatkan container dalam mode interaktif, sehingga Anda dapat mengetik perintah, melihat output, dan bekerja secara real-time.-i: Menjaga input tetap terbuka agar Anda bisa mengetik perintah ke dalam container-t: Memberikan antarmuka mirip terminal di dalam container-d: Mode detached: Menjalankan container di latar belakang, sehingga terminal Anda bebas untuk tugas lainnya.
Simpan perintah kunci dan praktik terbaik di ujung jari Anda dengan Docker for Data Science Cheat Sheet kami.
Menarik dan Menjalankan Docker Image
Sekarang setelah Anda mengetahui sintaks perintah docker run, bagian ini akan menunjukkan cara membuat image kustom dan menjalankannya.
Menggunakan image dari Docker Hub
Docker Hub seperti perpustakaan online untuk image container. Anda dapat mengambil image yang sudah dibuat atau mengunggah milik Anda untuk dibagikan kepada orang lain. Ini mendukung repositori publik dan privat, sehingga Anda bisa berbagi image secara terbuka dengan komunitas atau menerapkan kontrol akses untuk tim internal Anda.
Menjalankan image kustom
Untuk menjalankan Docker image, Anda terlebih dahulu perlu membangunnya menggunakan Dockerfile. Lalu, Anda dapat menjalankannya secara lokal atau mendorongnya ke Docker Hub untuk dibagikan.
Jadi, pertama mari buat Dockerfile. Berikut contohnya:
# Use official Python base image
FROM python:3.11-slim
# Set working directory in the container
WORKDIR /app
# Copy requirements file and install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy the rest of the app code
COPY . .
EXPOSE 5000
# Set default command
CMD ["python", "app.py"]
Apa arti Dockerfile di atas?
FROM python:3.11-slim: base image dengan Python versi 3.11WORKDIR /app: Menetapkan/appsebagai direktori kerja di dalam container.COPY requirements.txt .: memindahkan semua dependensi dari mesin lokal ke direktori aplikasi container.RUN pip install --no-cache-dir -r requirements.txt: menginstal dependensi di requirements.txt.COPY . .: menyalin kode direktori kerja saat ini (aplikasi, file konfigurasi, dan lainnya) ke direktori aplikasi container.- CMD ["python", "app.py"]: menjalankan app.py saat memulai container dari image ini.
Langkah 1. Build Dockerfile
Mari lihat apa yang terjadi saat Anda membangun Dockerfile ini.
- Jalankan perintah berikut:
docker build -t my-python-app .
Catatan: Agar perintah ini berfungsi, Anda harus sudah menyiapkan Docker di sistem Anda; panduan ini membantu Anda melakukannya.

Berikut yang terjadi di balik layar saat Anda mengeksekusi perintah build:
- Docker membaca Dockerfile
- Base image Python diambil dari Docker Hub
- Direktori kerja ditetapkan ke
/app. requirements.txtdisalin ke dalam container.- Dependensi diinstal menggunakan
pip install. - Sisa kode Anda disalin ke
/app. - Image final diberi tag sebagai
my-python-app.
Langkah 2: Jalankan Dockerfile
Setelah image Anda dibangun, Anda dapat mengeksekusinya menggunakan:
docker run -p 5000:5000 my-python-app
Berikut yang terjadi saat Anda menjalankannya:
- Container baru dari image kustom Anda,
my-python-app, dibuat. - Port 5000 di mesin Anda dipetakan ke port 5000 di container (
-p 5000:5000). - Perintah
CMD ["python", "app.py"] dijalankan dan mengeksekusi aplikasi. - Container berjalan di latar belakang karena opsi
-d(mode detached).
Pada tahap ini, Anda dapat membuka http://localhost:5000 di browser Anda, dan Anda akan melihat sesuatu seperti berikut, yang berarti aplikasi Anda sedang berjalan:
Jika Anda bekerja di bidang machine learning, beberapa Docker image terbaik untuk ML dan AI ini dapat mempercepat penyiapan environment Anda.
Menjalankan image dengan konfigurasi
Untuk beberapa aplikasi, Anda mungkin perlu menjalankan image dengan konfigurasi tertentu. Berikut dua contoh umum.
Mempersistenkan data
Container menyimpan data secara sementara. Setelah Anda menghapusnya, datanya hilang. Volume adalah cara untuk menyimpan data di luar container sehingga tetap ada meskipun container dihapus atau dimulai ulang.
Untuk me-mount volume, Anda perlu menjalankan perintah seperti berikut:
docker run -v my-volume:/app/data my-image
Data yang ditulis ke /app/data disimpan di volume bahkan setelah container dihapus.
Meneruskan variabel lingkungan
Variabel lingkungan meneruskan pengaturan konfigurasi ke Docker container saat runtime. Ini menyesuaikan container Docker Anda tanpa memodifikasi Docker image Anda.
Ada dua cara untuk meneruskan variabel lingkungan:
- Anda dapat meneruskan variabel lingkungan menggunakan parameter
-e. Berikut contoh perintah:
docker run -e ENV=production -e DEBUG=False my-image
- Anda dapat membuat file
.envberisi semua variabel lingkungan dan meneruskannya ke perintah. Berikut contohnya:
docker run --env-file .env my-image
Contoh file .env:
ENV=staging
DEBUG=True
SECRET_KEY=mysecret
Mengelola Container yang Berjalan
Setelah sebuah container berjalan, Anda dapat melihat, menghentikan, dan mengaksesnya. Mari lihat caranya.
Melihat container aktif
Untuk menampilkan semua Docker container aktif yang berjalan di sistem Anda, jalankan perintah docker ps atau docker container ls. Perintah ini menampilkan ID container, image, perintah, port, status, dan detail lainnya.
docker ps
# or
docker container ls
Untuk menyertakan semua container — tidak hanya yang sedang berjalan — seperti yang sudah keluar (exited) atau dibuat tetapi belum dimulai, gunakan flag -a:
docker ps -a
Untuk menampilkan hanya container yang paling baru dibuat, gunakan flag -l (last):
docker ps -l
Jika Anda ingin melihat semua container diurutkan berdasarkan waktu pembuatan, dengan yang terbaru di atas, jalankan:
docker ps -a --sort=created
Menghentikan dan menghapus container
Untuk menghentikan container tertentu yang sedang berjalan, gunakan perintah docker stop diikuti ID atau nama container:
docker stop <container_id_or_name>
Untuk menghentikan semua container yang berjalan, gunakan:
docker stop $(docker ps -q)
$(docker ps -q)mengembalikan daftar semua ID container yang berjalan.
Setelah container dihentikan, Anda dapat menghapusnya menggunakan:
docker rm <container_id_or_name>
Untuk menghapus semua container yang berhenti, jalankan:
docker container prune
Untuk melangkah lebih jauh dan menghapus container, volume, network, dan image yang tidak terpakai, lihat panduan Docker prune.
Mengakses log dan shell container
- docker logs - Perintah
docker logsmengambil log secara batch yang ada pada saat eksekusi. - docker exec -
docker execmemungkinkan Anda menjalankan perintah baru di dalam container yang sedang berjalan tanpa menghentikan atau memulainya ulang. Anggap saja seperti membuka terminal baru di dalam container — sehingga Anda bisa mengecek, menjalankan skrip, memeriksa log, atau debug. - docker attach -
docker attachmenghubungkan terminal Anda langsung ke proses utama container yang sedang berjalan. Ini berarti Anda dapat melihat output langsung container (log, prompt, dll.) dan bahkan berinteraksi jika prosesnya menerima input.
Pemecahan Masalah Umum
Solusi sederhana untuk masalah umum. Berikut beberapa error umum saat menjalankan Docker image dan cara menanganinya.
Error 1: “Error response from daemon: pull access denied for alpine-python, repository does not exist or may require ‘docker login’: denied: requested access to the resource is denied.”
- Artinya: Docker mencoba menarik sebuah image, dalam hal ini image
alpine-pythondari Docker Hub, tetapi imagenya tidak ada atau privat, dan Anda belum terautentikasi. - Cara memperbaiki:
- Periksa kembali nama image dan tag di Docker Hub.
- Jika itu image privat, jalankan
docker loginuntuk autentikasi. - Pastikan image ada jika Anda menarik dari registry kustom.
Error 2: “No such image found: <image-name>:<tag>”
- Artinya: Anda mencoba menjalankan atau memberi tag image secara lokal, tetapi image (atau tag yang ditentukan) tidak tersedia di sistem Anda.
- Cara memperbaiki:
- Gunakan
docker imagesuntuk memeriksa image yang tersedia. - Tarik image secara eksplisit:
- Gunakan
docker pull <image-name>:<tag>
Error 3: “manifest for <image>:<tag> not found: manifest unknown: The named manifest is not known to the registry.”
- Artinya: Error ini kemungkinan terjadi saat image atau tag yang ditentukan tidak ada.
- Kemungkinan perbaikan: Tips ini seharusnya memperbaiki sebagian besar error umum:
- Verifikasi nama image dan tag yang benar.
- Rujuk ke tag image di Docker Hub atau registry kustom Anda.
- Gunakan
docker pull <image>:<tag>untuk mengambil versi yang valid. - Jika membangun secara lokal, gunakan
Dockerfileyang benar dan bangun image dengan:
docker build -t <image>:<tag> .
Konflik port dan kegagalan bind
Konflik port terjadi ketika beberapa container atau sebuah container dan aplikasi lain mencoba mengakses port yang sama.
- Cara memperbaiki:
- Gunakan host port yang berbeda saat menjalankan container Anda:
docker run -p 8081:80 <image>
- Hentikan layanan yang saat ini menggunakan port tersebut.
- Identifikasi apa yang menggunakan sebuah port (misalnya, 8080) dengan:
lsof -i :8080
Kesimpulan
Menjalankan Docker image adalah salah satu langkah paling penting dan memberdayakan dalam menggunakan container, baik Anda menyalakan server web sederhana atau menerapkan aplikasi yang kompleks. Dengan beberapa perintah seperti docker run, docker ps, dan docker stop, kini Anda dibekali untuk meluncurkan, mengelola, dan memecahkan masalah container dengan percaya diri.
Jika siap melangkah lebih jauh, cobalah membangun image Anda sendiri dengan Dockerfile, jelajahi flag lanjutan docker run, atau pelajari cara mengelola banyak container dengan Docker Compose.
Lihat kursus-kursus berikut untuk melanjutkan perjalanan Docker Anda:
- Intermediate Docker: Pelajari manajemen image lanjutan, volume, dan aplikasi multi-container.
- Containerization and Virtualization Concepts: Pahami teori di balik container dan bagaimana perbedaannya dari virtual machine.
- Containerization and Virtualization with Docker and Kubernetes: Jalur pembelajaran lengkap untuk menguasai Docker dan mulai dengan Kubernetes.
FAQs
Bisakah saya menjalankan beberapa container dari Docker image yang sama?
Ya, Anda dapat menjalankan beberapa container dari image yang sama. Setiap container terisolasi dan dapat memiliki pengaturan, port, serta variabel lingkungannya sendiri.
Bagaimana cara meneruskan secret atau kunci API dengan aman ke Docker container?
Gunakan flag -e untuk menetapkan variabel lingkungan atau gunakan file .env dan --env-file untuk meneruskan secret saat runtime tanpa menanamkannya langsung di kode.
Bagaimana cara menjalankan Docker image di latar belakang?
Gunakan flag -d dengan docker run untuk memulai container dalam mode detached, sehingga terminal tetap tersedia untuk perintah lainnya.
Apa perbedaan antara docker exec dan docker attach?
docker exec membuka sesi shell baru di dalam container, sedangkan docker attach terhubung ke proses utama container dan output langsungnya.
Mengapa saya mendapat 'pull access denied' saat menjalankan image?
Ini biasanya berarti image bersifat privat atau salah eja. Periksa nama, tag, dan pastikan Anda sudah masuk ke Docker Hub dengan docker login.
Bagaimana cara mempersistenkan data di container setelah berhenti?
Gunakan flag -v untuk me-mount volume, memastikan data disimpan di luar container dan tetap utuh bahkan setelah container dihapus.
Apa cara terbaik menjalankan container untuk keperluan pengembangan?
Gunakan flag -it untuk mode interaktif, bersama dengan mounting volume dan variabel lingkungan untuk meniru environment pengembangan lokal.
Bagaimana saya dapat mengetahui port mana yang konflik di mesin saya?
Gunakan lsof -i :<port> untuk mengidentifikasi proses mana yang menggunakan port tertentu, lalu hentikan proses tersebut atau gunakan host port yang berbeda untuk container Anda.
Bagaimana saya dapat melihat log dari Docker container yang berjalan?
Gunakan perintah docker logs <container_id> untuk mengambil dan meninjau log dari aliran standar output dan error container.
Srujana adalah penulis lepas di bidang teknologi dengan gelar sarjana Ilmu Komputer. Menulis tentang berbagai topik, termasuk data science, komputasi awan, pengembangan, pemrograman, keamanan, dan banyak lainnya adalah hal yang alami baginya. Ia menyukai sastra klasik dan menjelajahi destinasi baru.


