Rumah > Artikel > hujung hadapan web > Membangunkan aplikasi NodeJS berdasarkan Docker_node.js
Mengenai apl Node ini
Aplikasi ini mengandungi package.json, server.js dan fail .gitignore, yang cukup mudah untuk digunakan di hujung jari anda.
.gitignore
node_modules/*
pakej.json
{ "name": "docker-dev", "version": "0.1.0", "description": "Docker Dev", "dependencies": { "connect-redis": "~1.4.5", "express": "~3.3.3", "hiredis": "~0.1.15", "redis": "~0.8.4" } }
server.js
var express = require('express'), app = express(), redis = require('redis'), RedisStore = require('connect-redis')(express), server = require('http').createServer(app); app.configure(function() { app.use(express.cookieParser('keyboard-cat')); app.use(express.session({ store: new RedisStore({ host: process.env.REDIS_HOST || 'localhost', port: process.env.REDIS_PORT || 6379, db: process.env.REDIS_DB || 0 }), cookie: { expires: false, maxAge: 30 * 24 * 60 * 60 * 1000 } })); }); app.get('/', function(req, res) { res.json({ status: "ok" }); }); var port = process.env.HTTP_PORT || 3000; server.listen(port); console.log('Listening on port ' + port);
server.js akan menarik semua dependensi dan memulakan aplikasi khusus ini dikonfigurasikan untuk menyimpan maklumat sesi dalam Redis dan mendedahkan titik akhir permintaan, yang akan mengembalikan status JSON sebagai Mesej jawapan.
Satu perkara yang perlu diambil perhatian ialah maklumat sambungan untuk Redis boleh ditindih menggunakan pembolehubah persekitaran - ini akan berguna kemudian apabila berhijrah daripada pembangun persekitaran pembangunan kepada produk persekitaran pengeluaran.
Fail Docker
Untuk keperluan pembangunan, kami akan membenarkan Redis dan Node berjalan dalam bekas yang sama. Untuk melakukan ini, kami akan menggunakan Dockerfile untuk mengkonfigurasi bekas ini.
Fail Docker
FROM dockerfile/ubuntu MAINTAINER Abhinav Ajgaonkar <abhinav316@gmail.com> # Install Redis RUN \ apt-get -y -qq install python redis-server # Install Node RUN \ cd /opt && \ wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-x64.tar.gz && \ tar -xzf node-v0.10.28-linux-x64.tar.gz && \ mv node-v0.10.28-linux-x64 node && \ cd /usr/local/bin && \ ln -s /opt/node/bin/* . && \ rm -f /opt/node-v0.10.28-linux-x64.tar.gz # Set the working directory WORKDIR /src CMD ["/bin/bash"]
Mari kita fahami baris demi baris,
DARI fail docker/ubuntu
Kali ini, beritahu docker untuk menggunakan imej dockerfile/ubuntu yang disediakan oleh Docker Inc. sebagai imej asas untuk membina.
LARIAN
apt-get -y -qq install python redis-server
Imej asas tidak mengandungi apa-apa - jadi kita perlu menggunakan apt-get untuk mendapatkan semua yang kita perlukan untuk menjalankan aplikasi ini. dan keperluan python ialah sambungan C yang diperlukan oleh npm yang boleh dibina sebagai modul nod Redis.
RUN \ cd /opt && \ wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-x64.tar.gz && \ tar -xzf node-v0.10.28-linux-x64.tar.gz && \ mv node-v0.10.28-linux-x64 node && \ cd /usr/local/bin && \ ln -s /opt/node/bin/* . && \ rm -f /opt/node-v0.10.28-linux-x64.tar.gz
Ini akan memuat turun dan mengekstrak binari NodeJS 64-bit.
WORKDIR /src
Ayat ini akan memberitahu docker bahawa setelah bekas telah dimulakan, sebelum melaksanakan perkara yang ditentukan oleh atribut CMD, lakukan cd /src.
CMD ["/bin/bash"]
Sebagai langkah terakhir, jalankan /bin/bash.
Bina dan jalankan bekas
Sekarang setelah fail docker ditulis, mari bina imej Docker.
docker build -t sqldump/docker-dev:0.1 .
Setelah imej dibina, kita boleh menjalankan bekas menggunakan pernyataan berikut:
docker run -i -t --rm \ -p 3000:3000 \ -v `pwd`:/src \ sqldump/docker-dev:0.1
Mari kita lihat apa yang berlaku dalam arahan docker run.
-i akan memulakan bekas dalam mod interaktif (berbanding -d dalam mod terpisah Ini bermakna sebaik sahaja sesi interaktif tamat, bekas itu akan keluar.
-t akan memperuntukkan pseudo-tty.
--rm akan mengalih keluar bekas dan sistem failnya semasa keluar.
-p 3000:3000 akan memajukan port 3000 pada hos kepada port 3000 pada bekas.
-v `pwd`:/src
Ayat ini akan melekapkan direktori kerja semasa ke /src dalam bekas pada hos (contohnya, fail projek kami Kami akan melekapkan direktori semasa sebagai volum dan bukannya menggunakan arahan ADD dalam Dockerfile, jadi kami Sebarang perubahan dibuat). dalam editor teks kelihatan serta-merta dalam bekas.
sqldump/docker-dev:0.1 ialah nama dan versi imej docker untuk dijalankan – ini adalah nama dan versi yang sama yang kami gunakan untuk membina imej docker.
Memandangkan Dockerfile menentukan CMD ["/bin/bash"], sebaik sahaja bekas dimulakan, kami akan log masuk ke persekitaran bash shell Jika arahan docker run berjaya dilaksanakan, ia akan kelihatan seperti berikut :
Mulakan pembangunan
Sekarang bekas sedang berjalan, sebelum kita mula menulis kod, kita perlu menyusun beberapa perkara standard yang tidak berkaitan dengan docker Mula-mula, gunakan pernyataan berikut untuk memulakan pelayan redis dalam bekas:
service redis-server start
Kemudian, pasang kebergantungan projek dan nodemon akan melihat perubahan dalam fail projek dan mulakan semula pelayan apabila sesuai.
npm install npm install -g nodemon
Akhir sekali, mulakan pelayan menggunakan arahan berikut:
nodemon server.js
Sekarang, jika anda menavigasi ke http://localhost:3000 dalam penyemak imbas anda, anda sepatutnya melihat sesuatu seperti ini:
Mari kami menambah satu lagi titik akhir pada Server.js untuk mensimulasikan proses pembangunan:
app.get('/hello/:name', function(req, res) { res.json({ hello: req.params.name }); });
Anda akan melihat bahawa nodemon telah mengesan perubahan yang anda buat dan memulakan semula pelayan:
Sekarang, jika anda menavigasi penyemak imbas anda ke http://localhost:3000/hello/world, anda akan melihat respons berikut:
Persekitaran pengeluaran
Keadaan semasa bekas masih jauh daripada dikeluarkan sebagai produk Data dalam redis tidak lagi kekal sepanjang bekas dimulakan semula. Contohnya, jika anda memulakan semula bekas, semua data sesi akan dipadamkan perkara berlaku apabila anda memusnahkan bekas dan memulakan yang baharu, yang jelas bukan yang anda mahukan. Saya akan bercakap tentang isu ini dalam bahagian kedua kandungan pengeluaran.