Docker: Untuk memulai. Perhatian Sebarkan

Seberapa sering Anda harus mengkonfigurasi lingkungan server untuk menggunakan aplikasi Anda (misalnya, situs web)? Tentunya lebih sering daripada yang saya inginkan.

Dalam kasus terbaik, Anda memiliki skrip yang melakukan semua ini secara otomatis. Dalam kasus terburuk, bisa terlihat seperti ini:

  • instal database D versi xxx
  • instal server web N versi xx, dll.

Pengelolaan lingkungan yang dikonfigurasi dengan cara ini menjadi sangat intensif sumber daya seiring waktu. Apa pun, bahkan perubahan kecil dalam konfigurasi setidaknya berarti:

  • bahwa setiap pengembang harus mengetahui perubahan ini
  • semua perubahan ini harus ditambahkan dengan aman ke lingkungan produksi

Sulit untuk melacak perubahan tersebut dan mengelolanya tanpa alat khusus. Lagi pula, ada masalah dengan konfigurasi dependensi lingkungan. Semakin jauh perkembangan bergerak, semakin sulit untuk menemukan dan memperbaiki masalah ini.

Di atas, saya menggambarkan apa yang disebut vendor lock-in. Untuk pengembangan aplikasi, khususnya tipe server, fenomena ini menjadi masalah besar. Pada artikel ini, kami akan mempertimbangkan salah satu solusi yang mungkin - Docker . Anda akan belajar cara membuat, menggunakan, dan menjalankan aplikasi berdasarkan itu.



/ Penafian: / Ini bukan review dari Docker. Di akhir artikel ini adalah daftar literatur yang berguna yang menjelaskan cara bekerja dengan Docker lebih baik. Ini adalah titik masuk pertama untuk pengembang yang berencana untuk menyebarkan aplikasi node.js menggunakan wadah Docker.

Saat mengembangkan salah satu proyek saya , saya dihadapkan dengan kurangnya artikel rinci, yang memunculkan sejumlah besar sepeda. Posting ini agak terlambat mencoba untuk memperbaiki kekurangan informasi tentang topik tersebut.

Dengan apa dan dengan apa ia makan?


Dengan kata sederhana, Docker adalah abstraksi dari wadah LXC. Ini berarti bahwa proses yang diluncurkan menggunakan Docker hanya akan melihat diri mereka sendiri dan turunannya. Proses semacam itu disebut wadah Docker.

Untuk dapat membuat semacam abstraksi berdasarkan wadah tersebut, gambar ada di Docker (/ docker image /). Berdasarkan gambar Docker, Anda dapat mengonfigurasi dan membuat wadah.

Ada ribuan gambar Docker yang sudah jadi dengan basis data yang sudah diinstal, server web dan elemen penting lainnya. Keuntungan lain dari Docker adalah alat ini sangat ekonomis untuk konsumsi memori, karena hanya menggunakan sumber daya yang dibutuhkan.

Lebih dekat


Kami tidak akan berkutat pada instalasi untuk waktu yang lama. Proses selama beberapa rilis terakhir telah disederhanakan menjadi beberapa klik / tim.

Pada artikel ini, kami akan menganalisis penyebaran aplikasi Docker menggunakan contoh aplikasi Node.js sisi server. Berikut ini adalah kode sumber primitifnya:

// index const http = require('http'); const server = http.createServer(function(req, res) { res.write('hello world from Docker'); res.end(); }); server.listen(3000, function() { console.log('server in docker container is started on port : 3000'); }); 

Kami memiliki setidaknya dua cara untuk mengemas aplikasi dalam wadah Docker:

  • membuat dan menjalankan wadah dari gambar yang ada menggunakan alat command-line-interface;
  • buat gambar Anda sendiri berdasarkan sampel yang sudah jadi.

Metode kedua lebih sering digunakan.

Untuk memulai, unduh gambar resmi node.js:

 docker pull node 

Perintah menarik buruh pelabuhan mengunduh gambar Docker. Setelah itu, Anda dapat menjalankan perintah run docker. Ini akan membuat dan menjalankan wadah berdasarkan gambar yang diunduh.

 docker run -it -d --rm -v "$PWD":/app -w=/app -p 80:3000 node node index.js 

Perintah ini akan meluncurkan file index.js, memetakan 3000 port ke 80 dan menampilkan id dari wadah yang dibuat. Sudah lebih baik! Tetapi pada satu CLI Anda tidak akan pergi jauh. Mari kita membuat Dockerfile untuk server kami.

 FROM node WORKDIR /app RUN cp . /app CMD ["node", "index.js"] 

Dockerfile ini menjelaskan gambar dari mana versi saat ini diwarisi, serta direktori di mana perintah kontainer dan perintah file salin akan mulai dari direktori di mana perakitan gambar diluncurkan. Baris terakhir menunjukkan perintah mana yang akan dijalankan dalam wadah yang dibuat.

