Tugas -11 Docker Volume dan Presistent Data
Presistent Data & Docker Volume
Arsitektur Container
Secara arsitektur container didesain menjadi immutable dan ephemeral, artinya kita tidak perlu melakukan update pada container, kita hanya perlu untuk men stop dan remove kemudian mengganti dengan image yang baru
A. Immutable – Kita tidak bisa mengubah setelah container dijalankan
B. Config Changes – Jika diharuskan untuk mengubah config atau update image, kita harus melakukan redeploy dengan container yang baru
C. Benefit – Reability dan Consistency serta membuat perubahan dapat di reproduce
Bagaimana Docker Menyimpan Data
Secara default semua file atau data yang di create di dalam container akan tersimpan dalam sebuah layer yang disebut Writeable Container Layer.
1. Data tidak bertahan, ketika container sudah tidak ada atau tidak berjalan
2. Sulit untuk dibagikan, susah untuk mengakses data dari luar container ketika ada prosess lain yang membutuhkannya
3. Sangat bergantung pada host machine dimana container di jalankan dan tidak mudah untuk memindahkan data ke tempat lain
Bagaimana dengan Unique Data (input dan upload data) yang dibuat melalui aplikasi berbasis docker, ada beberapa karateristik dari data di docker.
A. Separation of Concerns, Idealnya, container jangan mengandung data unik yang tercampur kedalam binary application
B. Accessible Unique Data, Data unuk haru tetap bisa diakses walaupun container di recycle (rebuild dan rerun)
C. Updated Application, Misalkan kita melakukan update aplikasi, maka kita harus memberhentikan terlebih dahulu container, rebuild, dan rerun. Ketika mererun, maka unuk data sebelumnya harus bisa diakses kembali
D. Persistent by Default, Unique data secara default tersimpan secara persisten sampai container di remove. Menstop dan melakukan restart host tidak akan menghilangkan unique data
Solusi Docker untuk Presistent Data
Docker memberikan beberapa solusi untuk menangani persistent data, diantaranya :
1. Unique Data, harus disimpan di host machine, sehingga data akan selalu tersimpan dan accessible walaupun container suda di stop dan di remove
2. Docker memberikan dua cara untuk menupan data secara persistent di host machine, yakni Volume dan Bind Mount
3. Jika kita menjalankan docker di Linux Based OS kita juga bisa menggunakan tmpfs mount, Jika Anda menjalankan Docker di Windows, Anda juga dapat menggunakan yang namanya pipe
4. Volumes – disimpan pada host filesystem yang dimanage secara langsung oleh docker (/var/lib/docker/volumes/ pada Linux) non docker proses tidak bisa memodifikasi volume ini
5. Bind Mounts – bisa disimpan dibagian manapun pada host filesystem. Non Docker process pada Docker Host atau Docker Container bisa memodifikasi bagian ini kapanpun diperlukan
6. Tmpfs mounts – disimpan pada memory host system dan tidak pernah disimpan ada host filesystem
A. Volume
Dibuat dan dikelola oleh Docker. Anda dapat membuat volume secara eksplisit menggunakan docker volume create perintah, atau Docker dapat membuat volume selama pembuatan kontainer atau layanan. Saat Anda membuat volume, volume tersebut disimpan dalam direktori di host Docker. Saat Anda memasang volume ke dalam penampung, direktori inilah yang dipasang ke dalam penampung. Ini mirip dengan cara kerja bind mount, kecuali bahwa volume dikelola oleh Docker dan diisolasi dari fungsionalitas inti mesin host. Volume tertentu dapat dipasang ke beberapa kontainer secara bersamaan. Saat tidak ada container yang berjalan yang menggunakan volume, volume tersebut masih tersedia untuk Docker dan tidak dihapus secara otomatis. Anda dapat menghapus volume yang tidak digunakan menggunakan docker volume prune. Saat Anda memasang volume, itu mungkin bernama atau anonim . Volume anonim tidak diberi nama eksplisit saat pertama kali dipasang ke dalam container, jadi Docker memberi mereka nama acak yang dijamin unik dalam host Docker tertentu. Selain nama, volume bernama dan anonim berperilaku dengan cara yang sama.Volume juga mendukung penggunaan driver volume, yang memungkinkan Anda menyimpan data di host jarak jauh atau penyedia cloud, di antara kemungkinan lainnya.
Contoh penggunaan Volume pada Image MYSQL
Untuk menggunakan volume kita akan menggunakan latest tag : MYSQL DOCKERFILE
Inspect Docker Image, jalankan pada terminal dengan menggunakan perntah
docker image inspect mysql
lihat pada bagian ContainerConfigVolumes
Run MySQL image sebagai container
docker container run –d --name mysqldb –e MYSQL_ALLOW_EMPTY_PASSWORD=True mysql
Lalu inspect container mysqldb
docker container inspect mysqldb
Pada pagian mounts akan muncul tampilan seperti gambar dibawah
Volumennya tetap ada walaupun container mysqldb sudah di remove
Ketikkan perintah dibawah ini untuk mengecek dan memastikan jika volumenya akan tetap ada walaupun container nya sudah kita hapus/remove
docker container ls
docker container ls -a
docker container rm -f mysqldb
docker container ls -a
docker volume ls
Volumes – Custome Name
Lalu kita akan run MySQL image dengan menambahkan opsi –v yang berguna untuk menentukan volume yang akan digunakan
docker container run –d –-name mysqldb –e MYSQL_ALLOW_EMPTY_PASSWORD=True –v mysqldb:/var/lib/mysql mysql
B. Bind mounts
Tersedia sejak awal Docker. Bind mount memiliki fungsionalitas terbatas dibandingkan volume. Saat Anda menggunakan bind mount, file atau direktori di mesin host dipasang ke dalam container. File atau direktori direferensikan oleh jalur lengkapnya di mesin host. File atau direktori tidak harus sudah ada di host Docker. Itu dibuat sesuai permintaan jika belum ada. Bind mount sangat berkinerja, tetapi mereka bergantung pada sistem file mesin host yang memiliki struktur direktori tertentu yang tersedia. Jika Anda mengembangkan aplikasi Docker baru, pertimbangkan untuk menggunakan volume bernama sebagai gantinya. Anda tidak dapat menggunakan perintah Docker CLI untuk langsung mengelola bind mount.
Contoh penggunaan Bind Mount
Disini kita akan menjalankan 2 container nginx dengan umage yang sama yaitu nginx-web-app
Run nginx tanpa menggunakan bind mounting
docker container run -d --name nginx -p 8080:80 nginx-web-app
Run nginx menggunakan bind mounting
Komentar