Wadah Docker memungkinkan Anda menjalankan aplikasi baru dengan cepat tanpa mencemari sistem Anda dengan dependensi. Database MySQL adalah persyaratan umum untuk perangkat lunak berbasis web. Berikut cara menjalankan instance MySQL baru di Docker hanya dalam beberapa menit.
Memulai
Gambar MySQL resmi di Docker Hub menyediakan semua yang diperlukan untuk memulai. Gambar tersedia untuk MySQL versi 5.6, 5.7 dan 8.0. Tentukan yang ingin Anda gunakan sebagai tag gambar:
docker pull mysql:8.0
Sebelum men-deploy, Anda harus menyiapkan volume Docker atau bind mount untuk mempertahankan database Anda. Jika tidak, data Anda akan hilang saat container dimulai ulang. Mount harus dibuat ke /var/lib/mysql
dalam wadah.
Anda juga perlu mengatur kata sandi untuk pengguna root MySQL. Gunakan MYSQL_ROOT_PASSWORD
variabel lingkungan. MySQL akan menolak untuk menginisialisasi jika variabel ini tidak disetel. Cobalah untuk memilih kata sandi yang aman.
Berikut cara menjalankan MySQL sambil memenuhi prasyarat ini:
docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=secret -v $HOME/mysql-data:/var/lib/mysql -d mysql:8.0
Rutinitas pertama MySQL akan membutuhkan waktu beberapa detik untuk diselesaikan. Anda dapat memeriksa apakah database sudah aktif dengan menjalankan docker logs my-mysql
. Periksa baris yang berisi ready for connections
.
TERKAIT: Cara Menggunakan Docker untuk Menampung PHP dan Apache
Tulisan Docker
docker run
perintah dapat dengan cepat menjadi panjang, terutama jika Anda memiliki persyaratan konfigurasi yang kompleks. Menulis docker-compose.yml
file lebih dapat dipelihara. Ini contohnya:
version: "3"
services:
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD
volumes:
- mysql:/var/lib/mysql
volumes:
mysql:
Anda dapat memulai MySQL menggunakan MYSQL_ROOT_PASSWORD=secure docker-compose up -d
.
TERKAIT: Cara Menginstal Docker dan Docker Compose di Linux
Menghubungkan ke MySQL
Anda bisa mendapatkan shell MySQL interaktif dengan melampirkan ke wadah dan menjalankan mysql
memerintah. Ini menyediakan antarmuka baris perintah MySQL lengkap, sehingga Anda dapat menggunakan semua perintah dan flag yang sudah dikenal.
docker exec -it my-mysql mysql -p
Perintah ini membuka shell sebagai pengguna root dan meminta kata sandi.
Untuk mengimpor file SQL dari sistem file Anda, Anda dapat menyalurkannya ke dalam perintah:
docker exec -it my-mysql mysql -psecret database_name < path-to-file.sql
Anda harus mengatur pengikatan port jika Anda ingin mengakses MySQL dari host Anda. Ikat port host ke port container 3306. Tambahkan kode berikut ke docker-compose.yml
Anda file, di dalam mysql
definisi layanan:
ports:
- 33060:3306
Ini akan mengikat port 33060 pada mesin host Anda ke port penampung 3306. Jika Anda tidak menggunakan Docker Compose, teruskan -p 33060:3306
untuk docker run
saat Anda memulai wadah Anda. Sekarang Anda dapat terhubung ke localhost:33060
menggunakan klien MySQL yang berjalan di host Anda.
Jika Anda perlu terhubung dari lain Wadah Docker, sebaiknya gunakan Docker Compose. Tentukan layanan lain untuk penampung baru. Kedua kontainer akan ada di jaringan Docker yang sama. Anda akan dapat terhubung menggunakan port 3306 pada nama host penampung MySQL (ini cocok dengan nama layanan yang ditentukan dalam file Tulis Anda).
Secara Otomatis Membuat Database dan Pengguna
Gambar MySQL Docker mendukung variabel lingkungan opsional yang memungkinkan Anda mengelola pengaturan database yang dijalankan pertama kali. Setel variabel-variabel ini untuk secara otomatis menyediakan database kosong dan akun pengguna baru:
MYSQL_DATABASE
– Nama skema database yang akan dibuat saat server melakukan inisialisasi untuk pertama kalinya.MYSQL_USER
danMYSQL_PASSWORD
– Buat akun pengguna awal baru, secara terpisah keroot
pengguna. Jika Anda juga mengaturMYSQL_DATABASE
variabel, akun pengguna baru Anda akan secara otomatis diberikan semua hak istimewa pada database yang baru dibuat.MYSQL_RANDOM_ROOT_PASSWORD
– Atur variabel ini agar MySQL secara otomatis menghasilkan kata sandi baru untukroot
pengguna. Ini menggantikanMYSQL_ROOT_PASSWORD
variabel. Kata sandi yang dihasilkan akan dipancarkan ke aliran keluaran standar saat pertama kali dijalankan. Karena itu, Anda harus berhati-hati saat menggunakan variabel ini di lingkungan CI – kata sandi dapat dilihat oleh siapa saja yang memiliki akses ke log pekerjaan!
File Seed yang Dijalankan Pertama
Anda akan sering memiliki tabel dan data yang ingin Anda seed ke dalam database segera setelah dibuat. Gambar MySQL dikonfigurasi untuk mencari .sh
, .sql
dan .sql.gz
file di /docker-entrypoint-initdb.d
penampung direktori.
Setiap file yang ditemukan akan dieksekusi secara berurutan. Urutan akan selalu abjad. Anda dapat menerapkan awalan nama file (mis. 1-seed_tables.sql
/ 2-seed_data.sql
) untuk memastikan operasi selesai sesuai urutan yang diinginkan.
Mekanisme ini memungkinkan Anda dengan mudah menyemai instans database baru dengan data awal. Anda dapat menulis Dockerfile Anda sendiri, menggunakan MySQL sebagai gambar dasar, dan menambahkan file benih Anda ke /docker-entrypoint-initdb.d
. Atau, ikat mount direktori di host Anda ke direktori container.
MySQL akan mengabaikan file inisialisasi kecuali tidak ada database di direktori data. Menghapus konten direktori data Anda akan memicu inisialisasi baru saat Anda memulai ulang penampung.
Mengubah Pengaturan Server
File konfigurasi server MySQL akan dimuat dari /etc/mysql/conf.d
. Tambahkan file konfigurasi Anda sendiri ke direktori ini, menggunakan override Dockerfile atau bind mount, untuk menyesuaikan pengaturan server. Anda bisa mendapatkan daftar opsi yang tersedia dari manual Server MySQL.
Menggunakan file opsi memudahkan untuk melihat dan mengedit konfigurasi Anda di masa mendatang. Anda memeriksa file Anda ke dalam kontrol versi bersama proyek Anda. Namun, tanda baris perintah juga tersedia untuk tweak dan eksperimen satu kali.
docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest --general-log=on
Varian docker run
akan memulai MySQL dengan log kueri umum diaktifkan. mysql
biner adalah titik masuk gambar, jadi flag diteruskan ke docker run
setelah nama gambar akan diteruskan ke mysql
.
Kesimpulan
Menjalankan MySQL dalam Docker jauh lebih cepat dan mudah daripada menginstal MySQL Server "bare-metal." Anda dapat menjalankan beberapa instance MySQL tanpa risiko konflik.
Gambar Docker resmi hadir dengan opsi konfigurasi yang berguna dan dukungan bawaan untuk seed database yang dijalankan pertama kali. Ini memungkinkan Anda memulai dengan cepat, baik Anda memulai dari awal atau menggunakan skema yang sudah ada.
TERKAIT: Cara Cepat Menyebarkan WordPress sebagai Docker Container