Jilid Docker

Linda Hamilton
Lepaskan: 2025-01-21 22:03:10
asal
850 orang telah melayarinya

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.


Mengapa memilih Jilid Docker?

  1. Kegigihan: Apabila memautkan volum ke bekas, data berterusan walaupun selepas bekas itu dimusnahkan atau dicipta semula.
  2. Pengasingan: Mengasingkan storan data daripada logik kontena memudahkan penyusunan, penggantian dan kemas kini.
  3. Skalabiliti: Dalam persekitaran berbilang bekas, volum memudahkan perkongsian data.
  4. Pembangunan Dipercepatkan: 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).

Docker Volumes


Contoh Praktikal 1: Bind Mount untuk Muat Naik Fail

Pertimbangkan 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.

Pemuat Naik Imej

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>
Salin selepas log masuk
Salin selepas log masuk

Fail Docker

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>
Salin selepas log masuk
Salin selepas log masuk

Mencipta dan Menjalankan Bekas dengan Bind Mount

  1. Bina imej:
<code class="language-bash">docker build -t go-upload-app:latest .</code>
Salin selepas log masuk
  1. Jalankan bekas, memetakan folder 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>
Salin selepas log masuk

Sila ambil perhatian -v /caminho/no/host/uploads:/app/uploads:

  • Kiri: laluan pada hos.
  • Kanan: laluan dalam bekas (/app/uploads).

Fail yang dihantar melalui /upload akan disimpan dalam bekas dan pada hos. Mengalih keluar bekas akan mengekalkan fail pada hos.


Jilid Dinamakan

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>
Salin selepas log masuk

pg_dados berterusan tanpa mengira bekas yang menggunakannya.


Keselamatan: Menyulitkan Jilid

Untuk data sensitif, pertimbangkan untuk menyulitkan sistem fail atau menggunakan pemacu volum dengan penyulitan:

  • Simpanan dalam partition yang disulitkan.
  • Penyelesaian storan awan dengan penyulitan dalam keadaan rehat.
  • Pemacu khusus (rexray, portworx) dengan penyulitan terbina dalam.

Data anda adalah dokumen sulit; melindungi mereka dengan penyulitan.


Contoh dengan Docker Compose

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>
Salin selepas log masuk
Salin selepas log masuk

Berjalan dengan Docker Compose

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>
Salin selepas log masuk
Salin selepas log masuk

Berhenti dan alih keluar: docker compose down. db_data berterusan.


Kesimpulan

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan