Dockerfile
Dockerfile
Sebelumnya kita selalu membuat Container dari Image yang sudah ada.
Docker Compose juga bisa digunakan untuk membuat Container dari Dockerfile yang kita buat.
Hal ini mempermudah kita sehingga tidak perlu membuat Image nya terlebih dahulu secara manual, semua bisa dilakukan otomatis oleh Docker Compose.
Membuat Dockerfile
Sekarang kita akan buat contoh Dockerfile:
- File main.go : https://github.com/ProgrammerZamanNow/belajar-docker-dockerfile/blob/main/env/main.go
- File Dockerfile : https://github.com/ProgrammerZamanNow/belajar-docker-dockerfile/blob/main/env/Dockerfile
Build
Ketika kita ingin membuat Container dari Dockerfile, kita tidak menggunakan attribute image lagi di service nya.
Kita harus menggunakan attribute build, dimana terdapat attribute :
- context: berisi path ke file Dockerfile
- dockerfile: nama file Dockerfile, bisa diganti jika mau
- args: argument yang dibutuhkan ketika melakukan docker build
https://docs.docker.com/compose/compose-file/compose-file-v3/#build
Image Name
Secara default, Docker Compose akan membuat Image dengan nama random ketika melakukan build Dockerfile.
Jika kita ingin menentukan namanya, kita bisa tambahkan attribute image pada service, secara otomatis Docker Compose akan membuat image dengan nama sesuai dengan itu.
Build Dockerfile
Ketika kita menggunakan perintah docker compose start, secara otomatis Docker Compose akan melakukan build terlebih dahulu jika Image nya belum terbuat.
Tapi jika kita hanya ingin melakukan build Image saja, tanpa membuat Container, kita juga bisa menggunakan perintah : docker compose build
Menghapus Image
Hasil Image dari Docker Compose tidak akan dihapus ketika melakukan perintah docker compose down
Jadi untuk menghapusnya kita harus hapus manual menggunakan perintah docker image rm nama-image:tag
Build Ulang
Perlu diingat, ketika kita mengubah kode program, lalu kita coba stop dan start ulang container menggunakan Docker Compose, bukan berarti kode program terbaru akan berjalan.
Hal ini karena Image versi baru otomatis terbuat, sehingga jika kita kita ingin menggunakan Image versi baru, kita harus hapus dulu Container nya, lalu buat ulang dengan Image baru.