Cara Menambahkan Volume ke Wadah Docker yang Ada

Meskipun Docker adalah alat yang berguna untuk menyimpan dan mengelola aplikasi, Docker juga menghadirkan banyak tantangan unik, seperti menangani data yang disimpan. 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. Volume kontainer harus dikonfigurasi saat startup, yang berarti untuk menambahkan volume baru, Anda harus me-restart kontainer. Meskipun ada solusi peretasan (lebih lanjut tentang itu di bawah), sangat disarankan agar container restart tetap dilakukan.

Ini untuk beberapa alasan. Memulai ulang wadah relatif mudah, dan sebagian besar pembaruan kode masih memerlukan restart layanan. Memiliki pembaruan yang dilacak di Git adalah faktor besar lainnya, terutama jika Anda menggunakan Docker Compose, dan mengedit skrip peluncuran lebih baik daripada menambahkan volume secara manual ke wadah yang sedang berjalan.

Jika layanan Anda cukup besar sehingga Anda khawatir tentang beberapa menit (paling banyak) waktu henti yang berpotensi dijadwalkan untuk memulai ulang penampung, Anda mungkin menjalankan penerapan penskalaan dengan beberapa instance 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 wadah 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, menambahkan --mount flag untuk mengkonfigurasi 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 mengotomatisasi dan memantau proses ini dengan lebih mudah, karena konfigurasi volume ditangani melalui file pengaturan. Anda perlu menambahkan volume ke docker-compose.yml file:

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 secara manual docker-compose down pertama untuk menghentikan layanan, tetapi ini tidak diperlukan dalam banyak kasus kecuali jika Anda ingin menjalankannya dengan -v bendera 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 container saat ini yang sedang berjalan. Apa pun yang penting bagi Anda, seperti data aplikasi, harus disimpan pada volume untuk mempertahankannya saat memulai ulang dan membangun kembali wadah.

Metode ini mungkin bukan ide yang baik bagi kebanyakan orang, karena mengharuskan Anda membuat gambar baru setiap kali Anda ingin melakukannya, 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, dan kemudian mengkloningnya dengan volume baru.

Dapatkan ID penampung dari docker ps:

docker ps

Dan kemudian, mengkloningnya ke commit:

docker commit f88f33c918d2 imagename

Kemudian, Anda dapat menjalankan gambar baru, mengganti gambar lama dengan yang dikloning.

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

Solusi Hacky

Volume Docker sebenarnya hanyalah trik yang digunakan runtime Docker untuk mengekspos direktori host ke container, dan semuanya tergantung pada konfigurasi. Karena itu, Anda sebenarnya dapat mengubah konfigurasi itu secara langsung, dan memulai ulang seluruh daemon Docker sehingga sistem Anda menerapkan perubahan tersebut tanpa memulai ulang.

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

Anda perlu menavigasi ke direktori repositori Docker:

cd /var/lib/docker/containers

Di sini ada banyak folder yang sesuai dengan ID wadah Docker, yang dapat Anda temukan docker ps. Buka satu untuk wadah 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 menyalurkannya ke file baru untuk diedit:

jq . config.v2.json > tmp.json

Anda perlu 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 sepenuhnya mengotomatiskan proses ini, Anda bisa.

Leave a Comment

Your email address will not be published. Required fields are marked *