{"id":161,"date":"2023-04-18T19:58:47","date_gmt":"2022-07-13T10:26:16","guid":{"rendered":"https:\/\/www.silicloud.com\/ja\/blog\/index.php\/2023\/11\/30\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/"},"modified":"2025-07-31T21:16:57","modified_gmt":"2025-07-31T12:16:57","slug":"docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/","title":{"rendered":"Docker Compose\u3092\u4f7f\u3063\u3066\u3001Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3002"},"content":{"rendered":"<h3>\u30a4\u30f3\u30c8\u30ed\u30c0\u30af\u30b7\u30e7\u30f3<\/h3>\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7a4d\u6975\u7684\u306a\u958b\u767a\u4e2d\u3067\u3042\u308c\u3070\u3001Docker\u306e\u5229\u7528\u306f\u4f5c\u696d\u30d5\u30ed\u30fc\u3092\u7c21\u7d20\u5316\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u672c\u756a\u74b0\u5883\u306b\u5c55\u958b\u3059\u308b\u30d7\u30ed\u30bb\u30b9\u3092\u5bb9\u6613\u306b\u3057\u307e\u3059\u3002\u958b\u767a\u6642\u306b\u30b3\u30f3\u30c6\u30ca\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>Environments are consistent, meaning that you can choose the languages and dependencies you want for your project without worrying about system conflicts.<\/li>\n<li>Environments are isolated, making it easier to troubleshoot issues and onboard new team members.<\/li>\n<li>Environments are portable, allowing you to package and share your code with others.<\/li>\n<\/ul>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001Docker\u3092\u4f7f\u7528\u3057\u3066Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u74b0\u5883\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002Docker Compose\u3092\u4f7f\u7528\u3057\u3066\u3001Node\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u7528\u306e1\u3064\u306e\u30b3\u30f3\u30c6\u30ca\u3068MongoDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7528\u306e\u5225\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306fNode\u3068MongoDB\u3068\u9023\u643a\u3059\u308b\u305f\u3081\u3001\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3067\u306f\u4ee5\u4e0b\u306e\u3053\u3068\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>Synchronize the application code on the host with the code in the container to facilitate changes during development.<\/li>\n<li>Ensure that changes to the application code work without a restart.<\/li>\n<li>Create a user and password-protected database for the application\u2019s data.<\/li>\n<li>Persist this data.<\/li>\n<\/ul>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u7d42\u308f\u308a\u306b\u306f\u3001Docker\u30b3\u30f3\u30c6\u30ca\u4e0a\u3067\u52d5\u4f5c\u3059\u308b\u4f5c\u52d5\u4e2d\u306e\u30b5\u30e1\u60c5\u5831\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656464b1daa94e2bdf7b3ed6\/6-0.png\" alt=\"Complete Shark Collection landing page\" \/><\/div>\n<h2>\u524d\u63d0\u6761\u4ef6<\/h2>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306b\u5f93\u3046\u305f\u3081\u306b\u306f\u3001\u6b21\u306e\u3082\u306e\u304c\u5fc5\u8981\u3067\u3059\uff1a<\/p>\n<ul class=\"post-ul\">\n<li>A development server running Ubuntu 18.04, along with a non-root user with sudo privileges and an active firewall. For guidance on how to set these up, please see this Initial Server Setup guide.<\/li>\n<li>Docker installed on your server, following Steps 1 and 2 of How To Install and Use Docker on Ubuntu 18.04.<\/li>\n<li>Docker Compose installed on your server, following Step 1 of How To Install Docker Compose on Ubuntu 18.04.<\/li>\n<\/ul>\n<h2>\u30b9\u30c6\u30c3\u30d71 &#8211; \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30af\u30ed\u30fc\u30f3\u3068\u4f9d\u5b58\u95a2\u4fc2\u306e\u4fee\u6b63<\/h2>\n<p>\u3053\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306e\u69cb\u7bc9\u306e\u6700\u521d\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30b3\u30fc\u30c9\u3092\u30af\u30ed\u30fc\u30f3\u3057\u3066\u3001\u305d\u306epackage.json\u30d5\u30a1\u30a4\u30eb\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f9d\u5b58\u95a2\u4fc2\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002nodemon\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306edevDependencies\u306b\u8ffd\u52a0\u3057\u3001\u958b\u767a\u4e2d\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002nodemon\u3092\u4f7f\u7528\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30b3\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u305f\u3073\u306b\u81ea\u52d5\u7684\u306b\u518d\u8d77\u52d5\u3055\u308c\u308b\u3053\u3068\u304c\u4fdd\u8a3c\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u6700\u521d\u306b\u3001Silicon Cloud Community\u306eGitHub\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089nodejs-mongo-mongoose\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u3057\u307e\u3059\u3002<br \/>\n\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u306f\u3001MongoDB\u3092Node\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u7d71\u5408\u3059\u308b\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u305f\u300cHow To Integrate MongoDB with Your Node Application\u300d\u3068\u3044\u3046\u30ac\u30a4\u30c9\u3067\u8aac\u660e\u3055\u308c\u3066\u3044\u308b\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306e\u30b3\u30fc\u30c9\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001Mongoose\u3092\u4f7f\u7528\u3057\u3066\u65e2\u5b58\u306eNode\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306bMongoDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u7d71\u5408\u3059\u308b\u65b9\u6cd5\u304c\u8aac\u660e\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u540d\u3092node_project\u3068\u3057\u3066\u3001\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">git<\/span> clone https:\/\/github.com\/do-community\/nodejs-mongo-mongoose.git <mark>node_project<\/mark><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u300cnode_project\u300d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token builtin class-name\">cd<\/span> <mark>node_project<\/mark><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u304a\u6c17\u306b\u5165\u308a\u306e\u30a8\u30c7\u30a3\u30bf\u3092\u4f7f\u7528\u3057\u3066\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306epackage.json\u30d5\u30a1\u30a4\u30eb\u3092Nano\u3067\u958b\u304f\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">nano<\/span> package.json<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f9d\u5b58\u95a2\u4fc2\u306e\u4e0b\u3001\u9589\u3058\u30ab\u30c3\u30b3\u306e\u76f4\u4e0a\u306b\u3001nodemon\u3092\u542b\u3080\u65b0\u3057\u3044devDependencies\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>~\/node_project\/package.json\u3092\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a\u300c~\/node_project\/package.json\u300d<\/div>\n<pre class=\"post-pre\"><code>...\r\n<span class=\"token property\">\"dependencies\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token property\">\"ejs\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"^2.6.1\"<\/span><span class=\"token punctuation\">,<\/span>\r\n    <span class=\"token property\">\"express\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"^4.16.4\"<\/span><span class=\"token punctuation\">,<\/span>\r\n    <span class=\"token property\">\"mongoose\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"^5.4.10\"<\/span>\r\n  <span class=\"token punctuation\">}<\/span><mark><span class=\"token punctuation\">,<\/span><\/mark>\r\n  <mark><span class=\"token property\">\"devDependencies\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n    <mark><span class=\"token property\">\"nodemon\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"^1.18.10\"<\/span><\/mark>\r\n  <mark><span class=\"token punctuation\">}<\/span><\/mark>    \r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p>\u7de8\u96c6\u304c\u5b8c\u4e86\u3057\u305f\u3089\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002\u3082\u3057nano\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001CTRL+X\u3001Y\u3001\u30a8\u30f3\u30bf\u30fc\u30ad\u30fc\u3092\u9806\u306b\u62bc\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30b3\u30fc\u30c9\u3068\u305d\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u4fee\u6b63\u3057\u305f\u3089\u3001\u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305f\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5411\u3051\u306b\u30b3\u30fc\u30c9\u3092\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h2>\u30b9\u30c6\u30c3\u30d72 &#8211; \u30b3\u30f3\u30c6\u30ca\u30fc\u3068\u9023\u643a\u3059\u308b\u305f\u3081\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a<\/h2>\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30b3\u30f3\u30c6\u30ca\u30d9\u30fc\u30b9\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u5909\u66f4\u3059\u308b\u3053\u3068\u306f\u3001\u30b3\u30fc\u30c9\u3092\u3088\u308a\u30e2\u30b8\u30e5\u30e9\u30fc\u306b\u3059\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30ca\u306f\u74b0\u5883\u9593\u3067\u306e\u53ef\u642c\u6027\u3092\u63d0\u4f9b\u3057\u3066\u304a\u308a\u3001\u305d\u306e\u305f\u3081\u306b\u306f\u30b3\u30fc\u30c9\u306f\u3067\u304d\u308b\u3060\u3051\u57fa\u790e\u3068\u306a\u308b\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u304b\u3089\u5207\u308a\u96e2\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306b\u3001Node\u306eprocess.env\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u3088\u308a\u591a\u304f\u6d3b\u7528\u3059\u308b\u305f\u3081\u306b\u30b3\u30fc\u30c9\u3092\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30e9\u30f3\u30bf\u30a4\u30e0\u6642\u306b\u30e6\u30fc\u30b6\u30fc\u74b0\u5883\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u542b\u3093\u3060\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u8fd4\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u3063\u3066\u3001\u74b0\u5883\u5909\u6570\u3092\u4f7f\u3063\u3066\u5b9f\u884c\u6642\u306b\u52d5\u7684\u306b\u8a2d\u5b9a\u60c5\u5831\u3092\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>app.js\u304b\u3089\u59cb\u3081\u3066\u3001\u30e1\u30a4\u30f3\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u3092\u958b\u304d\u307e\u3059\u3002\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">nano<\/span> app.js<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u5185\u90e8\u306b\u306f\u3001\u30dd\u30fc\u30c8\u5b9a\u6570\u306e\u5b9a\u7fa9\u3068\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u30ea\u30c3\u30b9\u30f3\u3059\u308b\u30dd\u30fc\u30c8\u3092\u6307\u5b9a\u3059\u308b\u305f\u3081\u306b\u3053\u306e\u5b9a\u6570\u3092\u4f7f\u7528\u3059\u308b\u30ea\u30c3\u30b9\u30f3\u95a2\u6570\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<div>\u30cd\u30a4\u30c6\u30a3\u30d6\u306e\u65e5\u672c\u8a9e\u3067\u4ee5\u4e0b\u306e\u6587\u3092\u8a00\u3044\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u4e00\u3064\u306e\u307f\u3067\u3059\uff1a<br \/>\n~\/home\/node_project\/app.js\u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e2d\u306b\u3042\u308bnode_project\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e2d\u306eapp.js<\/p>\n<\/div>\n<pre class=\"post-pre\"><code>...\r\nconst port = 8080;\r\n...\r\napp.listen(port, function () {\r\n  console.log('Example app listening on port 8080!');\r\n});\r\n<\/code><\/pre>\n<p>\u30d7\u30ed\u30bb\u30b9\u306e\u74b0\u5883\u5909\u6570\uff08process.env \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\u3092\u4f7f\u7528\u3057\u3066\u3001\u5b9f\u884c\u6642\u306b\u52d5\u7684\u306b\u5272\u308a\u5f53\u3066\u308b\u305f\u3081\u306b\u3001\u30dd\u30fc\u30c8\u5b9a\u6570\u3092\u518d\u5b9a\u7fa9\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5b9a\u6570\u306e\u5b9a\u7fa9\u3068 listen \u95a2\u6570\u306b\u4ee5\u4e0b\u306e\u5909\u66f4\u3092\u52a0\u3048\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u4ee5\u4e0b\u306e\u6587\u3092\u65e5\u672c\u8a9e\u3067\u81ea\u7136\u306a\u8868\u73fe\u306b\u8a00\u3044\u63db\u3048\u3066\u304f\u3060\u3055\u3044\uff081\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u5341\u5206\u3067\u3059\uff09\uff1a<br \/>\n~\/home\/node_project\/app.js<\/div>\n<pre class=\"post-pre\"><code>...\r\n<mark>const port = process.env.PORT || 8080;<\/mark>\r\n...\r\napp.listen(port, function () {\r\n  console.log(<mark>`Example app listening on ${port}!`<\/mark>);\r\n});\r\n<\/code><\/pre>\n<p>\u65b0\u3057\u3044\u5b9a\u6570\u306e\u5b9a\u7fa9\u3067\u306f\u3001\u30e9\u30f3\u30bf\u30a4\u30e0\u3067\u6e21\u3055\u308c\u305f\u5024\u307e\u305f\u306f8080\u3092\u4f7f\u7528\u3057\u3066\u30dd\u30fc\u30c8\u3092\u52d5\u7684\u306b\u5272\u308a\u5f53\u3066\u307e\u3059\u3002\u540c\u69d8\u306b\u3001\u30ea\u30c3\u30b9\u30f3\u95a2\u6570\u3092\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30ea\u30c6\u30e9\u30eb\u3092\u4f7f\u7528\u3057\u3066\u66f8\u304d\u76f4\u3057\u3001\u63a5\u7d9a\u3092\u30ea\u30c3\u30b9\u30f3\u3059\u308b\u969b\u306b\u30dd\u30fc\u30c8\u306e\u5024\u3092\u88dc\u5b8c\u3057\u307e\u3059\u3002\u30dd\u30fc\u30c8\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u4ed6\u306e\u5834\u6240\u3067\u884c\u3046\u305f\u3081\u3001\u3053\u308c\u3089\u306e\u5909\u66f4\u306b\u3088\u308a\u3001\u74b0\u5883\u304c\u5909\u308f\u308b\u305f\u3073\u306b\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u7d99\u7d9a\u7684\u306b\u4fee\u6b63\u3059\u308b\u5fc5\u8981\u304c\u306a\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u7de8\u96c6\u304c\u7d42\u308f\u3063\u305f\u3089\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u6b21\u306b\u3001\u8a2d\u5b9a\u306e\u8cc7\u683c\u60c5\u5831\u3092\u524a\u9664\u3059\u308b\u305f\u3081\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u63a5\u7d9a\u60c5\u5831\u3092\u5909\u66f4\u3057\u307e\u3059\u3002\u3053\u306e\u60c5\u5831\u304c\u542b\u307e\u308c\u3066\u3044\u308bdb.js\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">nano<\/span> db.js<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u73fe\u5728\u3001\u30d5\u30a1\u30a4\u30eb\u306f\u6b21\u306e\u3053\u3068\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>Imports Mongoose, the Object Document Mapper (ODM) that you\u2019re using to create schemas and models for your application data.<\/li>\n<li>Sets the database credentials as constants, including the username and password.<\/li>\n<li>Connects to the database using the mongoose.connect method.<\/li>\n<\/ul>\n<p>\u30d5\u30a1\u30a4\u30eb\u306b\u95a2\u3059\u308b\u8a73\u7d30\u306f\u3001\u300cMongoDB\u3092Node\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u7d71\u5408\u3059\u308b\u65b9\u6cd5\u300d\u306e\u30b9\u30c6\u30c3\u30d73\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u5909\u66f4\u3059\u308b\u305f\u3081\u306b\u6700\u521d\u306b\u884c\u3046\u306e\u306f\u3001\u6a5f\u5bc6\u60c5\u5831\u3092\u542b\u3080\u5b9a\u6570\u306e\u518d\u5b9a\u7fa9\u3067\u3059\u3002\u73fe\u5728\u3001\u3053\u308c\u3089\u306e\u5b9a\u6570\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<div>~\/node_project\/db.js \u3092\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u308b\u3068:<br \/>\n\u300c~\/node_project\/db.js\u300d<\/div>\n<pre class=\"post-pre\"><code>...\r\nconst MONGO_USERNAME = '<mark>sammy<\/mark>';\r\nconst MONGO_PASSWORD = '<mark>your_password<\/mark>';\r\nconst MONGO_HOSTNAME = '127.0.0.1';\r\nconst MONGO_PORT = '27017';\r\nconst MONGO_DB = '<mark>sharkinfo<\/mark>';\r\n...\r\n<\/code><\/pre>\n<p>\u3053\u306e\u60c5\u5831\u3092\u30cf\u30fc\u30c9\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3059\u308b\u4ee3\u308f\u308a\u306b\u3001process.env\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3053\u308c\u3089\u306e\u5b9a\u6570\u306e\u5b9f\u884c\u6642\u5024\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30d6\u30ed\u30c3\u30af\u3092\u6b21\u306e\u3088\u3046\u306b\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u65e5\u672c\u8a9e\u3067\u81ea\u7136\u306b\u8a00\u3044\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u8907\u6570\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u5fc5\u8981\u3068\u3057\u307e\u305b\u3093\uff1a<br \/>\n~\/node_project\/db.js~\/node_project\/db.js\u3092\u30d1\u30e9\u30d5\u30ec\u30fc\u30ba\u3059\u308b\u3068 :<br \/>\n~\/node_project\/db.js<\/p>\n<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n<span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token constant\">MONGO_USERNAME<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token constant\">MONGO_PASSWORD<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token constant\">MONGO_HOSTNAME<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token constant\">MONGO_PORT<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token constant\">MONGO_DB<\/span>\r\n<span class=\"token punctuation\">}<\/span> <span class=\"token operator\">=<\/span> process<span class=\"token punctuation\">.<\/span>env<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u7de8\u96c6\u304c\u7d42\u308f\u3063\u305f\u3089\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3053\u306e\u6642\u70b9\u3067\u3001db.js\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u74b0\u5883\u5909\u6570\u306b\u5bfe\u5fdc\u3055\u305b\u308b\u305f\u3081\u306b\u4fee\u6b63\u3057\u307e\u3057\u305f\u304c\u3001\u305d\u308c\u3089\u306e\u5909\u6570\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u6e21\u3059\u65b9\u6cd5\u304c\u307e\u3060\u5fc5\u8981\u3067\u3059\u3002\u5b9f\u884c\u6642\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u6e21\u3059\u5024\u3092\u6301\u3064.env\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">nano<\/span> .env<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u3001db.js\u304b\u3089\u524a\u9664\u3055\u308c\u305f\u60c5\u5831\u304c\u542b\u307e\u308c\u307e\u3059\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u95a2\u3059\u308b\u30e6\u30fc\u30b6\u30fc\u540d\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3001\u30dd\u30fc\u30c8\u8a2d\u5b9a\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u306b\u30ea\u30b9\u30c8\u3055\u308c\u3066\u3044\u308b\u30e6\u30fc\u30b6\u30fc\u540d\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d\u3092\u81ea\u5206\u81ea\u8eab\u306e\u60c5\u5831\u306b\u66f4\u65b0\u3059\u308b\u3053\u3068\u3092\u5fd8\u308c\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>~\/node_project\/.env\u3092\u65e5\u672c\u8a9e\u3067\u81ea\u7136\u306b\u8a00\u3044\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u30021\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3060\u3051\u3067\u69cb\u3044\u307e\u305b\u3093\u3002<\/div>\n<pre class=\"post-pre\"><code><span class=\"token constant\">MONGO_USERNAME<\/span><span class=\"token operator\">=<\/span><mark>sammy<\/mark>\r\n<span class=\"token constant\">MONGO_PASSWORD<\/span><span class=\"token operator\">=<\/span><mark>your_password<\/mark>\r\n<span class=\"token constant\">MONGO_PORT<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">27017<\/span>\r\n<span class=\"token constant\">MONGO_DB<\/span><span class=\"token operator\">=<\/span><mark>sharkinfo<\/mark>\r\n<\/code><\/pre>\n<p>\u5143\u3005db.js\u306b\u8868\u793a\u3055\u308c\u3066\u3044\u305f\u30db\u30b9\u30c8\u8a2d\u5b9a\u304c\u524a\u9664\u3055\u308c\u305f\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4eca\u5f8c\u306fDocker Compose\u30d5\u30a1\u30a4\u30eb\u306e\u30ec\u30d9\u30eb\u3067\u30db\u30b9\u30c8\u3092\u5b9a\u7fa9\u3057\u3001\u30b5\u30fc\u30d3\u30b9\u3068\u30b3\u30f3\u30c6\u30ca\u306b\u95a2\u3059\u308b\u4ed6\u306e\u60c5\u5831\u3068\u3068\u3082\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p>\u7de8\u96c6\u304c\u7d42\u308f\u3063\u305f\u3089\u3001\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>.env\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u6a5f\u5bc6\u60c5\u5831\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3084\u30b3\u30f3\u30c6\u30ca\u306b\u30b3\u30d4\u30fc\u3055\u308c\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e.dockerignore\u30d5\u30a1\u30a4\u30eb\u3068.gitignore\u30d5\u30a1\u30a4\u30eb\u306b\u542b\u307e\u308c\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u300c.dockerignore\u300d\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">nano<\/span> .dockerignore<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u306e\u6700\u5f8c\u306b\u6b21\u306e\u884c\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u4ee5\u4e0b\u306e\u6587\u3092\u65e5\u672c\u8a9e\u3067\u540c\u7fa9\u306b\u8ff0\u3079\u3066\u304f\u3060\u3055\u3044\u30021\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u69cb\u3044\u307e\u305b\u3093\uff1a<br \/>\n~\/node_project\/.dockerignore~ \/node_project\/.dockerignore\u30d5\u30a1\u30a4\u30eb<\/p>\n<\/div>\n<pre class=\"post-pre\"><code>...\r\n.gitignore\r\n<mark>.env<\/mark>\r\n<\/code><\/pre>\n<p>\u7de8\u96c6\u304c\u7d42\u308f\u3063\u305f\u3089\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306e.gitignore\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u65e2\u306b.env\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u5b58\u5728\u3059\u308b\u304b\u78ba\u8a8d\u3057\u3066\u3082\u69cb\u3044\u307e\u305b\u3093\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">nano<\/span> .gitignore<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div>\u300c~\/node_project\/.gitignore\u300d<\/div>\n<pre class=\"post-pre\"><code>...\r\n.env\r\n...\r\n<\/code><\/pre>\n<p>\u3053\u306e\u6642\u70b9\u3067\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30b3\u30fc\u30c9\u304b\u3089\u6a5f\u5bc6\u60c5\u5831\u3092\u62bd\u51fa\u3057\u3001\u305d\u306e\u60c5\u5831\u304c\u3069\u306e\u3088\u3046\u306b\u3069\u3053\u306b\u30b3\u30d4\u30fc\u3055\u308c\u308b\u304b\u3092\u5236\u5fa1\u3059\u308b\u305f\u3081\u306e\u5bfe\u7b56\u3092\u53d6\u308a\u307e\u3057\u305f\u3002\u3053\u308c\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u3001\u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305f\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u6700\u9069\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h2>\u30b9\u30c6\u30c3\u30d73-\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u8a2d\u5b9a\u306e\u5909\u66f4<\/h2>\n<p>\u3042\u306a\u305f\u306e\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u306a\u3044\u5834\u5408\u306b\u5bfe\u5fdc\u3059\u308b\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u65b9\u6cd5\u3092\u3088\u308a\u5805\u7262\u306b\u3059\u308b\u3053\u3068\u3067\u3059\u3002Compose\u3092\u4f7f\u7528\u3057\u305f\u30b3\u30f3\u30c6\u30ca\u3067\u4f5c\u696d\u3059\u308b\u969b\u306b\u306f\u3001\u3053\u306e\u3088\u3046\u306a\u5f37\u976d\u3055\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b3\u30fc\u30c9\u306b\u5c0e\u5165\u3059\u308b\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>db.js\u3092\u7de8\u96c6\u3059\u308b\u305f\u3081\u306b\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">nano<\/span> db.js<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u524d\u306b\u8ffd\u52a0\u3057\u305f\u30b3\u30fc\u30c9\u3068\u3001Mongo\u306e\u63a5\u7d9aURI\u306eURL\u5b9a\u6570\u3068Mongoose\u306e\u63a5\u7d9a\u30e1\u30bd\u30c3\u30c9\u306b\u6ce8\u76ee\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u4ee5\u4e0b\u306f\u65e5\u672c\u8a9e\u3067\u306e\u8868\u73fe\u4f8b\u3067\u3059\uff1a<br \/>\n~\/node_project\/db.js \u30d5\u30a1\u30a4\u30eb<\/div>\n<pre class=\"post-pre\"><code>...\r\nconst {\r\n  MONGO_USERNAME,\r\n  MONGO_PASSWORD,\r\n  MONGO_HOSTNAME,\r\n  MONGO_PORT,\r\n  MONGO_DB\r\n} = process.env;\r\n\r\nconst url = `mongodb:\/\/${MONGO_USERNAME}:${MONGO_PASSWORD}@${MONGO_HOSTNAME}:${MONGO_PORT}\/${MONGO_DB}?authSource=admin`;\r\n\r\nmongoose.connect(url, {useNewUrlParser: true});\r\n<\/code><\/pre>\n<p>\u73fe\u5728\u3001\u3042\u306a\u305f\u306econnect\u30e1\u30bd\u30c3\u30c9\u306f\u3001Mongoose\u304cMongo\u306e\u65b0\u3057\u3044URL\u30d1\u30fc\u30b5\u30fc\u3092\u4f7f\u7528\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u6307\u5b9a\u3059\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u53d7\u3051\u5165\u308c\u3066\u3044\u307e\u3059\u3002\u518d\u63a5\u7d9a\u8a66\u884c\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306b\u3001\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306b\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u65b0\u3057\u3044URL\u30d1\u30fc\u30b5\u30fc\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u52a0\u3048\u3066\u3001\u95a2\u9023\u60c5\u5831\u3092\u542b\u3080options\u5b9a\u6570\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002Mongo\u306e\u5b9a\u6570\u306e\u4e0b\u306b\u3001options\u5b9a\u6570\u306e\u4ee5\u4e0b\u306e\u5b9a\u7fa9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u300c~\/node_project\/db.js\u300d\u3092\u65e5\u672c\u8a9e\u306b\u30cd\u30a4\u30c6\u30a3\u30d6\u306b\u8a00\u3044\u63db\u3048\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a<br \/>\n~\/node_project\/db.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n<span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token constant\">MONGO_USERNAME<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token constant\">MONGO_PASSWORD<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token constant\">MONGO_HOSTNAME<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token constant\">MONGO_PORT<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token constant\">MONGO_DB<\/span>\r\n<span class=\"token punctuation\">}<\/span> <span class=\"token operator\">=<\/span> process<span class=\"token punctuation\">.<\/span>env<span class=\"token punctuation\">;<\/span>\r\n\r\n<mark><span class=\"token keyword\">const<\/span> options <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n  <mark><span class=\"token literal-property property\">useNewUrlParser<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><\/mark>\r\n  <mark><span class=\"token literal-property property\">reconnectTries<\/span><span class=\"token operator\">:<\/span> Number<span class=\"token punctuation\">.<\/span><span class=\"token constant\">MAX_VALUE<\/span><span class=\"token punctuation\">,<\/span><\/mark>\r\n  <mark><span class=\"token literal-property property\">reconnectInterval<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">500<\/span><span class=\"token punctuation\">,<\/span><\/mark> \r\n  <mark><span class=\"token literal-property property\">connectTimeoutMS<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">10000<\/span><span class=\"token punctuation\">,<\/span><\/mark>\r\n<mark><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>reconnectTries\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3001Mongoose\u306b\u7121\u671f\u9650\u3067\u306e\u63a5\u7d9a\u8a66\u884c\u3092\u7d9a\u3051\u308b\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002\u307e\u305f\u3001reconnectInterval\u306f\u63a5\u7d9a\u8a66\u884c\u9593\u306e\u671f\u9593\u3092\u30df\u30ea\u79d2\u5358\u4f4d\u3067\u5b9a\u7fa9\u3057\u307e\u3059\u3002\u3055\u3089\u306b\u3001connectTimeoutMS\u306fMongo\u30c9\u30e9\u30a4\u30d0\u304c\u63a5\u7d9a\u8a66\u884c\u3092\u5931\u6557\u3068\u5224\u65ad\u3059\u308b\u307e\u3067\u306e\u5f85\u6a5f\u6642\u9593\u309210\u79d2\u3068\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n<p>\u3042\u306a\u305f\u306f\u3001Mongoose\u306econnect\u30e1\u30bd\u30c3\u30c9\u3067\u65b0\u3057\u3044\u30aa\u30d7\u30b7\u30e7\u30f3\u5b9a\u6570\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001Mongoose\u63a5\u7d9a\u8a2d\u5b9a\u3092\u3088\u308a\u7d30\u304b\u304f\u8abf\u6574\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001\u63a5\u7d9a\u30a8\u30e9\u30fc\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u306b\u3001\u30d7\u30ed\u30df\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<p>\u73fe\u5728\u3001Mongoose\u306econnect\u30e1\u30bd\u30c3\u30c9\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<div>\n<p>\u4ee5\u4e0b\u306f~\/node_project\/db.js\u306e\u65e5\u672c\u8a9e\u3067\u306e\u540c\u7fa9\u8868\u73fe\u3067\u3059\u3002<\/p>\n<p>~ \/ node_project \/ db.js \u306e\u65e5\u672c\u8a9e\u3067\u306e\u540c\u7fa9\u8868\u73fe\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059\u3002<\/p>\n<\/div>\n<pre class=\"post-pre\"><code>...\r\nmongoose.connect(url, {useNewUrlParser: true});\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u306b\u306f\u3001\u30aa\u30d7\u30b7\u30e7\u30f3\u5b9a\u6570\u3068\u30d7\u30ed\u30df\u30b9\u3092\u542b\u3080\u3001\u65e2\u5b58\u306e\u63a5\u7d9a\u30e1\u30bd\u30c3\u30c9\u3092\u524a\u9664\u3057\u3066\u3001\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u4ee5\u4e0b\u306e\u6587\u3092\u65e5\u672c\u8a9e\u3067\u81ea\u7136\u306b\u8a00\u3044\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u30021\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u7d50\u69cb\u3067\u3059\uff1a<br \/>\n~\/node_project\/db.js~\/node_project\/db.js \u3092\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n<mark>mongoose<span class=\"token punctuation\">.<\/span><span class=\"token function\">connect<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">,<\/span> options<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span> <span class=\"token keyword\">function<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n  <mark>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'MongoDB is connected'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n<mark><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/mark>\r\n  <mark><span class=\"token punctuation\">.<\/span><span class=\"token function\">catch<\/span><span class=\"token punctuation\">(<\/span> <span class=\"token keyword\">function<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n  <mark>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n<mark><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n<\/code><\/pre>\n<p>\u6210\u529f\u3057\u305f\u5834\u5408\u306f\u3001\u95a2\u6570\u306f\u9069\u5207\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u30ed\u30b0\u306b\u8a18\u9332\u3057\u307e\u3059\u3002\u305d\u308c\u4ee5\u5916\u306e\u5834\u5408\u306f\u3001\u30a8\u30e9\u30fc\u3092\u6355\u6349\u3057\u3066\u30ed\u30b0\u306b\u8a18\u9332\u3057\u3001\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u5b8c\u6210\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 (Kansei shita fairu wa, ika no y\u014d ni narimasu.)<\/p>\n<div>\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u4e00\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u307f\u3067\u69cb\u3044\u307e\u305b\u3093\uff1a<br \/>\n~\/node_project\/db.js~\/node_project\/db.js\u3092\u8a00\u3044\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">const<\/span> mongoose <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'mongoose'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token constant\">MONGO_USERNAME<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token constant\">MONGO_PASSWORD<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token constant\">MONGO_HOSTNAME<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token constant\">MONGO_PORT<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token constant\">MONGO_DB<\/span>\r\n<span class=\"token punctuation\">}<\/span> <span class=\"token operator\">=<\/span> process<span class=\"token punctuation\">.<\/span>env<span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">const<\/span> options <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token literal-property property\">useNewUrlParser<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token literal-property property\">reconnectTries<\/span><span class=\"token operator\">:<\/span> Number<span class=\"token punctuation\">.<\/span><span class=\"token constant\">MAX_VALUE<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token literal-property property\">reconnectInterval<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">500<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token literal-property property\">connectTimeoutMS<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">10000<\/span><span class=\"token punctuation\">,<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">const<\/span> url <span class=\"token operator\">=<\/span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">mongodb:\/\/<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span><span class=\"token constant\">MONGO_USERNAME<\/span><span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token string\">:<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span><span class=\"token constant\">MONGO_PASSWORD<\/span><span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token string\">@<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span><span class=\"token constant\">MONGO_HOSTNAME<\/span><span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token string\">:<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span><span class=\"token constant\">MONGO_PORT<\/span><span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token string\">\/<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span><span class=\"token constant\">MONGO_DB<\/span><span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token string\">?authSource=admin<\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">;<\/span>\r\n\r\nmongoose<span class=\"token punctuation\">.<\/span><span class=\"token function\">connect<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">,<\/span> options<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span> <span class=\"token keyword\">function<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n  console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'MongoDB is connected'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span>\r\n  <span class=\"token punctuation\">.<\/span><span class=\"token function\">catch<\/span><span class=\"token punctuation\">(<\/span> <span class=\"token keyword\">function<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n  console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<\/code><\/pre>\n<p>\u7de8\u96c6\u304c\u7d42\u308f\u3063\u305f\u3089\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30b3\u30fc\u30c9\u5185\u306b\u8010\u969c\u5bb3\u6027\u3092\u8ffd\u52a0\u3057\u3066\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u306a\u3044\u5834\u5408\u306b\u5bfe\u51e6\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u3002\u3053\u306e\u30b3\u30fc\u30c9\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3001Compose\u3092\u4f7f\u7528\u3057\u3066\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h2>\u30b9\u30c6\u30c3\u30d74 \u2014 Docker Compose\u3067\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3059\u308b<\/h2>\n<p>\u30b3\u30fc\u30c9\u3092\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u3057\u305f\u3089\u3001\u30b5\u30fc\u30d3\u30b9\u306e\u5b9a\u7fa9\u3092\u542b\u3093\u3060docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b\u6e96\u5099\u304c\u6574\u3044\u307e\u3057\u305f\u3002Compose\u306b\u304a\u3051\u308b\u30b5\u30fc\u30d3\u30b9\u306f\u5b9f\u884c\u4e2d\u306e\u30b3\u30f3\u30c6\u30ca\u3067\u3042\u308a\u3001\u30b5\u30fc\u30d3\u30b9\u306e\u5b9a\u7fa9\u306f\u5404\u30b3\u30f3\u30c6\u30ca\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u5b9f\u884c\u3055\u308c\u308b\u65b9\u6cd5\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u542b\u3093\u3067\u3044\u307e\u3059\u3002Compose\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u8907\u6570\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3057\u3001\u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u3042\u306a\u305f\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3059\u308b\u524d\u306b\u3001wait-for\u3068\u3044\u3046\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30c4\u30fc\u30eb\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8d77\u52d5\u5b8c\u4e86\u5f8c\u306b\u306e\u307f\u63a5\u7d9a\u3057\u3088\u3046\u3068\u3059\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3057\u307e\u3059\u3002\u3053\u306e\u30e9\u30c3\u30d1\u30fc\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001\u7279\u5b9a\u306e\u30db\u30b9\u30c8\u3068\u30dd\u30fc\u30c8\u304cTCP\u63a5\u7d9a\u3092\u53d7\u3051\u5165\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u30dd\u30fc\u30ea\u30f3\u30b0\u3059\u308b\u305f\u3081\u306bnetcat\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u3063\u3066\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u63a5\u7d9a\u3092\u53d7\u3051\u5165\u308c\u308b\u6e96\u5099\u304c\u3067\u304d\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u30c6\u30b9\u30c8\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u8a66\u884c\u3092\u5236\u5fa1\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>Compose\u3067\u306f\u3001depends_on\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u30b5\u30fc\u30d3\u30b9\u9593\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u3053\u306e\u9806\u5e8f\u306f\u30b3\u30f3\u30c6\u30ca\u304c\u5b9f\u884c\u4e2d\u304b\u3069\u3046\u304b\u306b\u57fa\u3065\u3044\u3066\u304a\u308a\u3001\u6e96\u5099\u304c\u3067\u304d\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002depends_on\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8d77\u52d5\u30bf\u30b9\u30af\uff08\u30e6\u30fc\u30b6\u30fc\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u7ba1\u7406\u8005\u8a8d\u8a3c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8ffd\u52a0\u3059\u308b\u306a\u3069\uff09\u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u306b\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u63a5\u7d9a\u3059\u308b\u3088\u3046\u306b\u3057\u305f\u3044\u306e\u3067\u3001\u6700\u9069\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u8d77\u52d5\u9806\u5e8f\u3092\u5236\u5fa1\u3059\u308b\u305f\u3081\u306ewait-for\u3084\u4ed6\u306e\u30c4\u30fc\u30eb\u306e\u4f7f\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306f\u3001Compose\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u95a2\u9023\u63a8\u5968\u4e8b\u9805\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u300cwait-for.sh\u300d\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">nano<\/span> wait-for.sh<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u5165\u529b\u3057\u3066\u3001\u30dd\u30fc\u30ea\u30f3\u30b0\u6a5f\u80fd\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u4ee5\u4e0b\u306e\u6587\u3092\u65e5\u672c\u8a9e\u306b\u81ea\u7136\u306b\u8a00\u3044\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u30021\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u307f\u304c\u5fc5\u8981\u3067\u3059\uff1a<br \/>\n~\/node_project\/app\/wait-for.sh\u300c~\/node_project\/app\/wait-for.sh\u300d<\/p>\n<\/div>\n<pre class=\"post-pre\"><code><span class=\"token shebang important\">#!\/bin\/sh<\/span>\r\n\r\n<span class=\"token comment\"># original script: https:\/\/github.com\/eficode\/wait-for\/blob\/master\/wait-for<\/span>\r\n\r\n<span class=\"token assign-left variable\">TIMEOUT<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">15<\/span>\r\n<span class=\"token assign-left variable\">QUIET<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">0<\/span>\r\n\r\n<span class=\"token function-name function\">echoerr<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">\"<span class=\"token variable\">$QUIET<\/span>\"<\/span> <span class=\"token parameter variable\">-ne<\/span> <span class=\"token number\">1<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span> <span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">\"%s<span class=\"token entity\" title=\"\\n\">\\n<\/span>\"<\/span> <span class=\"token string\">\"<span class=\"token variable\">$*<\/span>\"<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">1<\/span>&gt;<\/span><span class=\"token file-descriptor important\">&amp;2<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">fi<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token function-name function\">usage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token assign-left variable\">exitcode<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">\"<span class=\"token variable\">$1<\/span>\"<\/span>\r\n  <span class=\"token function\">cat<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">USAGE<span class=\"token bash punctuation\"> <span class=\"token operator\">&gt;<\/span><span class=\"token file-descriptor important\">&amp;2<\/span><\/span>\r\nUsage:\r\n  <span class=\"token variable\">$cmdname<\/span> host:port [-t timeout] [-- command args]\r\n  -q | --quiet                        Do not output any status messages\r\n  -t TIMEOUT | --timeout=timeout      Timeout in seconds, zero for no timeout\r\n  -- COMMAND ARGS                     Execute command with args after the test finishes\r\nUSAGE<\/span>\r\n  <span class=\"token builtin class-name\">exit<\/span> <span class=\"token string\">\"<span class=\"token variable\">$exitcode<\/span>\"<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token function-name function\">wait_for<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">i<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token variable\"><span class=\"token variable\">`<\/span><span class=\"token function\">seq<\/span> $TIMEOUT<span class=\"token variable\">`<\/span><\/span> <span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span>\r\n    <span class=\"token function\">nc<\/span> <span class=\"token parameter variable\">-z<\/span> <span class=\"token string\">\"<span class=\"token variable\">$HOST<\/span>\"<\/span> <span class=\"token string\">\"<span class=\"token variable\">$PORT<\/span>\"<\/span> <span class=\"token operator\">&gt;<\/span> \/dev\/null <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span><span class=\"token file-descriptor important\">&amp;1<\/span>\r\n    \r\n    <span class=\"token assign-left variable\">result<\/span><span class=\"token operator\">=<\/span><span class=\"token variable\">$?<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$result<\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span>\r\n      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$#<\/span> <span class=\"token parameter variable\">-gt<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span>\r\n        <span class=\"token builtin class-name\">exec<\/span> <span class=\"token string\">\"<span class=\"token variable\">$@<\/span>\"<\/span>\r\n      <span class=\"token keyword\">fi<\/span>\r\n      <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">0<\/span>\r\n    <span class=\"token keyword\">fi<\/span>\r\n    <span class=\"token function\">sleep<\/span> <span class=\"token number\">1<\/span>\r\n  <span class=\"token keyword\">done<\/span>\r\n  <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">\"Operation timed out\"<\/span> <span class=\"token operator\">&gt;<\/span><span class=\"token file-descriptor important\">&amp;2<\/span>\r\n  <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$#<\/span> <span class=\"token parameter variable\">-gt<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span>\r\n<span class=\"token keyword\">do<\/span>\r\n  <span class=\"token keyword\">case<\/span> <span class=\"token string\">\"<span class=\"token variable\">$1<\/span>\"<\/span> <span class=\"token keyword\">in<\/span>\r\n    *:* <span class=\"token punctuation\">)<\/span>\r\n    <span class=\"token assign-left variable\">HOST<\/span><span class=\"token operator\">=<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">\"%s<span class=\"token entity\" title=\"\\n\">\\n<\/span>\"<\/span> <span class=\"token string\">\"<span class=\"token variable\">$1<\/span>\"<\/span><span class=\"token operator\">|<\/span> <span class=\"token function\">cut<\/span> <span class=\"token parameter variable\">-d<\/span> <span class=\"token builtin class-name\">:<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">)<\/span><\/span>\r\n    <span class=\"token assign-left variable\">PORT<\/span><span class=\"token operator\">=<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">\"%s<span class=\"token entity\" title=\"\\n\">\\n<\/span>\"<\/span> <span class=\"token string\">\"<span class=\"token variable\">$1<\/span>\"<\/span><span class=\"token operator\">|<\/span> <span class=\"token function\">cut<\/span> <span class=\"token parameter variable\">-d<\/span> <span class=\"token builtin class-name\">:<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token number\">2<\/span><span class=\"token variable\">)<\/span><\/span>\r\n    <span class=\"token builtin class-name\">shift<\/span> <span class=\"token number\">1<\/span>\r\n    <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token parameter variable\">-q<\/span> <span class=\"token operator\">|<\/span> --quiet<span class=\"token punctuation\">)<\/span>\r\n    <span class=\"token assign-left variable\">QUIET<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">1<\/span>\r\n    <span class=\"token builtin class-name\">shift<\/span> <span class=\"token number\">1<\/span>\r\n    <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span>\r\n    -t<span class=\"token punctuation\">)<\/span>\r\n    <span class=\"token assign-left variable\">TIMEOUT<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">\"<span class=\"token variable\">$2<\/span>\"<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">\"<span class=\"token variable\">$TIMEOUT<\/span>\"<\/span> <span class=\"token operator\">=<\/span> <span class=\"token string\">\"\"<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span> <span class=\"token builtin class-name\">break<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">fi<\/span>\r\n    <span class=\"token builtin class-name\">shift<\/span> <span class=\"token number\">2<\/span>\r\n    <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token parameter variable\">--timeout<\/span><span class=\"token operator\">=<\/span>*<span class=\"token punctuation\">)<\/span>\r\n    <span class=\"token assign-left variable\">TIMEOUT<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">\"<span class=\"token variable\">${1<span class=\"token operator\">#<\/span>*=}<\/span>\"<\/span>\r\n    <span class=\"token builtin class-name\">shift<\/span> <span class=\"token number\">1<\/span>\r\n    <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span>\r\n    --<span class=\"token punctuation\">)<\/span>\r\n    <span class=\"token builtin class-name\">shift<\/span>\r\n    <span class=\"token builtin class-name\">break<\/span>\r\n    <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span>\r\n    --help<span class=\"token punctuation\">)<\/span>\r\n    usage <span class=\"token number\">0<\/span>\r\n    <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span>\r\n    *<span class=\"token punctuation\">)<\/span>\r\n    echoerr <span class=\"token string\">\"Unknown argument: <span class=\"token variable\">$1<\/span>\"<\/span>\r\n    usage <span class=\"token number\">1<\/span>\r\n    <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token keyword\">esac<\/span>\r\n<span class=\"token keyword\">done<\/span>\r\n\r\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">\"<span class=\"token variable\">$HOST<\/span>\"<\/span> <span class=\"token operator\">=<\/span> <span class=\"token string\">\"\"<\/span> <span class=\"token parameter variable\">-o<\/span> <span class=\"token string\">\"<span class=\"token variable\">$PORT<\/span>\"<\/span> <span class=\"token operator\">=<\/span> <span class=\"token string\">\"\"<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span>\r\n  echoerr <span class=\"token string\">\"Error: you need to provide a host and port to test.\"<\/span>\r\n  usage <span class=\"token number\">2<\/span>\r\n<span class=\"token keyword\">fi<\/span>\r\n\r\nwait_for <span class=\"token string\">\"<span class=\"token variable\">$@<\/span>\"<\/span>\r\n<\/code><\/pre>\n<p>\u30b3\u30fc\u30c9\u306e\u8ffd\u52a0\u304c\u7d42\u308f\u3063\u305f\u3089\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u53ef\u80fd\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">chmod<\/span> +x wait-for.sh<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u6b21\u306b\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">nano<\/span> docker-compose.yml<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u307e\u305a\u3001\u30d5\u30a1\u30a4\u30eb\u306b\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u3001node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n<div>\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u305f\u3060\u3057\u3001\u4e00\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u304a\u9858\u3044\u3057\u307e\u3059\uff1a<br \/>\n~\/node_project\/docker-compose.yml~\/node_project\/docker-compose.yml\u306e\u65e5\u672c\u8a9e\u306b\u3088\u308b\u8a00\u3044\u63db\u3048\u3092\u6559\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u305f\u3060\u3057\u3001\u4e00\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u304a\u9858\u3044\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n<pre class=\"post-pre\"><code><span class=\"token key atrule\">version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">'3'<\/span>\r\n\r\n<span class=\"token key atrule\">services<\/span><span class=\"token punctuation\">:<\/span>\r\n  <span class=\"token key atrule\">nodejs<\/span><span class=\"token punctuation\">:<\/span>\r\n    <span class=\"token key atrule\">build<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token key atrule\">context<\/span><span class=\"token punctuation\">:<\/span> .\r\n      <span class=\"token key atrule\">dockerfile<\/span><span class=\"token punctuation\">:<\/span> Dockerfile\r\n    <span class=\"token key atrule\">image<\/span><span class=\"token punctuation\">:<\/span> nodejs\r\n    <span class=\"token key atrule\">container_name<\/span><span class=\"token punctuation\">:<\/span> nodejs\r\n    <span class=\"token key atrule\">restart<\/span><span class=\"token punctuation\">:<\/span> unless<span class=\"token punctuation\">-<\/span>stopped\r\n    <span class=\"token key atrule\">env_file<\/span><span class=\"token punctuation\">:<\/span> .env\r\n    <span class=\"token key atrule\">environment<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token punctuation\">-<\/span> MONGO_USERNAME=$MONGO_USERNAME\r\n      <span class=\"token punctuation\">-<\/span> MONGO_PASSWORD=$MONGO_PASSWORD\r\n      <span class=\"token punctuation\">-<\/span> MONGO_HOSTNAME=db\r\n      <span class=\"token punctuation\">-<\/span> MONGO_PORT=$MONGO_PORT\r\n      <span class=\"token punctuation\">-<\/span> MONGO_DB=$MONGO_DB \r\n    <span class=\"token key atrule\">ports<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token punctuation\">-<\/span> <span class=\"token string\">\"80:8080\"<\/span>\r\n    <span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token punctuation\">-<\/span> .<span class=\"token punctuation\">:<\/span>\/home\/node\/app\r\n      <span class=\"token punctuation\">-<\/span> node_modules<span class=\"token punctuation\">:<\/span>\/home\/node\/app\/node_modules\r\n    <span class=\"token key atrule\">networks<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token punctuation\">-<\/span> app<span class=\"token punctuation\">-<\/span>network\r\n    <span class=\"token key atrule\">command<\/span><span class=\"token punctuation\">:<\/span> .\/wait<span class=\"token punctuation\">-<\/span>for.sh db<span class=\"token punctuation\">:<\/span>27017 <span class=\"token punctuation\">-<\/span><span class=\"token punctuation\">-<\/span> \/home\/node\/app\/node_modules\/.bin\/nodemon app.js\r\n<\/code><\/pre>\n<p>nodejs\u30b5\u30fc\u30d3\u30b9\u306e\u5b9a\u7fa9\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>build: This defines the configuration options, including the context and dockerfile, that will be applied when Compose builds the application image. If you wanted to use an existing image from a registry like Docker Hub, you could use the image instruction instead, with information about your username, repository, and image tag.<\/li>\n<li>context: This defines the build context for the image build \u2014 in this case, the current project directory.<\/li>\n<li>dockerfile: This specifies the Dockerfile in your current project directory as the file Compose will use to build the application image. For more information about this file, please see How To Build a Node.js Application with Docker.<\/li>\n<li>image, container_name: These apply names to the image and container.<\/li>\n<li>restart: This defines the restart policy. The default is no, but you have set the container to restart unless it is stopped.<\/li>\n<li>env_file: This tells Compose that you would like to add environment variables from a file called .env, located in your build context.<\/li>\n<li>environment: Using this option allows you to add the Mongo connection settings you defined in the .env file. Note that you are not setting NODE_ENV to development, since this is Express\u2019s default behavior if NODE_ENV is not set. When moving to production, you can set this to production to enable view caching and less verbose error messages.<br \/>\nAlso note that you have specified the db database container as the host, as discussed in Step 2.<\/li>\n<li>ports: This maps port 80 on the host to port 8080 on the container.<\/li>\n<li>volumes: You are including two types of mounts here:The first is a bind mount that mounts your application code on the host to the \/home\/node\/app directory on the container. This will facilitate rapid development, since any changes you make to your host code will be populated immediately in the container.<br \/>\nThe second is a named volume, node_modules. When Docker runs the npm install instruction listed in the application Dockerfile, npm will create a new node_modules directory on the container that includes the packages required to run the application. The bind mount you just created will hide this newly created node_modules directory, however. Since node_modules on the host is empty, the bind will map an empty directory to the container, overriding the new node_modules directory and preventing your application from starting. The named node_modules volume solves this problem by persisting the contents of the \/home\/node\/app\/node_modules directory and mounting it to the container, hiding the bind.<\/li>\n<\/ul>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\n<p>\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u4f7f\u7528\u3059\u308b\u969b\u306b\u306f\u3001\u6b21\u306e\u30dd\u30a4\u30f3\u30c8\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>&#8211; \u30d0\u30a4\u30f3\u30c9\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u30b3\u30f3\u30c6\u30ca\u306enode_modules\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u5185\u5bb9\u304c\u30db\u30b9\u30c8\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306fDocker\u306b\u3088\u3063\u3066\u4f5c\u6210\u3055\u308c\u305f\u540d\u524d\u4ed8\u304d\u30dc\u30ea\u30e5\u30fc\u30e0\u306b\u3088\u3063\u3066\u6240\u6709\u3055\u308c\u307e\u3059\u3002<br \/>\n&#8211; \u30db\u30b9\u30c8\u306b\u4e8b\u524d\u306b\u5b58\u5728\u3059\u308bnode_modules\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u3042\u308b\u5834\u5408\u3001\u30b3\u30f3\u30c6\u30ca\u4e0a\u3067\u4f5c\u6210\u3055\u308c\u305fnode_modules\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u4e0a\u66f8\u304d\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u69cb\u7bc9\u3057\u3066\u3044\u308b\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3067\u306f\u3001\u4e8b\u524d\u306b\u5b58\u5728\u3059\u308bnode_modules\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u306a\u304f\u3001\u30db\u30b9\u30c8\u3067npm\u3092\u4f7f\u7528\u3057\u306a\u3044\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u305f\u3081\u306etwelve-factor\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u6e96\u62e0\u3057\u3066\u304a\u308a\u3001\u5b9f\u884c\u74b0\u5883\u9593\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u307e\u3059\u3002<\/p>\n<\/div>\n<\/div>\n<ul class=\"post-ul\">\n<li>networks: This specifies that your application service will join the app-network network, which you will define at the bottom of the file.<\/li>\n<li>command: This option lets you set the command that should be executed when Compose runs the image. Note that this will override the CMD instruction that you set in our application Dockerfile. Here, you are running the application using the wait-for script, which will poll the db service on port 27017 to test whether the database service is ready. Once the readiness test succeeds, the script will execute the command you have set, \/home\/node\/app\/node_modules\/.bin\/nodemon app.js, to start the application with nodemon. This will ensure that any future changes you make to your code are reloaded without your having to restart the application.<\/li>\n<\/ul>\n<p>\u6b21\u306b\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b5\u30fc\u30d3\u30b9\u306e\u5b9a\u7fa9\u306e\u4e0b\u306b\u3001\u6b21\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d3\u30b9\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u4ee5\u4e0b\u306f\u3001\u65e5\u672c\u8a9e\u3067\u306e\u540c\u7b49\u306e\u8868\u73fe\u3067\u3059\uff1a<br \/>\n~\/node_project\/docker-compose.yml\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb<\/div>\n<pre class=\"post-pre\"><code><span class=\"token punctuation\">...<\/span>\r\n  <span class=\"token key atrule\">db<\/span><span class=\"token punctuation\">:<\/span>\r\n    <span class=\"token key atrule\">image<\/span><span class=\"token punctuation\">:<\/span> mongo<span class=\"token punctuation\">:<\/span>4.1.8<span class=\"token punctuation\">-<\/span>xenial\r\n    <span class=\"token key atrule\">container_name<\/span><span class=\"token punctuation\">:<\/span> db\r\n    <span class=\"token key atrule\">restart<\/span><span class=\"token punctuation\">:<\/span> unless<span class=\"token punctuation\">-<\/span>stopped\r\n    <span class=\"token key atrule\">env_file<\/span><span class=\"token punctuation\">:<\/span> .env\r\n    <span class=\"token key atrule\">environment<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token punctuation\">-<\/span> MONGO_INITDB_ROOT_USERNAME=$MONGO_USERNAME\r\n      <span class=\"token punctuation\">-<\/span> MONGO_INITDB_ROOT_PASSWORD=$MONGO_PASSWORD\r\n    <span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span>  \r\n      <span class=\"token punctuation\">-<\/span> dbdata<span class=\"token punctuation\">:<\/span>\/data\/db   \r\n    <span class=\"token key atrule\">networks<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token punctuation\">-<\/span> app<span class=\"token punctuation\">-<\/span>network  \r\n<\/code><\/pre>\n<p>Nodejs\u30b5\u30fc\u30d3\u30b9\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u8a2d\u5b9a\u306e\u4e00\u90e8\u306f\u540c\u3058\u307e\u307e\u3067\u3059\u304c\u3001\u30a4\u30e1\u30fc\u30b8\u3001\u74b0\u5883\u3001\u304a\u3088\u3073\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u5b9a\u7fa9\u306b\u306f\u4ee5\u4e0b\u306e\u5909\u66f4\u304c\u52a0\u3048\u3089\u308c\u307e\u3057\u305f\u3002<\/p>\n<ul class=\"post-ul\">\n<li>image: To create this service, Compose will pull the 4.1.8-xenial Mongo image from Docker Hub. You are pinning a particular version to avoid possible future conflicts as the Mongo image changes. For more information about version pinning, please see the Docker documentation on Dockerfile best practices.<\/li>\n<li>MONGO_INITDB_ROOT_USERNAME, MONGO_INITDB_ROOT_PASSWORD: The mongo image makes these environment variables available so that you can modify the initialization of your database instance. MONGO_INITDB_ROOT_USERNAME and MONGO_INITDB_ROOT_PASSWORD together create a root user in the admin authentication database and ensure that authentication is enabled when the container starts. You have set MONGO_INITDB_ROOT_USERNAME and MONGO_INITDB_ROOT_PASSWORD using the values from your .env file, which you pass to the db service using the env_file option. Doing this means that your sammy application user will be a root user on the database instance, with access to all the administrative and operational privileges of that role. When working in production, you will want to create a dedicated application user with appropriately scoped privileges.<\/li>\n<\/ul>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1a\u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u5834\u6240\u306b\u30b3\u30f3\u30c6\u30ca\u3092\u958b\u59cb\u3059\u308b\u3068\u3001\u3053\u308c\u3089\u306e\u5909\u6570\u306f\u52b9\u679c\u3092\u6301\u3061\u307e\u305b\u3093\u3002<\/div>\n<\/div>\n<ul class=\"post-ul\">\n<li>dbdata:\/data\/db: The named volume dbdata will persist the data stored in Mongo\u2019s default data directory, \/data\/db. This will ensure that you don\u2019t lose data in cases where you stop or remove containers.<\/li>\n<\/ul>\n<p>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u3001\u30a2\u30d7\u30ea\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306b\u3082DB\u30b5\u30fc\u30d3\u30b9\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n<p>\u6700\u5f8c\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u6700\u5f8c\u306b\u30dc\u30ea\u30e5\u30fc\u30e0\u3068\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u5b9a\u7fa9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u4ee5\u4e0b\u306f\u3001\u65e5\u672c\u8a9e\u30671\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u8a00\u3044\u63db\u3048\u305f\u3082\u306e\u3067\u3059:<br \/>\n\u301c\/node_project\/docker-compose.yml \u3092\u4f7f\u3063\u3066\u304f\u3060\u3055\u3044\u3002<\/div>\n<pre class=\"post-pre\"><code><span class=\"token punctuation\">...<\/span>\r\n<span class=\"token key atrule\">networks<\/span><span class=\"token punctuation\">:<\/span>\r\n  <span class=\"token key atrule\">app-network<\/span><span class=\"token punctuation\">:<\/span>\r\n    <span class=\"token key atrule\">driver<\/span><span class=\"token punctuation\">:<\/span> bridge\r\n\r\n<span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span>\r\n  <span class=\"token key atrule\">dbdata<\/span><span class=\"token punctuation\">:<\/span>\r\n  <span class=\"token key atrule\">node_modules<\/span><span class=\"token punctuation\">:<\/span>  \r\n<\/code><\/pre>\n<p>\u30e6\u30fc\u30b6\u30fc\u304c\u5b9a\u7fa9\u3057\u305f\u30d6\u30ea\u30c3\u30b8\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3001app-network\u306f\u3001\u540c\u3058Docker\u30c7\u30fc\u30e2\u30f3\u30db\u30b9\u30c8\u4e0a\u306b\u3042\u308b\u305f\u3081\u3001\u30b3\u30f3\u30c6\u30ca\u9593\u3067\u306e\u901a\u4fe1\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5185\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3068\u901a\u4fe1\u304c\u52b9\u7387\u5316\u3055\u308c\u307e\u3059\u3002\u540c\u3058\u30d6\u30ea\u30c3\u30b8\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u4e0a\u306e\u30b3\u30f3\u30c6\u30ca\u9593\u3067\u306f\u3001\u3059\u3079\u3066\u306e\u30dd\u30fc\u30c8\u304c\u958b\u653e\u3055\u308c\u307e\u3059\u304c\u3001\u5916\u90e8\u3078\u306e\u30dd\u30fc\u30c8\u306f\u516c\u958b\u3055\u308c\u307e\u305b\u3093\u3002\u3053\u306e\u305f\u3081\u3001db\u30b3\u30f3\u30c6\u30ca\u3068nodejs\u30b3\u30f3\u30c6\u30ca\u306f\u4e92\u3044\u306b\u901a\u4fe1\u3067\u304d\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3078\u306e\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u30a2\u30af\u30bb\u30b9\u306e\u305f\u3081\u306b\u30dd\u30fc\u30c880\u3092\u516c\u958b\u3059\u308b\u3060\u3051\u3067\u5341\u5206\u3067\u3059\u3002<\/p>\n<p>\u30c8\u30c3\u30d7\u30ec\u30d9\u30eb\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u30ad\u30fc\u306b\u306f\u3001\u30dc\u30ea\u30e5\u30fc\u30e0\u306edbdata\u3068node_modules\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002Docker\u304c\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u4f5c\u6210\u3059\u308b\u969b\u3001\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u5185\u5bb9\u306fDocker\u304c\u7ba1\u7406\u3059\u308b\u30db\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u4e00\u90e8\uff08\/var\/lib\/docker\/volumes\/\uff09\u306b\u683c\u7d0d\u3055\u308c\u307e\u3059\u3002\u5404\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u5185\u5bb9\u306f\u3001\/var\/lib\/docker\/volumes\/\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e0b\u306b\u683c\u7d0d\u3055\u308c\u3001\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u4f7f\u7528\u3059\u308b\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u3088\u3046\u306b\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u4f5c\u6210\u3059\u308b\u9bab\u60c5\u5831\u30c7\u30fc\u30bf\u306f\u3001db\u30b3\u30f3\u30c6\u30ca\u3092\u524a\u9664\u3057\u3066\u518d\u4f5c\u6210\u3057\u3066\u3082dbdata\u30dc\u30ea\u30e5\u30fc\u30e0\u306b\u4fdd\u6301\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u5b8c\u6210\u3057\u305fdocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<div>~\/node_project\/docker-compose.yml\u3092\u65e5\u672c\u8a9e\u3067\u539f\u6587\u306e\u610f\u5473\u3092\u4fdd\u3063\u305f\u307e\u307e\u8a00\u3044\u63db\u3048\u308b\u3068\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a<br \/>\n\u300c~\/node_project\/docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u300d<\/div>\n<pre class=\"post-pre\"><code><span class=\"token key atrule\">version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">'3'<\/span>\r\n\r\n<span class=\"token key atrule\">services<\/span><span class=\"token punctuation\">:<\/span>\r\n  <span class=\"token key atrule\">nodejs<\/span><span class=\"token punctuation\">:<\/span>\r\n    <span class=\"token key atrule\">build<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token key atrule\">context<\/span><span class=\"token punctuation\">:<\/span> .\r\n      <span class=\"token key atrule\">dockerfile<\/span><span class=\"token punctuation\">:<\/span> Dockerfile\r\n    <span class=\"token key atrule\">image<\/span><span class=\"token punctuation\">:<\/span> nodejs\r\n    <span class=\"token key atrule\">container_name<\/span><span class=\"token punctuation\">:<\/span> nodejs\r\n    <span class=\"token key atrule\">restart<\/span><span class=\"token punctuation\">:<\/span> unless<span class=\"token punctuation\">-<\/span>stopped\r\n    <span class=\"token key atrule\">env_file<\/span><span class=\"token punctuation\">:<\/span> .env\r\n    <span class=\"token key atrule\">environment<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token punctuation\">-<\/span> MONGO_USERNAME=$MONGO_USERNAME\r\n      <span class=\"token punctuation\">-<\/span> MONGO_PASSWORD=$MONGO_PASSWORD\r\n      <span class=\"token punctuation\">-<\/span> MONGO_HOSTNAME=db\r\n      <span class=\"token punctuation\">-<\/span> MONGO_PORT=$MONGO_PORT\r\n      <span class=\"token punctuation\">-<\/span> MONGO_DB=$MONGO_DB\r\n    <span class=\"token key atrule\">ports<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token punctuation\">-<\/span> <span class=\"token string\">\"80:8080\"<\/span>\r\n    <span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token punctuation\">-<\/span> .<span class=\"token punctuation\">:<\/span>\/home\/node\/app\r\n      <span class=\"token punctuation\">-<\/span> node_modules<span class=\"token punctuation\">:<\/span>\/home\/node\/app\/node_modules\r\n    <span class=\"token key atrule\">networks<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token punctuation\">-<\/span> app<span class=\"token punctuation\">-<\/span>network\r\n    <span class=\"token key atrule\">command<\/span><span class=\"token punctuation\">:<\/span> .\/wait<span class=\"token punctuation\">-<\/span>for.sh db<span class=\"token punctuation\">:<\/span>27017 <span class=\"token punctuation\">-<\/span><span class=\"token punctuation\">-<\/span> \/home\/node\/app\/node_modules\/.bin\/nodemon app.js \r\n\r\n  <span class=\"token key atrule\">db<\/span><span class=\"token punctuation\">:<\/span>\r\n    <span class=\"token key atrule\">image<\/span><span class=\"token punctuation\">:<\/span> mongo<span class=\"token punctuation\">:<\/span>4.1.8<span class=\"token punctuation\">-<\/span>xenial\r\n    <span class=\"token key atrule\">container_name<\/span><span class=\"token punctuation\">:<\/span> db\r\n    <span class=\"token key atrule\">restart<\/span><span class=\"token punctuation\">:<\/span> unless<span class=\"token punctuation\">-<\/span>stopped\r\n    <span class=\"token key atrule\">env_file<\/span><span class=\"token punctuation\">:<\/span> .env\r\n    <span class=\"token key atrule\">environment<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token punctuation\">-<\/span> MONGO_INITDB_ROOT_USERNAME=$MONGO_USERNAME\r\n      <span class=\"token punctuation\">-<\/span> MONGO_INITDB_ROOT_PASSWORD=$MONGO_PASSWORD\r\n    <span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span>     \r\n      <span class=\"token punctuation\">-<\/span> dbdata<span class=\"token punctuation\">:<\/span>\/data\/db\r\n    <span class=\"token key atrule\">networks<\/span><span class=\"token punctuation\">:<\/span>\r\n      <span class=\"token punctuation\">-<\/span> app<span class=\"token punctuation\">-<\/span>network  \r\n\r\n<span class=\"token key atrule\">networks<\/span><span class=\"token punctuation\">:<\/span>\r\n  <span class=\"token key atrule\">app-network<\/span><span class=\"token punctuation\">:<\/span>\r\n    <span class=\"token key atrule\">driver<\/span><span class=\"token punctuation\">:<\/span> bridge\r\n\r\n<span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span>\r\n  <span class=\"token key atrule\">dbdata<\/span><span class=\"token punctuation\">:<\/span>\r\n  <span class=\"token key atrule\">node_modules<\/span><span class=\"token punctuation\">:<\/span>  \r\n<\/code><\/pre>\n<p>\u7de8\u96c6\u304c\u7d42\u308f\u3063\u305f\u3089\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30b5\u30fc\u30d3\u30b9\u306e\u5b9a\u7fa9\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3089\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u59cb\u306b\u5099\u3048\u3089\u308c\u307e\u3059\u3002<\/p>\n<h2>\u30b9\u30c6\u30c3\u30d75- \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c6\u30b9\u30c8<\/h2>\n<p>docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308c\u3070\u3001docker-compose up\u30b3\u30de\u30f3\u30c9\u3067\u30b5\u30fc\u30d3\u30b9\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001docker-compose down\u30b3\u30de\u30f3\u30c9\u3067\u30b3\u30f3\u30c6\u30ca\u3092\u505c\u6b62\u3057\u3066\u524a\u9664\u3059\u308b\u3053\u3068\u3067\u30c7\u30fc\u30bf\u304c\u6c38\u7d9a\u5316\u3055\u308c\u308b\u304b\u3092\u30c6\u30b9\u30c8\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u6700\u521d\u306b\u3001\u30b3\u30f3\u30c6\u30ca\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3057\u3001docker-compose up\u30b3\u30de\u30f3\u30c9\u3092-d\u30d5\u30e9\u30b0\u3068\u5171\u306b\u5b9f\u884c\u3057\u3066\u3001\u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u3067nodejs\u3068db\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">docker-compose<\/span> up <span class=\"token parameter variable\">-d<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u51fa\u529b\u306f\u3001\u3054\u5229\u7528\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u4f5c\u6210\u3055\u308c\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&#8230; Creating db &#8230; done Creating nodejs &#8230; done<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30b5\u30fc\u30d3\u30b9\u304b\u3089\u306e\u30ed\u30b0\u51fa\u529b\u3092\u8868\u793a\u3059\u308b\u3053\u3068\u3067\u3001\u8d77\u52d5\u30d7\u30ed\u30bb\u30b9\u306b\u95a2\u3059\u308b\u3088\u308a\u8a73\u7d30\u306a\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">docker-compose<\/span> logs<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3082\u3057\u3059\u3079\u3066\u304c\u6b63\u3057\u304f\u958b\u59cb\u3055\u308c\u3066\u3044\u308c\u3070\u3001\u6b21\u306b\u793a\u3059\u3082\u306e\u304c\u51fa\u529b\u3055\u308c\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&#8230; nodejs | [nodemon] starting `node app.js` nodejs | Example app listening on 8080! nodejs | MongoDB is connected &#8230; db | 2019-02-22T17:26:27.329+0000 I ACCESS [conn2] Successfully authenticated as principal <mark>sammy<\/mark> on admin<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>docker-compose ps\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3063\u3066\u3001\u30b3\u30f3\u30c6\u30ca\u306e\u72b6\u614b\u3082\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">docker-compose<\/span> <span class=\"token function\">ps<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u51fa\u529b\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Name Command State Ports &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- db docker-entrypoint.sh mongod Up 27017\/tcp nodejs .\/wait-for.sh db:27017 &#8212; &#8230; Up 0.0.0.0:80-&gt;8080\/tcp<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3042\u306a\u305f\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u7a3c\u50cd\u3057\u3066\u3044\u308b\u72b6\u614b\u3067\u3001\u30d6\u30e9\u30a6\u30b6\u3067http:\/\/your_server_ip\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656464b1daa94e2bdf7b3ed6\/146-0.png\" alt=\"Everything Sharks Application Landing Page\" \/><\/div>\n<p>\u300c\u30b5\u30e1\u306e\u60c5\u5831\u3092\u5165\u624b\u3059\u308b\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001\u30a8\u30f3\u30c8\u30ea\u30fc\u30d5\u30a9\u30fc\u30e0\u304c\u3042\u308b\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u3057\u3001\u305d\u3053\u3067\u30b5\u30e1\u306e\u540d\u524d\u3068\u305d\u306e\u30b5\u30e1\u306e\u4e00\u822c\u7684\u306a\u7279\u5fb4\u306e\u8aac\u660e\u3092\u9001\u4fe1\u3067\u304d\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656464b1daa94e2bdf7b3ed6\/148-0.png\" alt=\"Shark Info Form where you can enter a shark name and the characteristics of that shark\" \/><\/div>\n<p>\u30d5\u30a9\u30fc\u30e0\u306b\u3001\u3042\u306a\u305f\u304c\u9078\u3093\u3060\u30b5\u30e1\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30c7\u30e2\u30f3\u30b9\u30c8\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u305f\u3081\u306b\u3001\u300c\u30b5\u30e1\u306e\u540d\u524d\u300d\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30e1\u30ac\u30ed\u30c9\u30f3\u30fb\u30b7\u30e3\u30fc\u30af\u3092\u8ffd\u52a0\u3057\u3001\u300c\u30b5\u30e1\u306e\u7279\u5fb4\u300d\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u300c\u53e4\u4ee3\u300d\u3068\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656464b1daa94e2bdf7b3ed6\/150-0.png\" alt=\"Filled Shark Form\" \/><\/div>\n<p>\u300c\u9001\u4fe1\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u3053\u306e\u30b5\u30e1\u306e\u60c5\u5831\u304c\u8868\u793a\u3055\u308c\u305f\u30da\u30fc\u30b8\u304c\u3042\u306a\u305f\u306b\u623b\u3063\u3066\u304d\u307e\u3059\u3002\u300d<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656464b1daa94e2bdf7b3ed6\/152-0.png\" alt=\"Shark Output from the form you submitted\" \/><\/div>\n<p>\u6700\u5f8c\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b3\u30f3\u30c6\u30ca\u3092\u524a\u9664\u3057\u3066\u3082\u3001\u5148\u307b\u3069\u5165\u529b\u3057\u305f\u30c7\u30fc\u30bf\u304c\u7dad\u6301\u3055\u308c\u308b\u304b\u30c6\u30b9\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30bf\u30fc\u30df\u30ca\u30eb\u306b\u623b\u308a\u3001\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5165\u529b\u3057\u3066\u30b3\u30f3\u30c6\u30ca\u3068\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u505c\u6b62\u3057\u3066\u524a\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">docker-compose<\/span> down<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&#8211;volumes\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u542b\u3081\u306a\u3044\u3088\u3046\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u306e\u305f\u3081\u3001dbdata\u30dc\u30ea\u30e5\u30fc\u30e0\u306f\u524a\u9664\u3055\u308c\u307e\u305b\u3093\u3002<\/p>\n<p>\u6b21\u306e\u51fa\u529b\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u3068\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u304c\u524a\u9664\u3055\u308c\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Stopping nodejs &#8230; done Stopping db &#8230; done Removing nodejs &#8230; done Removing db &#8230; done Removing network node_project_app-network<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u5bb9\u5668\u3092\u518d\u4f5c\u6210\u3059\u308b<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">docker-compose<\/span> up <span class=\"token parameter variable\">-d<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3067\u306f\u3001\u4eca\u5ea6\u306f\u30b5\u30e1\u306e\u60c5\u5831\u30d5\u30a9\u30fc\u30e0\u306b\u623b\u3063\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656464b1daa94e2bdf7b3ed6\/162-0.png\" alt=\"Shark Info Form\" \/><\/div>\n<p>\u597d\u307f\u306e\u65b0\u3057\u3044\u30b5\u30e1\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u4f8b\u3067\u306f\u3001\u30b8\u30f3\u30d9\u30a8\u30b6\u30e1\u3068\u5927\u578b\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656464b1daa94e2bdf7b3ed6\/164-0.png\" alt=\"Enter New Shark\" \/><\/div>\n<p>\u300c\u9001\u4fe1\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u5165\u529b\u3057\u305f\u30c7\u30fc\u30bf\u304c\u5931\u308f\u308c\u308b\u3053\u3068\u306a\u304f\u3001\u65b0\u3057\u3044\u30b5\u30e1\u304c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30b5\u30e1\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306b\u8ffd\u52a0\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u306b\u6c17\u3065\u304d\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656464b1daa94e2bdf7b3ed6\/166-0.png\" alt=\"Complete Shark Collection\" \/><\/div>\n<p>\u73fe\u5728\u3001\u30c7\u30fc\u30bf\u306e\u6c38\u7d9a\u6027\u3068\u30b3\u30fc\u30c9\u306e\u540c\u671f\u304c\u53ef\u80fd\u306aDocker\u30b3\u30f3\u30c6\u30ca\u4e0a\u3067\u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u7a3c\u50cd\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2>\u7d50\u8ad6<\/h2>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306b\u5f93\u3046\u3053\u3068\u3067\u3001Docker\u30b3\u30f3\u30c6\u30ca\u3092\u4f7f\u3063\u305fNode\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u74b0\u5883\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002\u6a5f\u5bc6\u60c5\u5831\u3092\u53d6\u308a\u51fa\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u72b6\u614b\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b3\u30fc\u30c9\u304b\u3089\u5207\u308a\u96e2\u3059\u3053\u3068\u306b\u3088\u308a\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u3088\u308a\u30e2\u30b8\u30e5\u30e9\u30fc\u304b\u3064\u79fb\u690d\u53ef\u80fd\u306b\u3057\u307e\u3057\u305f\u3002\u307e\u305f\u3001\u958b\u767a\u306e\u30cb\u30fc\u30ba\u3084\u8981\u4ef6\u304c\u5909\u308f\u308b\u306b\u3064\u308c\u3066\u3001\u4fee\u6b63\u3067\u304d\u308b\u30dc\u30a4\u30e9\u30fc\u30d7\u30ec\u30fc\u30c8\u306edocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3082\u8a2d\u5b9a\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u3042\u306a\u305f\u304c\u6210\u9577\u3059\u308b\u306b\u3064\u308c\u3066\u3001\u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u8a2d\u8a08\u306b\u3064\u3044\u3066\u3055\u3089\u306b\u77e5\u308a\u305f\u3044\u3068\u601d\u3046\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u3089\u306e\u30c8\u30d4\u30c3\u30af\u306b\u95a2\u3059\u308b\u8a73\u7d30\u60c5\u5831\u306f\u3001Kubernetes\u5411\u3051\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068Kubernetes\u5411\u3051\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8fd1\u4ee3\u5316\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u30b3\u30fc\u30c9\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u5b66\u3076\u306b\u306f\u3001\u300cDocker\u3092\u4f7f\u7528\u3057\u305fNode.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u69cb\u7bc9\u65b9\u6cd5\u300d\u3068\u300cNode\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306bMongoDB\u3092\u7d71\u5408\u3059\u308b\u65b9\u6cd5\u300d\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30b3\u30f3\u30c6\u30ca\u3092\u4f7f\u7528\u3057\u3066Nginx\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u3092\u4f7f\u7528\u3057\u305fNode\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5c55\u958b\u306b\u3064\u3044\u3066\u306e\u60c5\u5831\u306f\u3001\u300cNginx\u3001Let&#8217;s Encrypt\u3001\u304a\u3088\u3073Docker Compose\u3092\u4f7f\u7528\u3057\u305f\u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305fNode.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u300d\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u30a4\u30f3\u30c8\u30ed\u30c0\u30af\u30b7\u30e7\u30f3 \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7a4d\u6975\u7684\u306a\u958b\u767a\u4e2d\u3067\u3042\u308c\u3070\u3001Docker\u306e\u5229\u7528\u306f\u4f5c\u696d\u30d5\u30ed\u30fc\u3092\u7c21\u7d20\u5316\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u672c\u756a\u74b0\u5883\u306b\u5c55\u958b\u3059\u308b\u30d7\u30ed\u30bb\u30b9\u3092\u5bb9\u6613\u306b\u3057\u307e\u3059\u3002\u958b\u767a\u6642\u306b\u30b3\u30f3\u30c6\u30ca\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u5229\u70b9\u304c\u3042\u308a\u307e [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[71,26],"class_list":["post-161","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-node-js","tag-26"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Docker Compose\u3092\u4f7f\u3063\u3066\u3001Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3002 - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"Docker Compose\u3092\u4f7f\u3063\u3066Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose\u3092\u4f7f\u3063\u3066\u3001node-js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Compose\u3092\u4f7f\u3063\u3066\u3001Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3002\" \/>\n<meta property=\"og:description\" content=\"Docker Compose\u3092\u4f7f\u3063\u3066Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose\u3092\u4f7f\u3063\u3066\u3001node-js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-13T10:26:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-31T12:16:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656464b1daa94e2bdf7b3ed6\/6-0.png\" \/>\n<meta name=\"author\" content=\"\u7d50\u8863, \u6625\u82b1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u7d50\u8863, \u6625\u82b1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"52\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/\",\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/\",\"name\":\"Docker Compose\u3092\u4f7f\u3063\u3066\u3001Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3002 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#website\"},\"datePublished\":\"2022-07-13T10:26:16+00:00\",\"dateModified\":\"2025-07-31T12:16:57+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/e52a686063ac76fd8cc6f539d41497ac\"},\"description\":\"Docker Compose\u3092\u4f7f\u3063\u3066Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/ja\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker Compose\u3092\u4f7f\u3063\u3066\u3001Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3002\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/e52a686063ac76fd8cc6f539d41497ac\",\"name\":\"\u7d50\u8863, \u6625\u82b1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c74c6e2eb915a3c8e795b3934aa25a7333e0b38e7f1c7baf52785286ad51105e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c74c6e2eb915a3c8e795b3934aa25a7333e0b38e7f1c7baf52785286ad51105e?s=96&d=mm&r=g\",\"caption\":\"\u7d50\u8863, \u6625\u82b1\"},\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/author\/yuiharuka\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Docker Compose\u3092\u4f7f\u3063\u3066\u3001Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3002 - Blog - Silicon Cloud","description":"Docker Compose\u3092\u4f7f\u3063\u3066Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose\u3092\u4f7f\u3063\u3066\u3001node-js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\/","og_locale":"ja_JP","og_type":"article","og_title":"Docker Compose\u3092\u4f7f\u3063\u3066\u3001Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3002","og_description":"Docker Compose\u3092\u4f7f\u3063\u3066Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","og_url":"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose\u3092\u4f7f\u3063\u3066\u3001node-js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-07-13T10:26:16+00:00","article_modified_time":"2025-07-31T12:16:57+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656464b1daa94e2bdf7b3ed6\/6-0.png"}],"author":"\u7d50\u8863, \u6625\u82b1","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"\u7d50\u8863, \u6625\u82b1","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"52\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/","url":"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/","name":"Docker Compose\u3092\u4f7f\u3063\u3066\u3001Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3002 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/#website"},"datePublished":"2022-07-13T10:26:16+00:00","dateModified":"2025-07-31T12:16:57+00:00","author":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/e52a686063ac76fd8cc6f539d41497ac"},"description":"Docker Compose\u3092\u4f7f\u3063\u3066Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/ja\/blog\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/ja\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker Compose\u3092\u4f7f\u3063\u3066\u3001Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u3002"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#website","url":"https:\/\/www.silicloud.com\/ja\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/e52a686063ac76fd8cc6f539d41497ac","name":"\u7d50\u8863, \u6625\u82b1","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c74c6e2eb915a3c8e795b3934aa25a7333e0b38e7f1c7baf52785286ad51105e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c74c6e2eb915a3c8e795b3934aa25a7333e0b38e7f1c7baf52785286ad51105e?s=96&d=mm&r=g","caption":"\u7d50\u8863, \u6625\u82b1"},"url":"https:\/\/www.silicloud.com\/ja\/blog\/author\/yuiharuka\/"},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.silicloud.com\/ja\/blog\/docker-compose%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81node-js%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e9%96%8b%e7%99%ba%e3%82%92%e3%82%b3%e3%83%b3\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/comments?post=161"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/161\/revisions"}],"predecessor-version":[{"id":37140,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/161\/revisions\/37140"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/media?parent=161"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/categories?post=161"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/tags?post=161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}