GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menambahkan Volume ke Wadah Docker yang Ada

Meskipun Docker adalah alat yang berguna untuk mengemas dan mengelola aplikasi, Docker juga menghadirkan banyak tantangan unik, seperti menangani data yang tersimpan. Biasanya, Anda menambahkan volume ke wadah dalam skrip pembuatan, tetapi bagaimana jika Anda perlu membuat yang baru?

Menambahkan Volume ke Running Docker Container

Sayangnya itu tidak sesederhana hanya menambahkan volume baru. Kontainer harus memiliki volume yang dikonfigurasi saat startup, yang berarti untuk menambahkan volume baru, Anda harus memulai ulang penampung. Meskipun ada solusi peretasan (lebih lanjut tentang itu di bawah), sangat disarankan agar container restart tetap dilakukan.

Ini karena beberapa alasan. Memulai ulang penampung cukup mudah, dan sebagian besar pembaruan kode tetap memerlukan dimulainya ulang layanan. Memiliki pembaruan yang dilacak di Git adalah faktor besar lainnya, terutama jika Anda menggunakan Docker Compose, dan mengedit skrip peluncuran jauh lebih baik daripada menambahkan volume secara manual ke container yang sedang berjalan.

Jika layanan Anda cukup besar sehingga Anda khawatir tentang beberapa menit (paling lama) potensi waktu henti terjadwal untuk memulai ulang penampung, Anda mungkin harus menjalankan penerapan penskalaan dengan beberapa instans yang dapat diperbarui secara independen. Sistem penskalaan otomatis modern harus dirancang untuk menanganinya, karena penerapan kode sering terjadi.

Jika Anda ingin menambahkan volume, Anda harus menghentikan container yang sedang berjalan:

 docker stop my_container

Buat volume baru jika Anda perlu:

docker volume create nginx-config

Dan kemudian jalankan dengan perintah peluncuran yang diperbarui, tambahkan --mount tandai untuk mengonfigurasi volume sumber dan tujuan target.

docker run -d 
  --name devtest 
  --mount source=nginx-config,target=/etc/nginx 
  nginx:latest

Jika Anda menggunakan Docker Compose, Anda dapat mengotomatiskan dan melacak proses ini dengan lebih mudah, karena konfigurasi volume ditangani melalui file pengaturan. Anda harus menambahkan volume ke docker-compose.yml berkas:

version: "3.0"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - /docker/nginx-config/:/etc/nginx/

Kemudian, Anda dapat memulai ulang layanan Docker Compose. Compose memiliki perintah "restart", tetapi sebenarnya hanya menyegarkan layanan yang sedang berjalan tanpa perubahan konfigurasi apa pun. Jika Anda ingin memperbarui gambar, Anda harus menjalankan docker-compose up dengan --build bendera:

docker-compose up -d --build

Anda juga dapat menjalankan docker-compose down . secara manual sebelumnya untuk menghentikan layanan, tetapi tidak diperlukan dalam banyak kasus kecuali jika Anda ingin menjalankannya dengan -v tandai untuk menghancurkan volume yang ada.

TERKAIT: Apa Itu Docker Compose, dan Bagaimana Cara Menggunakannya?

Kloning Dari Wadah yang Ada

Di hampir semua kasus, Anda tidak boleh bergantung pada status menjalankan container saat ini. Apa pun yang penting bagi Anda, seperti data aplikasi, harus disimpan dalam volume sehingga dapat dipertahankan di seluruh penampung yang dimulai ulang dan dibangun kembali.

Metode ini mungkin bukan ide yang baik bagi kebanyakan orang, karena mengharuskan Anda membuat gambar baru setiap kali ingin melakukan ini, dan masih memerlukan waktu henti. Tetapi, jika Anda perlu menambahkan volume ke wadah yang sedang berjalan, Anda dapat menggunakan docker commit untuk membuat gambar baru berdasarkan wadah itu, lalu mengkloningnya dengan volume baru.

Ambil ID penampung dari docker ps :

docker ps

Dan kemudian, klon dengan commit :

docker commit f88f33c918d2 imagename

Kemudian, Anda dapat menjalankan gambar baru, mengganti gambar lama dengan gambar hasil kloning.

docker run -d 
  --name devtest 
  --mount source=nginx-config,target=/etc/nginx 
  imagename

Solusi Peretasan

Volume Docker benar-benar hanya tipuan yang digunakan runtime Docker untuk mengekspos direktori Host ke wadah, dan semuanya tergantung pada konfigurasi. Karena itu, Anda sebenarnya dapat memodifikasi konfigurasi tersebut secara langsung, dan memulai ulang seluruh daemon Docker agar sistem Anda dapat menerapkan perubahan tersebut tanpa memulai ulang sama sekali.

Tentu saja, ini jauh lebih rumit daripada hanya berurusan dengan restart container, jadi jika Anda dapat mengatur waktu henti selama satu menit, kami sangat menyarankan untuk melakukannya.

Anda harus menavigasi ke direktori penyimpanan Docker:

cd /var/lib/docker/containers

Di sini akan ada banyak folder yang sesuai dengan ID wadah Docker, yang dapat Anda temukan dengan docker ps . Buka satu untuk penampung yang ingin Anda ubah.

File konfigurasinya adalah config.v2.json , tetapi dalam format yang ringkas dan sulit untuk diedit. Anda dapat menginstal jq untuk mencetak JSON cantik pada baris perintah, dan menyalurkan ini ke file baru untuk diedit:

jq . config.v2.json > tmp.json

Anda harus menggulir ke bawah untuk menemukan "MountPoints," yang berisi konfigurasi untuk semua volume dan pengikatan mount. Anda dapat menambahkan yang baru di sini, yang harus dalam format berikut:

  "MountPoints": {
    "/home/container": {
      "Source": "/var/lib/pterodactyl/volumes/c7fb3a04-e540-48a7-9704-13987f52e933",
      "Destination": "/home/container",
      "RW": true,
      "Name": "",
      "Driver": "",
      "Type": "bind",
      "Propagation": "rprivate",
      "Spec": {
        "Type": "bind",
        "Source": "/var/lib/pterodactyl/volumes/c7fb3a04-e540-48a7-9704-13987f52e933",
        "Target": "/home/container"
      },
      "SkipMountpointCreation": true
    }
  },

Kemudian, setelah selesai, Anda dapat mengecilkan JSON kembali ke file konfigurasi:

jq -c . tmp.json > config.v2.json

jq adalah utilitas yang kuat, jadi jika Anda ingin mengotomatiskan proses ini sepenuhnya, Anda dapat melakukannya.

TERKAIT: Cara Bekerja Dengan JSON Di Baris Perintah

Kemudian, cukup restart layanan Docker untuk menerapkan perubahan:

sudo service docker restart

Docker
  1. Shell:Periksa Apakah Wadah Docker Ada?

  2. Cara Menjalankan Perintah di Running Docker Container

  3. Cara Menetapkan IP Statis ke Wadah Docker

  1. Cara menginstal WordPress menggunakan Docker

  2. Cara Menginstal Vim di Wadah Docker

  3. Cara Mendaftar Kontainer Docker

  1. Bagaimana Cara Menjalankan Program Di Dalam Wadah Docker?

  2. Cara Menjalankan MySQL Dalam Wadah Docker

  3. Cara SSH Ke Wadah Docker