Takeaways Key
Pasukan Docker sudah mempunyai imej MySQL yang sedia untuk kami gunakan. Sebelum menjalankan sebarang arahan di terminal, pastikan anda membaca dokumentasi untuk imej ini. Versi terkini pada masa penulisan ialah 5.7. Walau bagaimanapun, nama tag terkini ialah 5.6. Versi terkini imej boleh untuk mana -mana versi terdahulu, tetapi satu dalam keadaan stabilnya.
Perintah asas untuk menyediakan bekas menggunakan imej ini ialah:
docker run --name wordpressdb -d mysql:5.7
Jika anda menjalankan Docker PS, anda akan melihat bahawa bekas WordPressDB tidak berjalan. Ia sepatutnya berjalan. Jalankan log Docker WordPressdb dan anda akan melihat mesej seperti ini:
docker run --name wordpressdb -d mysql:5.7
Mengapa begitu? Ini kerana kami tidak lulus kata laluan root sebagai hujah ketika pertama kali membina bekas. Jadi mari kita lakukan itu. Pertama, kita perlu memadam bekas yang kita buat dengan nama WordPressdb menggunakan Docker RM WordPressdb. Ini kerana bekas baru akan menggunakan nama yang sama dan tidak boleh ada dua bekas dengan nama yang sama.
jadi mari buat bekas kita lagi. Kita perlu lulus pemboleh ubah alam sekitar apabila kita mula -mula membuat bekas. Ia sepatutnya kelihatan seperti ini:
error: database is uninitialized and MYSQL_ROOT_PASSWORD not set Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?
-e mysql_root_password = kata laluan adalah pemboleh ubah alam sekitar. Apabila bekas sedang dibina dari imej, ia membaca pembolehubah ini dan menetapkan kata laluan untuk pengguna root ke nilai yang ditentukan, yang dalam kes ini adalah kata laluan.
Jika anda kini menyemak log Docker WordPressdb, anda akan melihat mesej yang sangat panjang, tetapi jangan risau tentang ini, ia berfungsi. Sekali lagi, jalankan Docker PS dan anda akan melihat bekas dengan nama WordPressdb yang aktif dan berjalan.
Anda juga boleh lulus pembolehubah alam sekitar yang lain ke dalam bekas anda, anda boleh mencari senarai lengkap pada dokumentasi imej MySQL. Inilah contoh lain:
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
Jika anda cuba mengeluarkan bekas sebelumnya dengan nama WordPressdb, ia mungkin gagal. Itu kerana bekas masih berjalan di latar belakang. Anda boleh menghentikan bekas yang sedang berjalan dan kemudian mengeluarkannya atau hanya memaksa mengeluarkannya:
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -d mysql:5.7
Jika kita menggunakan mysql_database, ia memastikan bahawa pangkalan data dengan nama itu dibuat. Dengan cara ini, kita tahu pasti nama pangkalan data dan kata laluan akar. Anda juga boleh membuat pengguna lain dengan kata laluan dan pangkalan data. Berikut adalah ujian cepat untuk anda, lihat dokumen mereka dan cuba lakukan ini sendiri.
Jika anda ingin mengetahui lebih lanjut bagaimana bekas ini dibina, lihat Dockerfile. Ia menggunakan Debian Wheezy dan membina bekas menggunakan arahan bash. Ia menariknya dari repositori dan kemudian memulakan MySQLD. Apabila membina bekas anda dari imej ini, kali pertama ia akan melaksanakan arahan fail binaan. Apabila menggunakan bekas, ia hanya akan melaksanakan mysqld.
Sekarang kita mempunyai bekas MySQL yang menjalankan, kita boleh menjalankan bekas yang menjalankan WordPress.
Untuk bekas ini kita akan menggunakan imej PHP. Terdapat tiga jenis imej PHP, kita hanya memerlukan imej PHP yang datang dengan Apache.
docker rm -f wordpressdb
tanpa pilihan, ia tidak akan berjalan di latar belakang, sebaliknya ia akan menunjukkan kepada anda semua bekas yang dikeluarkan (cara yang sama yang log Docker [container_name] tidak).
dari output, anda dapat melihat bahawa ia telah memberikan IP secara automatik ke bekas itu. Dalam kes saya ia adalah 172.17.0.35. Jika anda melawat alamat ini menggunakan penyemak imbas anda, anda akan mendapat ralat yang dilarang. Mengapa itu? Ini kerana tiada apa -apa dalam folder/var/www/html (pada sistem fail kontena), ia kosong.
Jadi bagaimana kita boleh meletakkan fail dalam folder itu? Secara lalai, folder itu kekal di dalam bekas, dan ia tidak kelihatan. Walau bagaimanapun, tidak lama (jangan lupa untuk Docker RM WordPress). Pertama, buat folder dan navigasi di dalamnya (jangan lupa untuk mengeluarkan bekas WordPress lama).
docker run --name wordpressdb -d mysql:5.7
-v digunakan untuk pemetaan dua folder. Bahagian pertama ialah folder pada OS anda dan yang kedua ialah folder dalam sistem fail kontena. Pada sistem seperti UNIX, "$ PWD" mengembalikan lokasi di mana terminal adalah apabila arahan berjalan. Apabila anda mula -mula memulakan terminal, anda akan berada di direktori rumah anda. Bersamaan pada Windows adalah cd.more tentang PWD boleh didapati di sini.
Jadi dalam contoh kami, bahagian pertama ialah "$ pwd/", yang merupakan direktori tempatan dan bahagian kedua ialah/var/www/html/. -V memerlukan kedua -dua jalan penuh. Walau bagaimanapun, jika kita melihat di direktori kerja kita, kita dapat melihat bahawa tiada fail ada di sana. Buat fail yang dipanggil index.php yang mengandungi yang berikut:
error: database is uninitialized and MYSQL_ROOT_PASSWORD not set Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?
Semak ini sekali lagi dalam penyemak imbas anda. Kali ini anda akan melihat bahawa alamat IP telah berubah kerana kami mencipta bekas baru. Setiap kali kita membuat bekas baru, ia mengubah IPnya. Sekiranya anda melihat mesej itu dalam penyemak imbas anda maka anda telah melakukan semuanya dengan betul.
mari kita lihat apa yang berlaku jika kita meletakkan fail WordPress di sana. Hentikan bekas dengan menggunakan Docker Stop WordPress. Dapatkan salinan terbaru WordPress dari WordPress.org dan lepaskan fail di dalam folder projek. Mulakan bekas lagi menggunakan Docker Start WordPress. Juga, perhatikan bahawa anda pada mulanya perlu membuat fail boleh dibaca. Anda boleh menjalankan CHMOD -R 777 ProjectFolder On *Nix Systems. Jika anda memuatkan semula halaman, penyemak imbas anda akan memberitahu anda bahawa:
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
Secara lalai, imej PHP tidak mempunyai lanjutan MySQL dipasang, tetapi kita boleh membetulkannya. Kali ini kita akan membina bekas melalui Dockerfile. Kami sudah melihat bagaimana kerja dockerfiles. Mereka dibina dari imej asas, melakukan beberapa pemprosesan, kemudian laksanakan satu perintah pada akhirnya.
Buat fail baru bernama Dockerfile:
kami mahu menggunakan php: 5.6-apache imej.
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -d mysql:5.7
maka kami akan memasang lanjutan mysqli.
docker rm -f wordpressdb
Seterusnya, kita perlu melaksanakan apache2-foreground sebagai imej PHP (kita hanya perlu memasang pelanjutan MySQL selepas semua).
docker run --name wordpress php:5.6-apache
Menggunakan fail membina kita boleh membina imej. Menggunakan imej ini, kami membina bekas.
docker run --name wordpress -v "$PWD/":/var/www/html php:5.6-apache
The -t digunakan untuk memberikan nama repositori. The. memberitahu Docker di mana Dockerfile terletak. Oleh kerana Dockerfile terletak di direktori kerja ,. memberitahu Docker bahawa ia berada dalam direktori kerja.
Jika anda menyemak imej dengan imej Docker, anda akan melihat imej baru dengan TAG terkini (kerana kami tidak menentukan tag untuk imej ini). Sekarang bina bekas bekas ini dengan imej ini seperti yang kita lakukan dengan imej php5.6-apache.
docker run --name wordpressdb -d mysql:5.7
periksa penyemak imbas anda untuk IP bekas dan anda akan melihat sesuatu seperti ini:
Jika anda mendapat sejauh ini, maka anda telah melakukan semuanya dengan betul. Sekarang kita perlu menghubungkan WordPress dengan pangkalan data. Ini jauh dari pemasangan 5 minit yang terkenal dari WordPress dan lebih kompleks, tetapi anda akan dapat melihat manfaat Docker dalam jangka masa panjang.
Jadi bagaimana kita menghubungkan WordPress dengan pangkalan data? Mula -mula kita perlu menghubungkan bekas WordPress dengan bekas pangkalan data (WordPressDB). Ini boleh dilakukan melalui menghubungkan dua bekas. Lebih banyak mengenai menghubungkan boleh didapati di sini.
error: database is uninitialized and MYSQL_ROOT_PASSWORD not set Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?
hujah -hujah baru adalah - -link. Bahagian pertama WordPressdb adalah nama bekas yang ingin kita hubungkan, dan bahagian kedua MySQL adalah alias. Docker mengubah tuan rumah bekas WordPress dan menetapkan IP WordPressdb ke MySQL. Oleh itu, apabila kami mengisi maklumat untuk pangkalan data pada konfigurasi WordPress, kami akan menetapkan tuan rumah kepada 'MySQL'.
Sekarang pergi ke penyemak imbas anda menggunakan IP bekas (IP baru). Isi maklumat untuk pangkalan data dan log masuk ke panel pentadbir. Jika anda cuba memasang tema baru (yang akan cuba membuat perubahan pada sistem fail), anda akan melihat sesuatu seperti ini:
Mengapa begitu? Ini kerana pengguna yang menjalankan Apache tidak mempunyai akses menulis pada sistem fail. Di sinilah keadaan menjadi sedikit sukar. Kita perlu membina versi baru imej phpWithMySQL. Pergi ke Dockerfile anda dan ubah suai untuk kelihatan seperti ini:
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
kami belum membuat fail entrypoint.sh lagi, tetapi kami akan melakukan ini tidak lama lagi. Salin salinan entrypoint.sh ke / di dalam bekas. CHMOD 777 /EntryPoint.sh menjadikan fail itu boleh dilaksanakan. Dan akhirnya EntryPoint melaksanakan fail itu. Sekarang buat fail entrypoint.sh dalam direktori yang sama seperti dockerfile.
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -d mysql:5.7
Ini adalah penyelesaian yang dipermudahkan dari imej WordPress rasmi, tetapi akan memastikan kami mempunyai akses menulis ke sistem fail kontena. Sekarang kita boleh membina imej baru:
docker rm -f wordpressdb
Pastikan untuk mengeluarkan bekas lama dan buat bekas baru:
docker run --name wordpress php:5.6-apache
docker run --name wordpress -v "$PWD/":/var/www/html php:5.6-apache
<span><span><?php </span></span><span> </span><span><span>phpinfo(); </span></span><span> </span><span><span>?></span></span>
Juga, keluarkan fail WP-config.php lama.
Sekarang periksa IP untuk bekas WordPress anda dalam penyemak imbas anda. Kali ini anda boleh memasang tema dan plugin, dan membuat perubahan pada sistem fail kontena.
Beberapa langkah di atas mungkin kelihatan agak misteri dan kompleks. Itulah sebabnya terdapat imej rasmi untuk pelbagai rangka dan bahasa yang berbeza. Setiap kerangka atau bahasa mempunyai spesifikasi yang berbeza mengenai cara mereka bekerja. Secara lalai, Docker tidak membenarkan aplikasi menulis di sistem fail. Adakah ini perkara yang buruk atau baik? Saya fikir ia adalah perkara yang baik. Kami boleh membuat bekas ketiga yang hanya memegang fail. Terdapat permohonan boleh menulis fail. Dengan cara ini kita akan mempunyai seni bina yang lebih modular. Tetapi bagi rangka kerja yang tidak dapat diubah (seperti WordPress), terdapat penyelesaian.
Perkara terakhir yang perlu kita lakukan ialah menyelesaikan masalah yang berlaku apabila anda menghentikan bekas WordPress, dan mulakannya semula. Masalahnya ialah WordPress menyelamatkan IP terakhir sebagai url 'rumah' dan 'tapak'. Hentikan bekas WordPress dan mulakannya lagi. Kali ini ia akan mempunyai IP baru. Jika anda mencuba dalam penyemak imbas anda, anda akan melihat bahawa imej, fail CSS dan JavaScript tidak dimasukkan dengan betul. Penyelesaiannya mudah, hanya ubah suai wp-config.php dengan menambahkan baris ini:
docker run --name wordpressdb -d mysql:5.7
Perhatikan bahawa jika anda menentukan nilai-nilai ini dalam fail WP-config.php anda, anda tidak boleh mengubahnya kemudian pada tetapan umum.
Dalam artikel ini, kita meliputi bagaimana kita boleh membina bekas untuk WordPress. Kami melakukannya dengan cara yang agak misteri, dengan arahan panjang yang sukar untuk diingat. Harus ada cara yang lebih mudah, dan ada! Pasukan Docker telah membina imej WordPress yang anda boleh dengan mudah disediakan dalam beberapa minit. Lagipun, siapa yang ingin mengingati setiap arahan untuk menyiapkan WordPress?
Dalam artikel seterusnya dalam siri ini, saya "menunjukkan kepada anda bagaimana menggunakan imej WordPress rasmi, dan kami juga akan belajar cara menggunakan Docker Compose untuk membuat perkara lebih mudah.
Jadi mengapa saya menulis artikel ini jika ada cara yang lebih mudah? Pada asasnya, ia adalah untuk mendapatkan pemahaman yang lebih baik tentang bagaimana Docker berfungsi, untuk melakukan ini, anda perlu mendapatkan tangan anda kotor dengan kerumitan yang mendasari. Ia lebih daripada peraturan peribadi, jadi apabila saya dapat menggunakan Docker esok, saya akan mengetahui lebih lanjut mengenai bagaimana ia berfungsi dan bagaimana untuk tweak untuk keperluan saya. Saya harap anda juga kini mempunyai pemahaman yang lebih mendalam tentang bagaimana Docker berfungsi di belakang tabir. Tinggal untuk artikel ketiga mengenai siri ini di mana kami akan lebih bersenang -senang dengan Docker dan WordPress.
Apa pendapat anda tentang Docker setakat ini? Adakah anda menganggapnya dalam projek anda yang seterusnya? Beritahu saya dalam komen di bawah.
Keselamatan adalah aspek penting ketika menubuhkan bekas Docker untuk WordPress. Untuk memastikan bekas anda selamat, sentiasa gunakan versi terkini Docker dan WordPress. Secara kerap mengemas kini imej dan bekas Docker anda untuk memasukkan patch keselamatan terkini. Juga, gunakan rahsia Docker untuk menguruskan data sensitif seperti kata laluan. Elakkan menjalankan bekas Docker sebagai akar untuk meminimumkan kerosakan yang berpotensi jika bekas dikompromi. Akhir sekali, gunakan alat pengimbasan keselamatan Docker untuk mengenal pasti dan memperbaiki kelemahan dalam imej anda. WordPress, pertimbangkan untuk menggunakan imej asas ringan. Ini mengurangkan saiz imej dan mempercepatkan proses membina. Juga, gunakan pelbagai peringkat Docker untuk memisahkan kebergantungan masa dan runtime, yang dapat mengurangkan saiz imej akhir anda dengan ketara. Di samping itu, hadkan sumber (CPU, ingatan) yang boleh digunakan oleh bekas anda untuk mengelakkannya daripada memakan semua sumber yang tersedia pada mesin tuan rumah. 🎜> Docker menyediakan beberapa alat untuk menyelesaikan masalah. Gunakan arahan 'Docker Logs' untuk melihat log bekas yang sedang berjalan. Jika bekas anda terhempas, gunakan arahan 'Docker Inspect' untuk mendapatkan lebih banyak maklumat mengenai bekas. Anda juga boleh menggunakan arahan 'Docker Stats' untuk memantau penggunaan sumber bekas anda. Sekiranya anda menghadapi masalah rangkaian, gunakan perintah 'Docker Network Inspress' untuk memeriksa rangkaian Docker anda. Laman WordPress yang dijalankan dalam bekas Docker, anda boleh menggunakan arahan 'Docker CP' untuk menyalin fail dari bekas ke mesin tuan rumah. Anda juga boleh menggunakan jumlah Docker untuk meneruskan data. Sekiranya anda menggunakan pangkalan data MySQL, anda boleh menggunakan perintah 'mysqldump' untuk membuat sandaran pangkalan data anda. Menyediakan beberapa alat untuk aplikasi skala. Anda boleh menggunakan Docker Compose untuk menentukan dan menjalankan aplikasi multi-kontainer, dan skala mereka dengan meningkatkan bilangan contoh kontena. Anda juga boleh menggunakan docker swarm atau kubernetes, yang merupakan alat orkestrasi yang boleh mengurus dan skala bekas anda di beberapa tuan rumah. Anda boleh mengautomasikan penempatan laman WordPress anda dalam bekas Docker menggunakan alat CI/CD seperti Jenkins, Travis CI, atau tindakan GitHub. Alat ini boleh membina imej docker anda, menjalankan ujian, dan menggunakan bekas anda ke host Docker atau kluster Kubernet.
Atas ialah kandungan terperinci Cara Membina Bekas Docker secara manual untuk WordPress. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!