เกี่ยวกับแอปพลิเคชันโหนดนี้
แอปพลิเคชันนี้มี package.json, server.js และไฟล์. gitignore ซึ่งง่ายพอที่จะทำได้ง่าย
. gitignore
node_modules/*
package.json
{"NAME": "DOCKER-DEV", "เวอร์ชัน": "0.1.0", "คำอธิบาย": "Docker dev", "การพึ่งพา": {"Connect-Redis": "1.4.5", "Express": "3.3.3", "Hiredis": "0.1.15"Server.js
var express = require ('express'), app = express (), redis = reghed ('redis'), redisstore = ต้องการ ('Connect-redis') (ด่วน), เซิร์ฟเวอร์ = ต้องการ ('http') createserver (app); app.configure redisstore ({host: process.env.redis_host || 'localhost', พอร์ต: process.env.redis_port || 6379, db: process.env.redis_db || 0}), คุกกี้: {หมดอายุ: เท็จ, maxage: 30 * 24 * 60 * 1,000}); res.json ({สถานะ: "ตกลง"});}); var port = process.env.http_port || 3000; Server.Listen (พอร์ต); console.log ('ฟังบนพอร์ต' + พอร์ต);Server.js ดึงการพึ่งพาทั้งหมดและเปิดใช้งานแอปพลิเคชันเฉพาะ แอปพลิเคชันเฉพาะนี้ถูกตั้งค่าเพื่อจัดเก็บข้อมูลเซสชันใน REDIS และเปิดเผยจุดสิ้นสุดคำขอที่จะตอบกลับข้อความสถานะ JSON ทั้งหมดนี้เป็นสิ่งที่เป็นมาตรฐานมาก
สิ่งหนึ่งที่ควรทราบคือข้อมูลการเชื่อมต่อสำหรับ Redis สามารถเขียนใหม่โดยใช้ตัวแปรสภาพแวดล้อม - สิ่งนี้จะมีบทบาทในการย้ายถิ่นฐานในภายหลังจากสภาพแวดล้อมการพัฒนา dev ไปจนถึงสภาพแวดล้อมการผลิต
ไฟล์ Docker
สำหรับความต้องการในการพัฒนาเราจะมี Redis และ Node Run ในคอนเทนเนอร์เดียวกัน ในการทำเช่นนี้เราจะใช้ DockerFile เพื่อกำหนดค่าคอนเทนเนอร์นี้
Dockerfile
จาก Dockerfile / Ubuntumaintainer Abhinav Ajgaonkar <[email protected]># ติดตั้ง redisrun / apt-get -y -Qq ติดตั้ง python redis -server# ติดตั้ง noderun / 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.10.10 /ln -s/opt/node/bin/* && /rm -f /opt/node-v0.10.28-linux-x64.tar.gz# ตั้งไดเรกทอรีการทำงาน Directoryworkdir /srccmd [" /bin /bash"
มาเข้าใจกันทีละคน
จาก DockerFile/Ubuntu
เวลานี้ Docker ได้รับคำสั่งให้ใช้ภาพ DockerFile/Ubuntu ที่จัดทำโดย Docker Inc. เป็นภาพมาตรฐานในการสร้าง
วิ่ง /
APT -GET -Y -QQ ติดตั้ง Python Redis -Server
ภาพมาตรฐานไม่มีอะไรเลย - ดังนั้นเราจำเป็นต้องใช้ APT -GET เพื่อให้ได้ทุกอย่างที่แอปพลิเคชันต้องการเรียกใช้ ประโยคนี้จะติดตั้ง Python และ Redis-Server เซิร์ฟเวอร์ Redis เป็นสิ่งจำเป็นเพราะเราจะเก็บข้อมูลเซสชันไว้ในนั้นและความจำเป็นของ Python คือมันสามารถสร้างขึ้นในส่วนขยาย C ที่ต้องการโดยโมดูลโหนด Redis ผ่าน NPM
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 && /mv0. && /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
การดาวน์โหลดนี้และแยกไบนารี NodeJS 64 บิต
workdir /src
ประโยคนี้จะบอก Docker ว่าเมื่อคอนเทนเนอร์เริ่มต้นแล้วจะต้องทำ CD /SRC หนึ่งครั้งก่อนที่จะดำเนินการสิ่งที่ระบุโดยคุณสมบัติ CMT
cmd ["/bin/bash"]
เป็นขั้นตอนสุดท้าย Run /Bin /Bash
สร้างและเรียกใช้คอนเทนเนอร์
ตอนนี้ไฟล์ Docker ถูกเขียนขึ้นมาสร้างภาพนักเทียบท่า
Docker build -t sqldump/docker -dev: 0.1
เมื่อสร้างภาพเราสามารถเรียกใช้คอนเทนเนอร์โดยใช้คำสั่งต่อไปนี้:
Docker Run -i -t - -rm / -p 3000: 3000 / -v `pwd`: / src / sqldump / docker -dev: 0.1
ลองมาดูสิ่งที่เกิดขึ้นในคำสั่ง Docker Run
-I จะเริ่มคอนเทนเนอร์ในโหมดอินเทอร์แอคทีฟ (เทียบกับ -D อยู่ในโหมดแยกต่างหาก) ซึ่งหมายความว่าเมื่อเซสชันแบบโต้ตอบสิ้นสุดลงคอนเทนเนอร์จะออก
-t จะกำหนด pseudo-tty
--RM จะลบคอนเทนเนอร์และระบบไฟล์เมื่อออก
-P 3000: 3000 จะส่งต่อพอร์ต 3000 บนโฮสต์ไปยังพอร์ต 3000 บนคอนเทนเนอร์
-v `pwd`:/src
ประโยคนี้จะติดตั้งไดเรกทอรีการทำงานปัจจุบันไปที่ /src ในคอนเทนเนอร์โฮสต์ (ตัวอย่างเช่นไฟล์โครงการของเรา) เราแขวนไดเรกทอรีปัจจุบันเป็นระดับเสียงแทนที่จะใช้คำสั่ง ADD ใน DockerFile เพื่อให้การแก้ไขใด ๆ ที่เราทำในตัวแก้ไขข้อความสามารถเห็นได้ทันทีในคอนเทนเนอร์
SQLDUMP/DOCKER-DEV: 0.1 เป็นชื่อและเวอร์ชันของภาพ Docker ที่จะเรียกใช้ นี่คือชื่อและเวอร์ชันที่เราใช้ในการสร้างอิมเมจนักเทียบท่า
เนื่องจาก DockerFile ระบุ cmd ["/bin/bash"] ทันทีที่คอนเทนเนอร์เริ่มต้นเราจะเข้าสู่สภาพแวดล้อมของ Shell Bash หากคำสั่ง Docker Run ดำเนินการเรียบร้อยแล้วมันจะมีลักษณะดังต่อไปนี้:
เริ่มการพัฒนา
ตอนนี้คอนเทนเนอร์กำลังทำงานอยู่ก่อนที่เราจะเริ่มเขียนโค้ดเราจะต้องจัดเรียงสิ่งที่ไม่เกี่ยวข้องกับมาตรฐาน ก่อนอื่นเราต้องใช้คำสั่งต่อไปนี้เพื่อเริ่มเซิร์ฟเวอร์ Redis ในคอนเทนเนอร์:
บริการ Redis-Server เริ่มต้น
จากนั้นติดตั้งการพึ่งพาโครงการและ Nodemon Nodemon สังเกตการเปลี่ยนแปลงในไฟล์โครงการและรีสตาร์ทเซิร์ฟเวอร์ในเวลา
npm installnpm ติดตั้ง -g nodemon
สุดท้ายเริ่มเซิร์ฟเวอร์ด้วยคำสั่งต่อไปนี้:
Nodemon Server.js
ตอนนี้ถ้าคุณไปที่ http: // localhost: 3000 ในเบราว์เซอร์ของคุณคุณควรเห็นอะไรเช่นนี้:
มาเพิ่มจุดสิ้นสุดอื่น ๆ เช่น Server.js เพื่อจำลองกระบวนการพัฒนา:
app.get ('/hello/: name', function (req, res) {res.json ({hello: req.params.name});});คุณจะเห็นว่า Nodemon ตรวจพบการเปลี่ยนแปลงที่คุณทำและรีสตาร์ทเซิร์ฟเวอร์:
และตอนนี้ถ้าคุณนำทางเบราว์เซอร์ของคุณไปที่ http: // localhost: 3000/hello/world คุณจะเห็นคำตอบต่อไปนี้:
สภาพแวดล้อมการผลิต
ภาชนะบรรจุในสถานะปัจจุบันอยู่ไกลจากการปล่อยตัวเป็นผลิตภัณฑ์ ข้อมูลใน Redis จะไม่คงอยู่อีกต่อไปเมื่อรีสตาร์ทข้ามภาชนะ ตัวอย่างเช่นหากคุณรีสตาร์ทคอนเทนเนอร์ข้อมูลเซสชันทั้งหมดจะถูกลบออก สิ่งเดียวกันจะเกิดขึ้นเมื่อคุณทำลายคอนเทนเนอร์และเปิดคอนเทนเนอร์ใหม่ซึ่งเห็นได้ชัดว่าไม่ใช่สิ่งที่คุณต้องการ ฉันจะพูดคุยเกี่ยวกับปัญหานี้ในเนื้อหาที่ผลิตในส่วนที่สอง