خب میخوام براحتترین شکلی که پیدا کردم بگم چجوری میتونید پروژه اسپرینگبوت خودتون رو که دیتابیسش هم منگو هست رو تبدیل به داکر بکنید و براحتی هرجا خواستید اونو deploy کنید.
من این کار رو با docker-compose انجام میدم که نصبش تو لینوکس خیلی راحته و کافیه اونو تایپش کنید که اگه نبود خودش نصبش کنه.
اول از همه بریم سراِِغ پروژه اسپرینگمون که باید داخل یک کانتینر جدا بیاد بالا. برای اینکار باید jar پروژه رو تولید کنید.برای سادگی و فهم بهتر از همین اول هر فایلی که میسازیم رو بذاریم توی پوشه lab (هرجا خواستید پوشه رو بسازید فرق نداره) . پس jar تولید شده رو بذارید توی پوشه lab. اگر پروژتون maven هست jar اینجوری تولید میشه:
mvn clean package
دستور بالا رو باید توی root پروژه بزنید و فایل تولیدی هم که توی target/yourApp.jar قرار میگیره که کپیش کنید داخل پوشه lab.
حالا یک فایل به نام Dockerfile داخل پوشه lab و بدون پسوند و پیشوند بسازید با محتویات زیر
FROM openjdk:11 COPY yourApp.jar app.jar ENTRYPOINT java -jar app.jar
سادهترین حالت یک داکرفایل رو دارید میبینید که در عینحال کار بزرگی انجام میده. خط اول میگه از چه image استفاده میکنه برای اجرای اسپرینگمون که براساس ورژن جاوا خودتون تنظیمش کنید. خط دوم فایل jar رو داخل image کپی میکنه و در خط سوم میگه چه دستوری باید بعد از اجرا انجام بشه که بهش گفتیم فایل jar رو اجرا کنه.
حالا ما موفق شدیم وب اپلیکیشنمون رو داکرایز کنیم اما دیتابیس نداره و حتما به مشکل میخوره و باید یه داکر دیگه بیاریم بالا برای منگو که این یکی داکرمون یا همون containerمون ازش استفاده کنه. درواقع هربار که بخوایم داکر اپلیکیشنمون رو بیاریم بالا به یک داکر منگو هم نیاز داریم پس از docker-compose استفاده میکنیم. docker-compose این قابلیت رو بهمون میده که تو یه فایل بگیم که چه داکرهایی لازم داریم که باید باهم اجربشن و اپ مارو بیارن بالا.
پس یه فایل دیگه توی پوشه lab به اسم docker-compose.yml بسازید و توش اینارو بزارید
version: "3" services: web: build: . ports: - "8080:8080" environment: - SPRING_DATA_MONGODB_URI=mongodb://mongo:27017/your-database-name depends_on: - mongo mongo: image: mongo ports: - "27017:27017"
خب تو این فایل و توی تگ services مگیم که چه سرویسهایی داریم اینجا گفتیم دوتا سرویس به نام های web و mongo داریم. سرویس web باید build بشه یعنی image آمادهای نداره و باید از فایل Dockerfile ما بخونه برای همین "." گذاشتیم که مشخص میکنه توی همین پوشه باید دنبالش بگرده که بسازتش. توی سرویس mongo اما گفتیم از image رسمی خود منگو استفاده بشه که اسمش همون mongo هست.
نکتهای که باید بدونید اینه که از طریق environment میتونید همهی ویژگیهای فایل application.properties رو override کنید. مثلا اینجا با SPRING_DATA_MONGODB_URI ( اگه آندرلاین رو با دات عوض کنید میبینید همون اسمیه که تو application.properties استفاده میکنید ) بهش گفتیم کجا میتونه به منگو وصل بشه و حواستون باشه که توی این رشته mongo:27017 منگویی که نوشتیم اسم سرویس منگو توی فایل docker-compose است.
در آخر هم دوتا کامند میزنید و سیستم آماده استفادس که به ترتیب :
docker-compose build
با این دستور داکر اپتون رو که تو یه فایل توصیفش کردیم رو میسازه و بعد این دستور :
docker-compose up
و سیستم در اختیار شماس :)
ممنون از وقتی که گذاشتید امیدوارم کمک کرده باشم. خوشحال میشم توی توئیترم بیشتر باهم معاشرت کنیم.