Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan cara membuat aplikasi multi-kontainer dengan MySQL dan Docker Compose. Aplikasi dengan beberapa kontainer memungkinkan Anda mendedikasikan kontainer untuk tugas khusus, sehingga setiap kontainer dapat berfokus pada satu tugas. Ada banyak keuntungan menggunakan aplikasi multi-kontainer:
- Kontainer terpisah memungkinkan Anda mengelola API dan sumber daya front-end secara berbeda dari database.
- Beberapa kontainer memungkinkan Anda membuat versi dan memperbarui versi dalam isolasi.
- Database lokal dapat dipertahankan dalam kontainer, dan layanan terkelola digunakan untuk basis data dalam produksi.
- Aplikasi multi-kontainer lebih efisien daripada menjalankan beberapa proses dengan manajer proses, yang menambah kompleksitas dalam menyalakan/mematikan kontainer.
Dalam tutorial ini, Anda:
- Mulai MySQL
- Jalankan aplikasi multi-kontainer Anda dengan MySQL
- Membuat file Docker Compose untuk aplikasi Anda
- Jalankan tumpukan aplikasi dengan Docker Compose
Prasyarat
Artikel ini adalah bagian dari seri tutorial. Prosedur ini dibangun berdasarkan contoh yang sudah ada yang memerlukan Docker Desktop untuk kontainer Linux.
Pendekatan yang direkomendasikan adalah menyelesaikan tutorial pertama, Membuat aplikasi kontainer, termasuk memenuhi prasyarat, dan juga tutorial, Mempertahankan data di aplikasi Anda. Setelah Anda bekerja melalui tutorial ini, lanjutkan dengan prosedur yang dijelaskan dalam artikel ini.
Contoh dalam artikel ini menggunakan Docker Compose.
- Windows
- Linux
Docker Desktop untuk Windows menyertakan Docker Compose.
Jalankan perintah berikut untuk memverifikasi penginstalan Docker Anda:
docker-compose version
Visual Studio Code
Seri tutorial ini menjelaskan prosedur untuk Visual Studio Code (VISUAL Code). Tinjau pertimbangan berikut untuk bekerja di lingkungan ini:
Gunakan menu sebelah kiri untuk beralih antara tampilan CONTAINER EXPLORER atau EXPLORER (file dan folder):
Buka jendela baris perintah di Visual Studio Code dengan memilih Terminal >Terminal Baru. Anda juga dapat menggunakan pintasan keyboard Ctrl+Shift+` (tanda centang belakang).
Kecuali ditentukan lain, jalankan perintah di jendela Bash. Sebagian besar perintah berlabel untuk
Bashdijalankan di jendela Bash atau di jendela baris perintah Visual Studio Code.
Mulai sistem manajemen database MySQL
Secara default, kontainer berjalan dalam isolasi. Kontainer tidak mengetahui proses lain atau kontainer lain di komputer yang sama.
Untuk mengaktifkan komunikasi antar kontainer, mereka perlu terhubung ke jaringan yang sama. Beberapa kontainer pada jaringan yang sama dapat berbagi data dan memproses informasi satu sama lain.
Ada dua cara untuk melampirkan kontainer ke jaringan. Anda dapat melampirkan kontainer ke jaringan selama pembuatan, atau melampirkan kontainer yang ada ke jaringan di lain waktu.
Dalam contoh ini, Anda membuat jaringan dan melampirkan kontainer MySQL saat startup.
Buat jaringan bernama
todo-app:docker network create todo-appMulai kontainer MySQL bernama
todo-mysql-datadan lampirkan ke jaringantodo-app. Perintah membuat alias jaringanmysqluntuk database MySQLtodos.Saat Anda menjalankan perintah, masukkan password root MySQL Anda untuk tempat penampung
<your-password>.docker run -d --network todo-app --network-alias mysql -v todo-mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=<your-password> -e MYSQL_DATABASE=todos mysql:ltsPerintah ini juga menentukan variabel lingkungan
MYSQL_ROOT_PASSWORDdanMYSQL_DATABASE. Untuk informasi selengkapnya, lihat daftar MySQL Docker Hub.Peringatan
Tutorial ini mengilustrasikan kredensial kata sandi untuk mengautentikasi dengan database MySQL, yang bukan metode yang paling aman. Lihat dokumentasi MySQL untuk mempelajari tentang metode autentikasi yang lebih aman.
Dapatkan ID kontainer Anda untuk digunakan di langkah berikutnya.
docker psKonfirmasikan bahwa Anda dapat tersambung ke kontainer di jaringan
mysql.Saat Anda menjalankan perintah, masukkan ID kontainer Anda pada placeholder
<mysql-container-id>.docker exec -it <mysql-container-id> mysql -pPada perintah, masukkan kata sandi yang Anda berikan saat membuat kontainer
todo-mysql-data.Di shell MySQL, cantumkan database dan verifikasi bahwa Anda melihat database
todos.SHOW DATABASES;Anda akan melihat output berikut:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | todos | +--------------------+ 5 rows in set (0.00 sec)Untuk mengakhiri koneksi dan kembali ke prompt baris perintah, masukkan keluar.
Menjalankan aplikasi Anda dengan MySQL
Aplikasi todo mendukung pengaturan variabel lingkungan tertentu untuk menentukan pengaturan koneksi MySQL Anda. Tabel berikut mencantumkan variabel yang didukung, dan nilai yang digunakan dalam contoh yang disajikan di bagian ini.
| Nama variabel | Contoh nilai | Deskripsi |
|---|---|---|
MYSQL_HOST |
mysql |
Nama host untuk server MySQL. |
MYSQL_USER |
root |
Nama pengguna yang digunakan untuk koneksi. |
MYSQL_PASSWORD |
<your-password> |
Kata sandi yang digunakan untuk koneksi. Dalam contoh ini, ganti kata sandi root Anda dengan penampung <your-password>. |
MYSQL_DATABASE |
todos |
Nama database yang akan digunakan setelah koneksi dibuat. |
Peringatan
Menggunakan variabel lingkungan untuk mengatur pengaturan koneksi dapat diterima untuk pengembangan, tetapi praktik ini tidak disarankan untuk menjalankan aplikasi dalam produksi. Untuk informasi selengkapnya, lihat Mengapa Anda tidak boleh menggunakan variabel lingkungan untuk data rahasia.
Mekanisme yang lebih aman adalah menggunakan dukungan rahasia yang disediakan oleh kerangka kerja orkestrasi kontainer Anda. Dalam kebanyakan kasus, rahasia ini dipasang sebagai file dalam kontainer yang sedang berjalan.
Dalam contoh berikut, Anda memulai aplikasi dan menyambungkan kontainer aplikasi ke kontainer MySQL Anda.
Jalankan perintah
dockerberikut. Perhatikan bagaimana perintah menentukan variabel lingkungan yang dijelaskan sebelumnya.Saat Anda menjalankan perintah, ingatlah untuk memasukkan kata sandi root MySQL Anda untuk placeholder
<your-password>.docker run -dp 3000:3000 -w /app -v ${PWD}:/app --network todo-app -e MYSQL_HOST=mysql -e MYSQL_USER=root -e MYSQL_PASSWORD=<your-password> -e MYSQL_DB=todos node:lts-alpine sh -c "yarn install && yarn run dev"Di editor Visual Studio Code, buka Penjelajah Kontainer, klik kanan kontainer aplikasi Anda, dan pilih Tampilkan Log.
Anda juga dapat melihat log dari baris perintah dengan menggunakan perintah
docker logs.Tinjau keluaran log. Perhatikan baris yang menunjukkan aplikasi tersambung ke database MySQL:
Connected to mysql db at host mysql.# Previous log messages omitted $ nodemon src/index.js [nodemon] 1.19.2 [nodemon] to restart at any time, enter `rs` [nodemon] watching dir(s): *.* [nodemon] starting `node src/index.js` Connected to mysql db at host mysql Listening on port 3000Di browser internet Anda, buka aplikasi yang sedang berjalan:
http://localhost:3000.Di aplikasi anda yang sedang berjalan, tambahkan beberapa item ke daftar todo Anda.
Sambungkan ke database kontainer MySQL di jaringan
mysqlsehingga Anda dapat memeriksa database.Saat Anda menjalankan perintah, masukkan ID kontainer Anda pada placeholder
<mysql-container-id>.docker exec -ti <mysql-container-id> mysql -p todosPada perintah, masukkan kata sandi yang Anda berikan saat membuat kontainer
todo-mysql-data.Di shell MySQL, verifikasi bahwa
todo_itemsyang Anda tambahkan ditulis ke databasetodos.use todos; select * from todo_items;Anda akan melihat output yang mirip dengan contoh berikut:
+--------------------------------------+--------------------+-----------+ | id | name | completed | +--------------------------------------+--------------------+-----------+ | c906ff08-60e6-44e6-8f49-ed56a0853e85 | Do amazing things! | 0 | | 2912a79e-8486-4bc3-a4c5-460793a575ab | Be awesome! | 0 | +--------------------------------------+--------------------+-----------+
Anda sekarang memiliki aplikasi yang menyimpan data dalam database eksternal yang berjalan dalam kontainer terpisah. Prosedur ini menunjukkan bagaimana Anda dapat mengaktifkan komunikasi antar kontainer dengan menggunakan jaringan.
Membuat file Docker Compose
Docker Compose membantu Anda menentukan dan berbagi aplikasi multi-kontainer. File Docker Compose dapat menentukan semua layanan yang diperlukan, sehingga Anda dapat memulai atau mengakhiri semua proses terkait dengan satu perintah. Anda dapat menentukan tumpukan aplikasi Anda dalam file Docker Compose di akar repositori proyek Anda, dan mempertahankan konfigurasi Anda di bawah kontrol versi. Pendekatan ini memungkinkan orang lain untuk berkontribusi pada proyek Anda ketika mereka mengkloning repositori Anda.
Dalam contoh berikut, Anda mengonfigurasi file Docker Compose untuk aplikasi multi-kontainer Anda todo.
Di akar proyek aplikasi
todoAnda, buat file Docker Compose bernama docker-compose.yml.Nota
Secara default, versi skema YAML diatur ke versi terbaru. Saat menjalankan aplikasi, jika versi skema Anda usang, Anda akan menerima pesan peringatan. Untuk meninjau versi skema saat ini dan matriks kompatibilitas, lihat Ikhtisar (Compose file).
Dalam file docker-compose.yml, tambahkan elemen berikut. Tentukan
nameaplikasi Anda dan mulai daftarservices(atau kontainer) yang ingin Anda jalankan sebagai bagian dari aplikasi Anda.name: todo services:Daftar layanan unik untuk aplikasi Anda. Contohnya termasuk
app,web,db,proxy, dan sebagainya. Anda memperluas definisi untuk elemenservicesdi langkah selanjutnya.Petunjuk
Indentasi penting dalam file .yml. Jika Anda mengedit di Visual Studio Code, Intellisense menunjukkan kesalahan dalam format atau sintaks.
Kembali ke definisi
servicesdalam file docker-compose.yml. Perluas definisi dengan menambahkan entri untuk menentukan elemen layananapp, yang mencakup gambar untuk kontainer.services: app: image: node:lts-alpineAnda dapat memilih nama apa pun untuk layanan ini. Nama secara otomatis menjadi alias jaringan, yang berguna saat Anda menentukan layanan MySQL.
Perluas definisi elemen
appuntuk menentukancommandyang akan dijalankan.app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev"Tentukan
portsuntuk digunakan dengan layananapp. Perhatikan port ini sesuai dengan argumen-p 3000:3000untuk perintah yang digunakan untuk menjalankan aplikasi dengan MySQL.app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev" ports: - 3000:3000Identifikasi direktori kerja
working_diruntuk layananappdan jugavolumesyang telah dipetakan.app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev" ports: - 3000:3000 working_dir: /app volumes: - ./:/appSaat menentukan volume Docker Compose, Anda dapat menggunakan jalur relatif berdasarkan direktori saat ini.
Tentukan definisi variabel
environmentyang akan digunakan saat Anda menjalankan perintah untuk layananapp.app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev" ports: - 3000:3000 working_dir: /app volumes: - ./:/app environment: MYSQL_HOST: mysql MYSQL_USER: root MYSQL_PASSWORD: <your-password> MYSQL_DB: todosIngatlah untuk memasukkan kata sandi pengguna root MySQL Anda untuk tempat penampung
<your-password>.Tambahkan definisi untuk layanan MySQL
mysqlsetelah definisi layananapp. Tentukan nama dan nilai elemen seperti yang ditunjukkan dan dengan indentasi yang sama.services: app: ... mysql: image: mysql:ltsDefinisi layanan
mysqlsesuai dengan perintah yang Anda gunakan sebelumnya untuk memulai MySQL. Saat Anda menentukan layanan, layanan secara otomatis menerima alias jaringan.Identifikasi pemetaan
volumesuntuk layananmysql.services: app: ... mysql: image: mysql:lts volumes: - todo-mysql-data:/var/lib/mysqlTentukan definisi variabel
environmentyang akan digunakan saat Anda menjalankan perintah untuk layananmysql.services: app: ... mysql: image: mysql:lts volumes: - todo-mysql-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: <your-password> MYSQL_DATABASE: todosIngatlah untuk memasukkan kata sandi pengguna root MySQL Anda untuk tempat penampung
<your-password>.Tentukan pemetaan volume untuk seluruh aplikasi. Tambahkan bagian
volumes:setelah bagianservices:dan dengan indentasi yang sama.services: ... volumes: todo-mysql-data:Konfirmasikan file docker-compose.yml Anda yang telah selesai terlihat seperti contoh berikut. Anda akan melihat kata sandi root MySQL Anda untuk tempat penampung
<your-password>.name: todo services: app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev" ports: - 3000:3000 working_dir: /app volumes: - ./:/app environment: MYSQL_HOST: mysql MYSQL_USER: root MYSQL_PASSWORD: <your-password> MYSQL_DB: todos mysql: image: mysql:lts volumes: - todo-mysql-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: <your-password> MYSQL_DATABASE: todos volumes: todo-mysql-data:
Jalankan tumpukan aplikasi dengan Docker Compose
Sekarang Anda dapat mencoba menjalankan file docker-compose.yml Anda.
Hentikan instans aplikasi dan database Anda yang sedang berjalan.
- Visual Studio Code
- Baris Perintah
Ikuti langkah-langkah ini di Visual Studio Code:
Buka PENJELAJAHAN KONTAINER (ekstensi untuk alat kontainer).
Untuk setiap kontainer yang sedang berjalan, klik kanan kontainer dan pilih Hapus.
Mulai aplikasi multi-kontainer Anda beserta semua layanannya.
- Visual Studio Code
- Baris Perintah
Ikuti langkah-langkah ini di Visual Studio Code:
Buka tampilan EXPLORER (file dan folder).
Klik kanan file docker-compose.yml dan pilih Compose Up.
Anda akan melihat output yang mirip dengan contoh berikut:
[+] Building 0.0s (0/0) [+] Running 2/2 ✔ Container app-app-1 Started 0.9s ✔ Container app-mysql-1 RunningOperasi ini membuat volume yang dipetakan untuk aplikasi dan jaringan. Secara default, Docker Compose membuat jaringan khusus untuk tumpukan aplikasi.
Tinjau log untuk kontainer yang sedang berjalan.
- Visual Studio Code
- Baris Perintah
Ikuti langkah-langkah ini di Visual Studio Code:
Buka PENJELAJAHAN KONTAINER (ekstensi untuk alat kontainer).
Klik kanan kontainer aplikasi dan pilih Tampilkan Log.
Anda akan melihat output yang mirip dengan contoh berikut:
mysql_1 | 2019-10-03T03:07:16.083639Z 0 [Note] mysqld: ready for connections. mysql_1 | Version: '5.7.27' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL) app_1 | Connected to mysql db at host mysql app_1 | Listening on port 3000Log menunjukkan nama layanan dan nomor instans, seperti
app_1di awal setiap baris. Format ini membantu Anda membedakan pesan berdasarkan layanan dan instans. Log dari setiap layanan digabungkan ke dalam satu aliran. Pendekatan ini memungkinkan Anda untuk mengawasi masalah terkait waktu.Anda sekarang dapat membuka aplikasi yang sedang berjalan di browser internet Anda:
http://localhost:3000.
Menghentikan Docker Compose dan menjalankan kontainer
Setelah selesai dengan aplikasi dan kontainer, Anda dapat menghapusnya.
- Visual Studio Code
- Baris Perintah
Ikuti langkah-langkah ini di Visual Studio Code:
Buka tampilan EXPLORER (file dan folder).
Klik kanan file docker-compose.yml dan pilih Compose Down.
Operasi ini menghentikan semua kontainer yang sedang berjalan dan menghapus jaringan.
Secara bawaan, volume yang diberi nama dalam file susun Anda tidak dihapus. Jika Anda ingin menghapus volume ini, Anda dapat menggunakan perintah docker-compose down --volumes.
Membersihkan sumber daya
Jika Anda menerapkan komponen Prasyarat dalam seri tutorial ini ke penginstalan Anda, Anda dapat menggunakan kembali konfigurasi untuk pengembangan Docker di masa mendatang. Tidak perlu menghapus atau mencopot komponen apa pun.