آنچه در این مقاله میخوانید
آموزش استفاده از Docker در توسعهی نرمافزار
۴ اسفند ۱۳۹۹
آیا توسعه نرمافزار در Docker برای شما نیز سخت و زمانگیر است؟! اگر پاسخ شما به این سوال بله است، لیارا در جواب به شما خواهد گفت که نگران این موضوع نباشید ما در این مقاله قصد خواهیم داشت تا با استفاده از Docker توسعه نرمافزار را به شما آموزش دهیم؛ اما بهتر است در ابتدای کار بدانید که چرا باید از Docker برای توسعهی نرمافزار استفاده کنید؟ ادامه مطلب را از دست ندهید.
همین حالا به سادگی پروژههای داکر خود را در هاست ابری لیارا دیپلوی کنید!
✅ دامنه رایگان ✅ ترافیک نامحدود ✅ هزینه ساعتی
خرید هاست ابری Docker
آنچه در ادامه خواهید خواند:
- چرا باید از Docker برای توسعه نرم افزار استفاده کرد؟
- آموزش و نحوه استفاده از Docker برای توسعه نرم افزار
- سوالات متداول
- جمع بندی
چرا باید از Docker برای توسعه نرم افزار استفاده کرد؟
دلایل بسیار زیادی برای استفاده از Docker وجود دارد که ما در ادامه به برخی از آنها اشاره خواهیم کرد.
- محیط توسعه برای تمامی اعضای تیم یکسان است و فرقی نمیکند که توسعهدهندگان از چه سیستمعاملی استفاده میکنند.
- محیط development دقیقا همانند محیط production است. این یعنی بدون دردسر و نگرانی میتوانید عملیات استقرار نرمافزار را انجام دهید و برنامه شما بهخوبی اجرا خواهد شد.
- اگر برنامههایی توسعه میدهید که نیاز به کامپایل داشته باشند مطمئنا از سختیها و دردسرهای این کار اطلاع دارید. اما با استفاده از Docker دیگر مهم نیست که از چه سیستمعاملی استفاده میکنید و میتوانید کامپایل برنامههایتان را درون Docker انجام دهید.
- برای توسعهی نرمافزار تنها به Docker نیاز خواهید داشت. این به این معنی است که دیگر نیازی نیست که زبانهای برنامهنویسی مختلف را برای توسعهی هر پروژه بر روی سیستم خود نصب کنید. بهعنوان مثال اگر قصد اجرای یک اسکریپت توسعه داده شده با زبان Ruby را داشته باشید تنها لازم است تا از یک Ruby Docker Image استفاده کنید.
- شما میتوانید به چندین نسخهی مختلف از زبانهای مورد نیاز خود دسترسی داشته باشید.بهعنوان مثال شاید بخواهید برنامهای که با زبان Python توسعه دادهاید را با Python3 اجرا کنید اما تنها Python2 بر روی سیستم شما نصب است. راه حل بسیار ساده برای شما این است که بهراحتی با استفاده از Python3 Image برنامهی خود را اجرا کنید.
- توسعهی نرمافزار در Docker باعث شده تا استقرار برنامه بر روی سرور آسان شود زیرا برنامهی نهایی همانطور که در Docker شما اجرا میشود، به همان صورت نیز در سرور اجرا خواهد شد و کافی است تا کدهای خود را به یک پکیج تبدیل کرده و آن را در سروری با همان Docker Image مستقر کنید. حتی میتوانید Docker Image خود را بههمراه کدهایتان به سرور push کرده و آن Image جدید را اجرا کنید.
- در توسعهی نرمافزار با استفاده از Docker میتوانید برنامه را بدون نیاز به نصب VM در VirtualBox و SSH، با ویرایشگر مورد علاقه خود توسعه دهید.

