Jumlah Docker: Penyelesaian Terbaik untuk Kegigihan Data dalam Bekas
Dalam aplikasi kontena, ketekalan data adalah penting. Bekas Docker, secara lalai, kehilangan semua data apabila dialih keluar. Penyelesaian yang ideal? Jumlah Docker. Ia memastikan kelangsungan data walaupun selepas mengalih keluar atau memulakan semula bekas, menawarkan pengasingan dan kebolehskalaan.
Bind mounts
, khususnya, mereka membenarkan pengeditan fail secara setempat dengan pantulan segera dalam bekas.Bayangkan bekas itu sebagai kereta sewa – apabila anda menukar kereta, anda kehilangan segala-galanya di dalamnya. Kelantangan ialah beg pakaian peribadi anda, yang menemani anda dalam mana-mana kenderaan (bekas).
Bind Mount
untuk Muat Naik FailPertimbangkan aplikasi Go yang menerima muat naik fail. Contoh ini menunjukkan cara untuk memastikan muat naik ini berterusan pada komputer setempat, mengelakkan kerugian apabila mengalih keluar bekas.
Contoh ringkas ini mencipta pelayan HTTP untuk memuat naik dan menyimpan fail dalam folder uploads/
. Kod lengkap tersedia di GitHub saya. Berikut adalah petikan daripada handler
:
<code class="language-go">func UploadHandler(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { writeJSONError(w, http.StatusMethodNotAllowed, "Método não permitido") return } file, header, err := r.FormFile("file") if err != nil { writeJSONError(w, http.StatusBadRequest, "Erro ao ler arquivo do formulário") return } defer file.Close() err = services.SaveUploadedFile(file, header.Filename) if err != nil { writeJSONError(w, http.StatusInternalServerError, fmt.Sprintf("Erro ao gravar arquivo: %v", err)) return } writeJSONSuccess(w, http.StatusOK, "Upload realizado com sucesso!", header.Filename) }</code>
Fail Docker ini menyusun binari dan mengkonfigurasi persekitaran pelaksanaan:
<code class="language-dockerfile"># syntax=docker/dockerfile:1 FROM golang:1.23-alpine AS builder WORKDIR /app COPY go.mod ./ RUN go mod download COPY . . RUN go build -o server ./cmd/image-uploader FROM alpine:3.21 WORKDIR /app COPY --from=builder /app/server /app/server RUN mkdir -p /app/uploads EXPOSE 8080 CMD ["/app/server"]</code>
Bind Mount
<code class="language-bash">docker build -t go-upload-app:latest .</code>
uploads/
hos ke bekas:<code class="language-bash">docker run -d \ --name meu_container_go \ -p 8080:8080 \ -v /caminho/no/host/uploads:/app/uploads \ go-upload-app:latest</code>
Sila ambil perhatian -v /caminho/no/host/uploads:/app/uploads
:
Fail yang dihantar melalui /upload
akan disimpan dalam bekas dan pada hos. Mengalih keluar bekas akan mengekalkan fail pada hos.
Untuk meminta Docker mengurus data dalam volum bernama (tanpa bergantung pada folder setempat), berikut ialah contoh dengan PostgreSQL:
<code class="language-bash">docker volume create pg_dados docker run -d \ --name meu_postgres \ -e POSTGRES_PASSWORD=123456 \ -v pg_dados:/var/lib/postgresql/data \ postgres:latest</code>
pg_dados
berterusan tanpa mengira bekas yang menggunakannya.
Untuk data sensitif, pertimbangkan untuk menyulitkan sistem fail atau menggunakan pemacu volum dengan penyulitan:
Data anda adalah dokumen sulit; melindungi mereka dengan penyulitan.
Docker Compose memudahkan untuk mengatur pelbagai perkhidmatan. Contoh ini menunjukkan kegigihan data dengan pangkalan data:
<code class="language-go">func UploadHandler(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { writeJSONError(w, http.StatusMethodNotAllowed, "Método não permitido") return } file, header, err := r.FormFile("file") if err != nil { writeJSONError(w, http.StatusBadRequest, "Erro ao ler arquivo do formulário") return } defer file.Close() err = services.SaveUploadedFile(file, header.Filename) if err != nil { writeJSONError(w, http.StatusInternalServerError, fmt.Sprintf("Erro ao gravar arquivo: %v", err)) return } writeJSONSuccess(w, http.StatusOK, "Upload realizado com sucesso!", header.Filename) }</code>
Mulakan perkhidmatan: docker compose up -d
. Semak status: docker compose ps
. Uji muat naik:
<code class="language-dockerfile"># syntax=docker/dockerfile:1 FROM golang:1.23-alpine AS builder WORKDIR /app COPY go.mod ./ RUN go mod download COPY . . RUN go build -o server ./cmd/image-uploader FROM alpine:3.21 WORKDIR /app COPY --from=builder /app/server /app/server RUN mkdir -p /app/uploads EXPOSE 8080 CMD ["/app/server"]</code>
Berhenti dan alih keluar: docker compose down
. db_data
berterusan.
Jumlah docker adalah penting untuk kegigihan data dalam bekas. Bind mounts
sesuai untuk pembangunan, manakala volum yang dinamakan disyorkan untuk pengeluaran. Penggunaan yang betul menjamin ketahanan dan organisasi. Cubalah dan kongsi pengalaman anda!
Atas ialah kandungan terperinci Jilid Docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!