Selanjutnya, kita perlu membuat gambar dari Dockerfile ini yang akan kita gunakan: docker build -t username / helloworld-with-docker: 0.1.0 . Perintah ini menciptakan gambar baru, menandainya dengan nama pengguna / helloworld-dengan-buruh pelabuhan dan membuat tag 0,1.0.

Wadah kami sudah siap. Kita bisa menjalankannya dengan perintah run docker. Jadi, kami memecahkan masalah penguncian vendor. Peluncuran aplikasi tidak lagi tergantung pada lingkungan. Kode dikirimkan bersama dengan gambar Docker. Dua kriteria ini memungkinkan kami untuk menyebarkan aplikasi ke tempat di mana kami dapat menjalankan Docker.

Sebarkan


99% pertama tidak begitu mengerikan seperti 99% sisanya.

Setelah kami menyelesaikan semua instruksi di atas, proses penyebaran itu sendiri menjadi masalah teknologi dan lingkungan pengembangan Anda. Kami akan mempertimbangkan 2 opsi untuk menggunakan Docker:

  • penyebaran gambar Docker secara manual;
  • penyebaran menggunakan Travis-CI.

Dalam setiap kasus, kami akan mempertimbangkan pengiriman gambar ke lingkungan yang independen, misalnya, server pementasan produk Anda.

Penerapan manual


Opsi ini baik jika Anda tidak memiliki lingkungan integrasi berkelanjutan. Pertama, Anda perlu mengunggah gambar Docker ke lokasi yang dapat diakses oleh server pementasan. Dalam kasus kami, ini akan menjadi DockerHub. Untuk setiap pengguna, ia menyediakan satu repositori gambar pribadi gratis dan repositori publik dalam jumlah tak terbatas.

Masuk untuk mengakses DockerHub kami:

 docker login -e username@gmail.com -u username -p userpass 

Kami memuat gambar kami di sana: buruh pelabuhan mendorong nama pengguna / helloworld-dengan-buruh pelabuhan: 0.1.0.

Selanjutnya, buka server pementasan (saya ingatkan Anda bahwa Docker harus sudah diinstal sebelumnya).

Untuk menggunakan aplikasi kita di server, kita hanya perlu menjalankan satu perintah:

 docker run -d --rm -p 80:3000 username/helloworld-with-docker:0.1.0. 

Dan itu saja! Periksa daftar gambar lokal. Jika Anda tidak menemukan hasil yang Anda inginkan, masukkan nama pengguna / helloworld-dengan-buruh pelabuhan untuk memeriksa registri DockerHub. Gambar dengan nama ini dapat ditemukan di register, karena kami sudah mengunggahnya di sana. Docker mengunduhnya, membuat wadah berdasarkan itu, dan meluncurkan aplikasi Anda di dalamnya.

Sekarang, setiap kali Anda perlu memperbarui versi aplikasi Anda, Anda dapat mendorong dengan tag baru dan hanya me-restart wadah di server setiap kali.

PS Metode ini tidak disarankan jika dimungkinkan untuk menggunakan Travis-CI.

Menyebarkan dengan Travis-CI


Pertama, tambahkan data DockerHub ke Travis-CI. Mereka akan disimpan dalam variabel lingkungan.

 travis encrypt DOCKER_EMAIL=email@gmail.com travis encrypt DOCKER_USER=username travis encrypt DOCKER_PASS=password 

Kemudian kami menambahkan kunci yang diterima ke file .travis.yml. Kami juga akan menambahkan komentar untuk setiap kunci untuk membedakannya di masa mendatang.

 env: global: - secure: "UkF2CHX0lUZ...VI/LE=" # DOCKER_EMAIL - secure: "Z3fdBNPt5hR...VI/LE=" # DOCKER_USER - secure: "F4XbD6WybHC...VI/LE=" # DOCKER_PASS 

Selanjutnya, kita perlu masuk dan mengunduh gambar:

 after_success: - docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS - docker build -f Dockerfile -t username/hello-world-with-travis. - docker tag username/hello-world-with-travis 0.1.0 - docker push username/hello-world-with-travis 

Selain itu, pengiriman gambar dapat diluncurkan dari Travis-CI dengan berbagai cara:

  • secara manual;
  • melalui koneksi ssh;
  • layanan penyebaran online (Menyebarkan Bot, deployhq);
  • AWS CLI;
  • Kubernate;
  • Alat untuk penyebaran Docker.

Ringkasan


Pada artikel ini, kami memeriksa persiapan dan penyebaran Docker menggunakan server node.js sederhana sebagai contoh dalam dua cara: otomatis dan otomatis menggunakan Travis-CI. Saya harap artikel ini bermanfaat bagi Anda.

Source: https://habr.com/ru/post/id466493/


All Articles