آموزش و نحوه استفاده از Docker برای توسعه نرم افزار
استفاده از Docker برای توسعه پروژههای مختلف معمولا تفاوت زیادی وجود ندارد اما برای درک بهتر این موضوع ادامه مطلب را با دقت مطالعه کنید.
Ruby
با یک برنامه ساده شروع خواهیم کرد. البته توجه داشته باشید که برای اجرای این اسکریپت نیازی به نصب زبان Ruby نیست. در قدم اول بایستی یک فایل با نام hello.rb
در پوشهای با نام app
ایجاد کنید و کد زیر را در آن قرار دهید.
puts 'Hello Ruby!'
پس از ذخیرهی کدهای بالا، در Terminal سیستمعامل خود به پوشه app بروید و با اجرای دستور زیر اسکریپت Ruby اجرا خواهد شد.
docker run --rm -v "$(pwd)":/app -w /app ruby ruby hello.rb
اگر از command line سیستمعامل Windows استفاده میکنید بایستی $(pwd)
را با %CD%
جایگزین کنید. به مثال زیر توجه کنید!
docker run --rm -v "%CD%":/app -w /app ruby ruby hello.rb
به همین سادگی بدون نصب داشتن زبان Ruby بر روی سیستم خود میتوانید با استفاده از Docker یک اسکریپت توسعه داده شده با زبان Ruby را اجرا کنید. حال بیایید تا یک وابستگی به اسکریپت اضافه کنیم. یک Gemfile
در مسیر پروژه ایجاد کنید و کدهای زیر را در آن قرار دهید.
source 'https://rubygems.org'
gem 'hello-world'
در مرحلهی بعد فایل hello.rb
را با ویرایشگر مورد نظر خود باز کرده و hello-world
را در آن require کنید.
require 'hello-world'
puts 'Hello Ruby!'
اگر با زبان Ruby کار کرده باشید میدانید که برای نصب وابستگی جدید بایستی دستور bundle install
را اجرا کنید تا اسکریپت hello.rb
به درستی اجرا شود اما اگر شما این اسکریپت را در یک Docker container اجرا کنید، با خطا روبرو خواهید شد زیرا وابستگی مورد نیاز اسکریپت، در container نصب نشده و برای نصب وابستگیهای پروژه بهتر است از یک vendor استفاده کنید.
docker run --rm -v "$(pwd)":/app -w /app ruby bundle install --standalone
با اجرای دستور بالا، نصب وابستگیهای اسکریپت را انجام دادهاید اما به یاد داشته باشید که در صورت نیاز کامپایل کدها انجام خواهد شد. اکنون برای استفاده از bundle جدید بایستی require_relative
را در ابتدای فایل hello.rb
قرار دهید.
require_relative 'vendor/bundle/bundler/setup'
require 'hello-world'
puts 'Hello Ruby!'
پس از ذخیرهی فایل، با اجرای دستور زیر میتوانید خروجی اسکریپت را در Console خود مشاهده کنید.
docker run --rm -v "$(pwd)":/app -w /app ruby ruby hello.rb
حتی اگر بخواهید این اسکریپت را با ورژن خاصی از Ruby اجرا کنید میتوانید بهصورت زیر عمل کنید.
docker run --rm -v "$(pwd)":/app -w /app ruby:2.4 ruby hello.rb
راه اندازی برنامه وب با Ruby
برای ساخت برنامههای وب نیاز است تا یک پورت را باز کرده و این عمل در Docker با اضافه کردن -p PORT:PORT
به دستور docker run
انجام میشود. کدهای زیر را در یک فایل با نام webapp.rb
ذخیره کنید.
require_relative 'bundle/bundler/setup'
require 'sinatra'
set :port, 8080
set :bind, '0.0.0.0' # required to bind to all interfaces
get '/' do
"Hello World!"
end
در مرحلهی بعد sinatra
را به Gemfile
اضافه کرده و با دستور bundle install
این gem جدید را در Docker container نصب کنید. همچنین sinatra
به یک پیشنیاز بهنام thin
نیاز دارد بنابراین بایستی با اجرای دستور زیر آن را نصب کرده.
docker run --rm -it -v "$(pwd)":/docktest -w /docktest ruby gem install thin
و در نهایت با اجرای دستور زیر برنامه وب ما اجرا خواهد شد.
docker run -i -t --rm -v "$(pwd)":/app -w /app -p 8080:8080 ruby ruby webapp.rb
برای مشاهده برنامه میتوانید وارد لینک localhost:8080 شوید.
Node.js
برای ساخت اسکریپت Node.js و اجرای آن با Docker بایستی در مرحله اول پیشنیازهای مورد نیاز را در Docker container نصب کنید.
docker run --rm -it -v $PWD:/app -w /app node npm install hello-world-npm
سپس کدهای زیر را در در فایلی با نام hello.js
در پوشهی app
ذخیره کنید.
const helloWorld = require('hello-world-npm');
console.log(helloWorld());
console.log("Hello Node!");
در نهایت برای اجرای اسکریپت میتوانید از دستور زیر استفاده کنید.
docker run --rm -it -v $PWD:/app -w /app node hello.js
Go
کدهای زیر را با نام hello.go
ذخیره کنید.
package main
import (
"fmt"
hello "github.com/treeder/go-hello-world"
)
func main() {
fmt.Println(hello.Hello())
fmt.Println("Hello Go!")
}
سپس دستورات زیر را بهترتیب برای نصب وابستگیها و کامپایل برنامه اجرا کنید.
docker run --rm -i -v $PWD:/app -w /app golang go get github.com/treeder/go-hello-world
docker run --rm -i -v $PWD:/app -w /app golang go build -o myapp
docker run --rm -i -v $PWD:/app -w /app golang ./myapp
سوالات متداول
در ادامه به سوالاتی که امکان دارد در این زمینه برای شما بدون پاسخ بماند، جوابهای کوتاه اما مفیدی دادهایم که با استفاده از آن میتوانید به سوال خود پاسخ صحیحی را بدهید.
آیا برای اجرای برنامه ها در Docker نصب زبان های برنامه نویسی الزامی است؟
خیر. یکی از مزایای اصلی Docker این است که میتوانید بدون نصب زبانهایی مانند Ruby , Node.js یا Go روی سیستم خود، برنامههای نوشتهشده را اجرا کنید. تنها کافی است از ایمیج مربوطه استفاده کنید.
آیا میتوانم از Docker برای توسعه هم زمان چند پروژه با نسخه های مختلف زبان استفاده کنم؟
بله. Docker به شما این امکان را میدهد که از چندین نسخهی مختلف یک زبان (مانند Python 2 و Python 3 یا Ruby 2.4 و Ruby 3) استفاده کنید، بدون اینکه تداخلی بین پروژهها به وجود بیاید.
اگر کانتینر بعد از اجرا حذف شود، داده ها یا وابستگی های پروژه از بین میرود؟
در صورت استفاده از سوئیچ --rm
، کانتینر پس از اجرا حذف میشود؛ اما به دلیل اینکه کد و فایلها را از طریق -v
یا Volume به اشتراک گذاشتهاید، فایلها روی سیستم شما باقی میمانند. برای حفظ وابستگیها و صرفهجویی در زمان Build، میتوانید از کانتینر دائمی استفاده کنید.
آیا توسعه با Docker نیاز به یادگیری کامل Dockerfile و Compose دارد؟
خیر. برای شروع، نیازی به یادگیری Dockerfile یا Docker Compose ندارید. با چند دستور ساده از docker run
میتوانید اسکریپتها را اجرا کنید. البته برای پروژههای بزرگتر، این ابزارها پیشنهاد میشود.
چگونه میتوان پروژه Docker را روی سرور واقعی یا هاست ابری مانند لیارا اجرا کرد؟
بعد از توسعه پروژه و ساخت Docker Image، میتوانید آن را به لیارا Push کنید یا فایل Docker Compose خود را در لیارا دیپلوی کنید. لیارا با فراهم کردن دامنه رایگان، ترافیک نامحدود و پشتیبانی از Docker Image، روند استقرار را برای کاربران خود سادهتر کرده است.
جمع بندی
Docker میتواند توسعه نرم افزار را بسیار ساده و سریع کند. با داکر میتوانید بدون نیاز به نصب زبانهای مختلف و وابستگیها، پروژه ها را در محیطی یکسان و ایزوله اجرا و تست کنید. در آموزش بالا تمامی این مراحل را به صورت کامل و مرحله به مرحله آموختید.
منبع: https://medium.com/better-programming/why-and-how-to-use-docker-for-development-a156c1de3b24