volume instruction
- volume => merupakan intruksi yang digunakan untuk membuat volume secara otomatis ketika membuat docker container
- semua file yang terdapat di volume secara otomatis akan otomatis di copy ke dalam docker volume
- walaupun kita tidak membuat docker volume ketika membuat docker containernya
- ini sangat cocok pada kasus ketika aplikasi kita misal menyimpan data di dalam file sehingga data bisa secara otomatis aman berada di docker volume
- semua file yang terdapat di volume secara otomatis akan otomatis di copy ke dalam docker volume
volume
VOLUME /path/to/path
VOLUME /path/folder1 /path/folder2
VOLUME ["/path/A", "/path/b", "/etc/nginx"]
contoh
FROM golang:1.18-alpine
ENV APP_PORT=8080
ENV APP_DATA=/logs
RUN mkdir ${APP_DATA}
RUN mkdir app
COPY main.go app
EXPOSE ${APP_PORT}
VOLUME ${APP_DATA}
CMD go run app/main.go
main.go
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
)
func main() {
port := os.Getenv("APP_PORT")
fmt.Println("Run app in port : " + port)
http.HandleFunc("/", HelloServer)
http.ListenAndServe(":"+port, nil)
}
func HelloServer(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %s", r.URL.Path[1:])
dataString := "Hello " + r.URL.Path[1:]
dataBytes := []byte(dataString)
destination := os.Getenv("APP_DATA")
file := destination + "/" + r.URL.Path[1:] + ".txt"
err := ioutil.WriteFile(file, dataBytes, 0666)
if err != nil {
panic(err)
}
fmt.Println("DONE Write File : " + file)
}
run
docker container create --name volume -e APP_PORT=8080 -p 8080:8080 aria/volume
docker start volume
# go to http://localhost:8080/aria
# and see the logs
docker logs volume