{"id":84435,"date":"2024-11-19T02:50:21","date_gmt":"2024-11-18T23:20:21","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/docker-compose-with-rails-8-tailwind-and-sqlite-1k3m\/"},"modified":"2024-11-19T02:50:21","modified_gmt":"2024-11-18T23:20:21","slug":"docker-compose-with-rails-8-tailwind-and-sqlite-1k3m","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/docker-compose-with-rails-8-tailwind-and-sqlite-1k3m\/","title":{"rendered":"Docker Compose \u0628\u0627 Rails 8\u060c Tailwind \u0648 SQLite"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang<br \/>\n            \u0633\u0644\u0627\u0645 \u062e\u06cc\u0644\u06cc \u0648\u0642\u062a\u0647 \u0646\u062f\u06cc\u062f\u0645<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u0632 Docker Compose \u0628\u0631\u0627\u06cc \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0648 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 Ruby On Rails \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f 8 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0642\u0635\u062f \u0646\u062f\u0627\u0631\u0645 \u062a\u0645\u0627\u0645 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0627 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0646\u0633\u062e\u0647 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f \u0641\u0647\u0631\u0633\u062a \u06a9\u0646\u0645. \u0646\u0633\u062e\u0647 \u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u0631 \u0645\u0648\u0631\u062f \u0622\u0646 \u0628\u06cc\u0634\u062a\u0631 \u0628\u062f\u0627\u0646\u06cc\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0627\u0646\u062a\u0634\u0627\u0631 \u0631\u0633\u0645\u06cc \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u06a9\u0631\u062f \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u062a\u0646\u0647\u0627 \u06cc\u06a9 \u0634\u0631\u0637 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u0646\u0635\u0628 Docker \u06cc\u0627 OrbStack \u0628\u0631 \u0631\u0648\u06cc \u0631\u0627\u06cc\u0627\u0646\u0647 \u0634\u0645\u0627\u0633\u062a. \u0647\u0645\u06cc\u0646 \u0627\u0633\u062a. \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0646\u0635\u0628 Ruby\u060c Postgres\u060c SQLite\u060c Redis&#8230; \u0686\u06cc\u0632\u06cc \u0646\u06cc\u0633\u062a.<\/p>\n<p>\u0627\u06cc\u0646 \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u0628\u0647 \u0631\u0648\u0632 \u0634\u062f\u0647 \u0627\u0632 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u0634\u0631\u0648\u0639 \u0633\u0631\u06cc\u0639 \u0627\u0633\u062a \u06a9\u0647 \u0645\u062f\u062a\u06cc \u067e\u06cc\u0634 \u0646\u0648\u0634\u062a\u0645.<\/p>\n<p>  \u067e\u0648\u0634\u0647 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc<\/p>\n<p>\u0627\u0628\u062a\u062f\u0627 \u06cc\u06a9 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0634\u0645\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0633\u067e\u0633 4 \u0641\u0627\u06cc\u0644 \u062e\u0627\u0644\u06cc \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<p>mkdir my-project<br \/>\ncd my-project<br \/>\ntouch Dockerfile.dev<br \/>\ntouch docker-compose.yml<br \/>\ntouch Gemfile<br \/>\ntouch Gemfile.lock<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0628\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u0638\u0631\u0641 Docker \u06a9\u0647 \u062d\u0627\u0648\u06cc \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0622\u0646 \u0627\u0633\u062a \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f. \u062a\u0639\u0631\u06cc\u0641 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0641\u0627\u06cc\u0644\u06cc \u0628\u0647 \u0646\u0627\u0645 Dockerfile.dev \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f. \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f Dockerfile.dev \u0641\u0627\u06cc\u0644:<\/p>\n<p># syntax = docker\/dockerfile:1<\/p>\n<p># Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile<br \/>\nARG RUBY_VERSION=3.3.5<br \/>\nFROM registry.docker.com\/library\/ruby:$RUBY_VERSION-slim-bookworm<\/p>\n<p># Rails app lives here<br \/>\nWORKDIR \/rails<\/p>\n<p># Install packages needed to build gems<br \/>\nRUN apt-get update -qq &amp;&amp; \\<br \/>\n  apt-get install &#8211;no-install-recommends -y build-essential git curl node-gyp sqlite3<\/p>\n<p># Install JavaScript dependencies<br \/>\nARG NODE_VERSION=18.15.0<br \/>\nARG YARN_VERSION=latest<br \/>\nENV PATH=\/usr\/local\/node\/bin:$PATH<br \/>\nRUN curl -sL https:\/\/github.com\/nodenv\/node-build\/archive\/master.tar.gz | tar xz -C \/tmp\/ &amp;&amp; \\<br \/>\n  \/tmp\/node-build-master\/bin\/node-build &#8220;${NODE_VERSION}&#8221; \/usr\/local\/node &amp;&amp; \\<br \/>\n  npm install -g yarn@$YARN_VERSION &amp;&amp; \\<br \/>\n  rm -rf \/tmp\/node-build-master<\/p>\n<p># Run bundle install<br \/>\nCOPY Gemfile Gemfile.lock .\/<br \/>\nRUN bundle install<\/p>\n<p># Copy application code<br \/>\nCOPY . .<\/p>\n<p># Start the server by default, this can be overwritten at runtime<br \/>\nEXPOSE 3000<br \/>\nCMD [&#8220;rails&#8221;, &#8220;server&#8221;, &#8220;-b&#8221;, &#8220;0.0.0.0&#8221;]\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0646\u06a9\u062a\u0647<\/p>\n<p>\u0645\u0647\u0645 \u0627\u0633\u062a \u06a9\u0647 \u0627\u0632 .dev \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u0633\u0648\u0646\u062f \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u0648\u0631 \u062c\u062f\u06cc\u062f rails \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0622\u0646 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u06a9\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u06cc\u06a9 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0645\u06cc \u0633\u0627\u0632\u062f\u0628\u0627 \u0631\u0648\u0628\u06cc\u060c \u0628\u0627\u0646\u062f\u0644\u0631 \u0648 \u062a\u0645\u0627\u0645 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0634\u0645\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646. \u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631\u0646\u062d\u0648\u0647 \u0646\u0648\u0634\u062a\u0646 Dockerfiles\u060c \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 Docker \u0631\u0627 \u0628\u0628\u06cc\u0646\u06cc\u062f\u0648 \u0645\u0631\u062c\u0639 Dockerfile.<\/p>\n<p>\u0628\u0639\u062f\u060c \u06cc\u06a9 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f \u0648 \u06cc\u06a9 \u0628\u0648\u062a \u0627\u0633\u062a\u0631\u067e \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f Gemfile \u06a9\u0647 \u0641\u0642\u0637 Rails \u0631\u0627 \u0628\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u062f\u0631 \u06cc\u06a9 \u0644\u062d\u0638\u0647 \u062a\u0648\u0633\u0637 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u062e\u0648\u0627\u0647\u062f \u0634\u062f rails new. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0647\u0631 \u0646\u0633\u062e\u0647 \u0631\u06cc\u0644\u06cc \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>source &#8216;https:\/\/rubygems.org&#8217;<br \/>\ngem &#8216;rails&#8217;, &#8216;~&gt; 8.0&#8217;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c docker-compose.yml \u062c\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062c\u0627\u062f\u0648 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc \u0627\u0641\u062a\u062f. \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u062e\u062f\u0645\u0627\u062a\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0631\u0627 \u0634\u0627\u0645\u0644 \u0645\u06cc \u0634\u0648\u062f \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u062a\u0634\u0631\u06cc\u062d \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>services:<br \/>\n  web:<br \/>\n    build:<br \/>\n      context: .<br \/>\n      dockerfile: Dockerfile.dev<br \/>\n    command: bash -c &#8220;.\/bin\/dev&#8221;<br \/>\n    tty: true<br \/>\n    volumes:<br \/>\n      &#8211; .:\/rails<br \/>\n    ports:<br \/>\n      &#8211; &#8220;3000:3000&#8221;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0646\u06a9\u062a\u0647<\/p>\n<p>\u0628\u0627\u06cc\u062f \u0627\u0632 tty:true \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u06cc\u0645 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc css\/js \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n<p>  \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f<\/p>\n<p>\u0628\u0627 \u0648\u062c\u0648\u062f \u0622\u0646 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u060c \u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 Rails skeleton \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 docker compose run \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<p>$ docker compose run &#8211;no-deps web rails new . &#8211;name=my-project  &#8211;force &#8211;css=tailwind &#8211;js=esbuild<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0648\u0642\u062a\u06cc \u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u06cc\u062f\u060c Compose \u062a\u0635\u0648\u06cc\u0631\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0622\u0646 \u0645\u06cc \u0633\u0627\u0632\u062f web \u062e\u062f\u0645\u0627\u062a \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Dockerfile.dev \u0641\u0627\u06cc\u0644\u0631\u0627 &#8211;no-deps \u0628\u0647 Compose \u0645\u06cc\u200c\u06af\u0648\u06cc\u062f \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u0645\u0631\u062a\u0628\u0637 \u0631\u0627 \u0634\u0631\u0648\u0639 \u0646\u06a9\u0646\u062f. \u0633\u067e\u0633 \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f rails new \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u0638\u0631\u0641 \u062c\u062f\u06cc\u062f\u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u062a\u0635\u0648\u06cc\u0631.<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0627\u0646\u062c\u0627\u0645 \u0622\u0646\u060c \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u062f\u06cc\u062f \u062f\u0631 \u062f\u0627\u062e\u0644 \u067e\u0648\u0634\u0647 \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<p>\u0646\u06a9\u062a\u0647<\/p>\n<p>\u0627\u06af\u0631 Docker \u0631\u0627 \u0631\u0648\u06cc \u0644\u06cc\u0646\u0648\u06a9\u0633 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0641\u0627\u06cc\u0644 \u0647\u0627 rails new \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 root \u0647\u0633\u062a\u0646\u062f\u060c \u0628\u0631\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0622\u0646 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0645\u062c\u0628\u0648\u0631 \u0634\u0648\u06cc\u062f chown \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>$ sudo chown -R $USER:$USER .<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u06cc\u06a9 Gemfile \u062c\u062f\u06cc\u062f \u062f\u0627\u0631\u06cc\u062f\u060c \u0628\u0627\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f. (\u0627\u06cc\u0646\u060c \u0648 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u0647 Gemfile \u06cc\u0627 Dockerfile\u060c \u0628\u0627\u06cc\u062f \u062a\u0646\u0647\u0627 \u0645\u0648\u0627\u0631\u062f\u06cc \u0628\u0627\u0634\u062f \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u062f\u0627\u0631\u06cc\u062f.)<\/p>\n<p>$ docker compose build<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0627\u062c\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647<\/p>\n<p>\u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0648\u062a \u06a9\u0646\u06cc\u062f\u060c \u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u06a9\u0647 0.0.0.0 \u0631\u0627 \u0628\u0647 \u0633\u0631\u0648\u0631 \u062e\u0648\u062f \u0645\u062a\u0635\u0644 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645. \u0631\u0641\u062a\u0646 \u0628\u0647 Procfile.dev \u0648 &#8220;-b 0.0.0.0&#8221; \u0631\u0627 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u062e\u0637 \u0627\u0648\u0644 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f\u060c \u0628\u0627\u06cc\u062f \u0634\u0628\u06cc\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u062f.<\/p>\n<p>web: env RUBY_DEBUG_OPEN=true bin\/rails server -b 0.0.0.0<br \/>\njs: yarn build &#8211;watch<br \/>\ncss: yarn build:css &#8211;watch<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0648 \u0622\u062e\u0631\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0642\u0628\u0644 \u0627\u0632 \u0686\u0631\u062e\u0634 \u0628\u0631\u0646\u0627\u0645\u0647 \u067e\u0631\u0648\u0698\u0647\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0628\u0631\u062e\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062c\u0632\u0626\u06cc \u062f\u0631 \u0622\u0646 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645 Dockerfile.dev \u0641\u0627\u06cc\u0644 \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0627\u06cc\u0646 \u062e\u0637\u0648\u0637 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062fCOPY ..<\/p>\n<p># Entrypoint prepares the database.<br \/>\nENTRYPOINT [&#8220;\/rails\/bin\/docker-entrypoint&#8221;]\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>Dockerfile.dev \u0646\u0647\u0627\u06cc\u06cc \u0628\u0627\u06cc\u062f \u0628\u0647 \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f:<\/p>\n<p># syntax = docker\/dockerfile:1<\/p>\n<p># Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile<br \/>\nARG RUBY_VERSION=3.3.5<br \/>\nFROM registry.docker.com\/library\/ruby:$RUBY_VERSION-slim-bookworm<\/p>\n<p># Rails app lives here<br \/>\nWORKDIR \/rails<\/p>\n<p># Install packages needed to build gems<br \/>\nRUN apt-get update -qq &amp;&amp; \\<br \/>\n  apt-get install &#8211;no-install-recommends -y build-essential git curl node-gyp sqlite3<\/p>\n<p># Install JavaScript dependencies<br \/>\nARG NODE_VERSION=18.15.0<br \/>\nARG YARN_VERSION=latest<br \/>\nENV PATH=\/usr\/local\/node\/bin:$PATH<br \/>\nRUN curl -sL https:\/\/github.com\/nodenv\/node-build\/archive\/master.tar.gz | tar xz -C \/tmp\/ &amp;&amp; \\<br \/>\n  \/tmp\/node-build-master\/bin\/node-build &#8220;${NODE_VERSION}&#8221; \/usr\/local\/node &amp;&amp; \\<br \/>\n  npm install -g yarn@$YARN_VERSION &amp;&amp; \\<br \/>\n  rm -rf \/tmp\/node-build-master<\/p>\n<p># Run bundle install<br \/>\nCOPY Gemfile Gemfile.lock .\/<br \/>\nRUN bundle install<\/p>\n<p># Copy application code<br \/>\nCOPY . .<\/p>\n<p># Entrypoint prepares the database.<br \/>\nENTRYPOINT [&#8220;\/rails\/bin\/docker-entrypoint&#8221;]\n<p># Start the server by default, this can be overwritten at runtime<br \/>\nEXPOSE 3000<br \/>\nCMD [&#8220;rails&#8221;, &#8220;server&#8221;, &#8220;-b&#8221;, &#8220;0.0.0.0&#8221;]\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062d\u0627\u0644\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646docker compose build\u062f\u0648\u0628\u0627\u0631\u0647 \u0648 \u0633\u067e\u0633 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060cdocker compose up.<\/p>\n<p>  \u0635\u0641\u062d\u0647 \u062e\u0648\u0634 \u0622\u0645\u062f\u06af\u0648\u06cc\u06cc Rails \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f!<\/p>\n<p>\u0647\u0645\u06cc\u0646 \u0627\u0633\u062a. \u0627\u06a9\u0646\u0648\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0631\u0648\u06cc \u067e\u0648\u0631\u062a 3000 \u062f\u0631 \u062f\u0627\u06a9\u0631 \u062f\u0627\u06cc\u0645\u0648\u0646 \u0634\u0645\u0627 \u0627\u062c\u0631\u0627 \u0634\u0648\u062f\u060c \u0628\u0647 \u0627\u06cc\u0646 \u0622\u062f\u0631\u0633 \u0628\u0631\u0648\u06cc\u062f http:\/\/localhost:3000 \u062f\u0631 \u06cc\u06a9 \u0645\u0631\u0648\u0631\u06af\u0631 \u0648\u0628 \u0628\u0631\u0627\u06cc \u062f\u06cc\u062f\u0646 Rails Welcome.<\/p>\n<p>  \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0645\u062a\u0648\u0642\u0641 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0628\u0631\u0627\u06cc \u062a\u0648\u0642\u0641 \u0628\u0631\u0646\u0627\u0645\u0647\u060c docker compose \u0631\u0627 \u062f\u0631 \u0641\u0647\u0631\u0633\u062a \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f. \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0647\u0645\u0627\u0646 \u067e\u0646\u062c\u0631\u0647 \u062a\u0631\u0645\u06cc\u0646\u0627\u0644\u06cc \u06a9\u0647 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627 \u062f\u0631 \u0622\u0646 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u06cc\u0627 \u0627\u0632 \u067e\u0646\u062c\u0631\u0647 \u062f\u06cc\u06af\u0631\u06cc \u06a9\u0647 \u0628\u0647 \u06cc\u06a9 \u062e\u0637 \u0641\u0631\u0645\u0627\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0631\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u06cc\u06a9 \u0631\u0627\u0647 \u062a\u0645\u06cc\u0632 \u0628\u0631\u0627\u06cc \u0645\u062a\u0648\u0642\u0641 \u06a9\u0631\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a.<\/p>\n<p>docker compose down<br \/>\n \u2714 Container my-project-web-1  Removed0.0s<br \/>\n \u2714 Network my-project_default  Removed<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0645\u062c\u062f\u062f\u0627 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u062c\u062f\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f docker compose up \u062f\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u067e\u0631\u0648\u0698\u0647<\/p>\n<p>  \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0627\u06af\u0631 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u06cc \u062f\u0631 \u0641\u0627\u06cc\u0644 Gemfile \u06cc\u0627 Compose \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0645\u0648\u0627\u0631\u062f \u062f\u06cc\u06af\u0631\u06cc \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u06cc\u062f\u062a\u0646\u0638\u06cc\u0645\u0627\u062a\u060c \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0633\u0627\u0632\u06cc\u062f. \u0628\u0631\u062e\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0641\u0642\u0637 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0646\u062fdocker compose up &#8211;build\u060c \u0627\u0645\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u06a9\u0627\u0645\u0644 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u062c\u0631\u0627\u06cc \u0645\u062c\u062f\u062f \u062f\u0627\u0631\u062fdocker compose run web bundle install  \u0628\u0631\u0627\u06cc \u0647\u0645\u06af\u0627\u0645 \u0633\u0627\u0632\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 Gemfile.lock \u0628\u0647\u0645\u06cc\u0632\u0628\u0627\u0646 \u0648 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u0622\u0646 docker compose up &#8211;build.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0627\u0632 \u0645\u0648\u0631\u062f \u0627\u0648\u0644 \u0627\u0633\u062a\u060c \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u06a9\u0627\u0645\u0644 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a.\u0641\u0631\u0636 \u06a9\u0646\u06cc\u062f \u0634\u0645\u0627 \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u067e\u0648\u0631\u062a \u062f\u0631 \u0645\u0639\u0631\u0636 \u062f\u06cc\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0645\u062d\u0644\u06cc \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f 3000\u062f\u0631 \u0627\u0648\u0644\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0645\u0627 \u0628\u0647 3001. \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634\u060c \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644 Compose \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f\u0628\u0646\u062f\u0631 3000 \u0631\u0648\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u067e\u0648\u0631\u062a \u062c\u062f\u06cc\u062f\u060c 3001\u060c \u0631\u0648\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646 \u0648 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a:<\/p>\n<p>ports:<br \/>\n  &#8211; &#8220;3001:3000&#8221;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u062c\u062f\u062f \u06a9\u0646\u06cc\u062f docker compose up &#8211;build.<\/p>\n<p>\u062f\u0631 \u062f\u0627\u062e\u0644 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u062f\u0631 \u0647\u0645\u0627\u0646 \u067e\u0648\u0631\u062a \u0642\u0628\u0644\u06cc \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f 3000\u060c \u0627\u0645\u0627Rails Welcome \u0627\u06a9\u0646\u0648\u0646 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0627\u0633\u062a http:\/\/localhost:3001 \u062f\u0631 \u0645\u062d\u0644 \u0634\u0645\u0627\u0645\u06cc\u0632\u0628\u0627\u0646.<\/p>\n<div data-article-id=\"2111220\" id=\"article-body\">\n<p>\u0633\u0644\u0627\u0645 \u062e\u06cc\u0644\u06cc \u0648\u0642\u062a\u0647 \u0646\u062f\u06cc\u062f\u0645<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u0632 Docker Compose \u0628\u0631\u0627\u06cc \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0648 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 Ruby On Rails \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f 8 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0642\u0635\u062f \u0646\u062f\u0627\u0631\u0645 \u062a\u0645\u0627\u0645 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0627 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0646\u0633\u062e\u0647 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f \u0641\u0647\u0631\u0633\u062a \u06a9\u0646\u0645. \u0646\u0633\u062e\u0647 \u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u0631 \u0645\u0648\u0631\u062f \u0622\u0646 \u0628\u06cc\u0634\u062a\u0631 \u0628\u062f\u0627\u0646\u06cc\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0627\u0646\u062a\u0634\u0627\u0631 \u0631\u0633\u0645\u06cc \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u06a9\u0631\u062f \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u062a\u0646\u0647\u0627 \u06cc\u06a9 \u0634\u0631\u0637 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u0646\u0635\u0628 Docker \u06cc\u0627 OrbStack \u0628\u0631 \u0631\u0648\u06cc \u0631\u0627\u06cc\u0627\u0646\u0647 \u0634\u0645\u0627\u0633\u062a. \u0647\u0645\u06cc\u0646 \u0627\u0633\u062a. \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0646\u0635\u0628 Ruby\u060c Postgres\u060c SQLite\u060c Redis&#8230; \u0686\u06cc\u0632\u06cc \u0646\u06cc\u0633\u062a.<\/p>\n<p>\u0627\u06cc\u0646 \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u0628\u0647 \u0631\u0648\u0632 \u0634\u062f\u0647 \u0627\u0632 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u0634\u0631\u0648\u0639 \u0633\u0631\u06cc\u0639 \u0627\u0633\u062a \u06a9\u0647 \u0645\u062f\u062a\u06cc \u067e\u06cc\u0634 \u0646\u0648\u0634\u062a\u0645.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/docker-compose-with-rails-8-tailwind-and-sqlite-1k3m\/#%D9%BE%D9%88%D8%B4%D9%87_%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C\" >\u067e\u0648\u0634\u0647 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/docker-compose-with-rails-8-tailwind-and-sqlite-1k3m\/#%D9%BE%D8%B1%D9%88%DA%98%D9%87_%D8%B1%D8%A7_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%DA%A9%D9%86%DB%8C%D8%AF\" >\u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/docker-compose-with-rails-8-tailwind-and-sqlite-1k3m\/#%D9%BE%D8%B1%D9%88%DA%98%D9%87_%D8%B1%D8%A7_%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D8%AF\" >\u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/docker-compose-with-rails-8-tailwind-and-sqlite-1k3m\/#%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D9%BE%D8%B1%D9%88%DA%98%D9%87\" >\u0627\u062c\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/docker-compose-with-rails-8-tailwind-and-sqlite-1k3m\/#%D8%B5%D9%81%D8%AD%D9%87_%D8%AE%D9%88%D8%B4_%D8%A2%D9%85%D8%AF%DA%AF%D9%88%DB%8C%DB%8C_Rails_%D8%B1%D8%A7_%D9%85%D8%B4%D8%A7%D9%87%D8%AF%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0635\u0641\u062d\u0647 \u062e\u0648\u0634 \u0622\u0645\u062f\u06af\u0648\u06cc\u06cc Rails \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/docker-compose-with-rails-8-tailwind-and-sqlite-1k3m\/#%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%B1%D8%A7_%D9%85%D8%AA%D9%88%D9%82%D9%81_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0645\u062a\u0648\u0642\u0641 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/docker-compose-with-rails-8-tailwind-and-sqlite-1k3m\/#%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%B1%D8%A7_%D9%85%D8%AC%D8%AF%D8%AF%D8%A7_%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0645\u062c\u062f\u062f\u0627 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/docker-compose-with-rails-8-tailwind-and-sqlite-1k3m\/#%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%B1%D8%A7_%D8%A8%D8%A7%D8%B2%D8%B3%D8%A7%D8%B2%DB%8C_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%D9%88%D8%B4%D9%87_%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C\"><\/span>\n<p>  \u067e\u0648\u0634\u0647 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0628\u062a\u062f\u0627 \u06cc\u06a9 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0634\u0645\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0633\u067e\u0633 4 \u0641\u0627\u06cc\u0644 \u062e\u0627\u0644\u06cc \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">mkdir <\/span>my-project\n<span class=\"nb\">cd <\/span>my-project\n<span class=\"nb\">touch <\/span>Dockerfile.dev\n<span class=\"nb\">touch <\/span>docker-compose.yml\n<span class=\"nb\">touch <\/span>Gemfile\n<span class=\"nb\">touch <\/span>Gemfile.lock\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%D8%B1%D9%88%DA%98%D9%87_%D8%B1%D8%A7_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u0638\u0631\u0641 Docker \u06a9\u0647 \u062d\u0627\u0648\u06cc \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0622\u0646 \u0627\u0633\u062a \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f. \u062a\u0639\u0631\u06cc\u0641 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0641\u0627\u06cc\u0644\u06cc \u0628\u0647 \u0646\u0627\u0645 Dockerfile.dev \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f. \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f <strong>Dockerfile.dev<\/strong> \u0641\u0627\u06cc\u0644:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight docker\"><code><span class=\"c\"># syntax = docker\/dockerfile:1<\/span>\n\n<span class=\"c\"># Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile<\/span>\n<span class=\"k\">ARG<\/span><span class=\"s\"> RUBY_VERSION=3.3.5<\/span>\n<span class=\"k\">FROM<\/span><span class=\"s\"> registry.docker.com\/library\/ruby:$RUBY_VERSION-slim-bookworm<\/span>\n\n<span class=\"c\"># Rails app lives here<\/span>\n<span class=\"k\">WORKDIR<\/span><span class=\"s\"> \/rails<\/span>\n\n<span class=\"c\"># Install packages needed to build gems<\/span>\n<span class=\"k\">RUN <\/span>apt-get update <span class=\"nt\">-qq<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>  apt-get <span class=\"nb\">install<\/span> <span class=\"nt\">--no-install-recommends<\/span> <span class=\"nt\">-y<\/span> build-essential git curl node-gyp sqlite3\n\n<span class=\"c\"># Install JavaScript dependencies<\/span>\n<span class=\"k\">ARG<\/span><span class=\"s\"> NODE_VERSION=18.15.0<\/span>\n<span class=\"k\">ARG<\/span><span class=\"s\"> YARN_VERSION=latest<\/span>\n<span class=\"k\">ENV<\/span><span class=\"s\"> PATH=\/usr\/local\/node\/bin:$PATH<\/span>\n<span class=\"k\">RUN <\/span>curl <span class=\"nt\">-sL<\/span> https:\/\/github.com\/nodenv\/node-build\/archive\/master.tar.gz | <span class=\"nb\">tar <\/span>xz <span class=\"nt\">-C<\/span> \/tmp\/ <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>  \/tmp\/node-build-master\/bin\/node-build <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">NODE_VERSION<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span> \/usr\/local\/node <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>  npm <span class=\"nb\">install<\/span> <span class=\"nt\">-g<\/span> yarn@<span class=\"nv\">$YARN_VERSION<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>  <span class=\"nb\">rm<\/span> <span class=\"nt\">-rf<\/span> \/tmp\/node-build-master\n\n<span class=\"c\"># Run bundle install<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> Gemfile Gemfile.lock .\/<\/span>\n<span class=\"k\">RUN <\/span>bundle <span class=\"nb\">install<\/span>\n\n<span class=\"c\"># Copy application code<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> . .<\/span>\n\n<span class=\"c\"># Start the server by default, this can be overwritten at runtime<\/span>\n<span class=\"k\">EXPOSE<\/span><span class=\"s\"> 3000<\/span>\n<span class=\"k\">CMD<\/span><span class=\"s\"> [\"rails\", \"server\", \"-b\", \"0.0.0.0\"]<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<blockquote>\n<p><strong>\u0646\u06a9\u062a\u0647<\/strong><\/p>\n<p>\u0645\u0647\u0645 \u0627\u0633\u062a \u06a9\u0647 \u0627\u0632 .dev \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u0633\u0648\u0646\u062f \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u0648\u0631 \u062c\u062f\u06cc\u062f rails \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0622\u0646 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<\/blockquote>\n<p>\u0627\u06cc\u0646 \u06a9\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u06cc\u06a9 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0645\u06cc \u0633\u0627\u0632\u062f<br \/>\u0628\u0627 \u0631\u0648\u0628\u06cc\u060c \u0628\u0627\u0646\u062f\u0644\u0631 \u0648 \u062a\u0645\u0627\u0645 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0634\u0645\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646. \u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631<br \/>\u0646\u062d\u0648\u0647 \u0646\u0648\u0634\u062a\u0646 Dockerfiles\u060c \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 Docker \u0631\u0627 \u0628\u0628\u06cc\u0646\u06cc\u062f<br \/>\u0648 \u0645\u0631\u062c\u0639 Dockerfile.<\/p>\n<p>\u0628\u0639\u062f\u060c \u06cc\u06a9 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f \u0648 \u06cc\u06a9 \u0628\u0648\u062a \u0627\u0633\u062a\u0631\u067e \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <code>Gemfile<\/code> \u06a9\u0647 \u0641\u0642\u0637 Rails \u0631\u0627 \u0628\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u062f\u0631 \u06cc\u06a9 \u0644\u062d\u0638\u0647 \u062a\u0648\u0633\u0637 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u062e\u0648\u0627\u0647\u062f \u0634\u062f <code>rails new<\/code>. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0647\u0631 \u0646\u0633\u062e\u0647 \u0631\u06cc\u0644\u06cc \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"n\">source<\/span> <span class=\"s1\">'https:\/\/rubygems.org'<\/span>\n<span class=\"n\">gem<\/span> <span class=\"s1\">'rails'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'~&gt; 8.0'<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c <code>docker-compose.yml<\/code> \u062c\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062c\u0627\u062f\u0648 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc \u0627\u0641\u062a\u062f. \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u062e\u062f\u0645\u0627\u062a\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0631\u0627 \u0634\u0627\u0645\u0644 \u0645\u06cc \u0634\u0648\u062f \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u062a\u0634\u0631\u06cc\u062d \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code><span class=\"na\">services<\/span><span class=\"pi\">:<\/span>\n  <span class=\"na\">web<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">build<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">context<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.<\/span>\n      <span class=\"na\">dockerfile<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Dockerfile.dev<\/span>\n    <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"s\">bash -c \".\/bin\/dev\"<\/span>\n    <span class=\"na\">tty<\/span><span class=\"pi\">:<\/span> <span class=\"kc\">true<\/span>\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.:\/rails<\/span>\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">3000:3000\"<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<blockquote>\n<p><strong>\u0646\u06a9\u062a\u0647<\/strong><\/p>\n<p>\u0628\u0627\u06cc\u062f \u0627\u0632 tty:true \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u06cc\u0645 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc css\/js \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n<\/blockquote>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%D8%B1%D9%88%DA%98%D9%87_%D8%B1%D8%A7_%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D8%AF\"><\/span>\n<p>  \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0627 \u0648\u062c\u0648\u062f \u0622\u0646 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u060c \u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 Rails skeleton \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 docker compose run \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight console\"><code><span class=\"gp\">$<\/span><span class=\"w\"> <\/span>docker compose run <span class=\"nt\">--no-deps<\/span> web rails new <span class=\"nb\">.<\/span> <span class=\"nt\">--name<\/span><span class=\"o\">=<\/span>my-project  <span class=\"nt\">--force<\/span> <span class=\"nt\">--css<\/span><span class=\"o\">=<\/span>tailwind <span class=\"nt\">--js<\/span><span class=\"o\">=<\/span>esbuild\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0648\u0642\u062a\u06cc \u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u06cc\u062f\u060c Compose \u062a\u0635\u0648\u06cc\u0631\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0622\u0646 \u0645\u06cc \u0633\u0627\u0632\u062f <code>web<\/code> \u062e\u062f\u0645\u0627\u062a \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>Dockerfile.dev<\/code> \u0641\u0627\u06cc\u0644<br \/>\u0631\u0627 <code>--no-deps<\/code> \u0628\u0647 Compose \u0645\u06cc\u200c\u06af\u0648\u06cc\u062f \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u0645\u0631\u062a\u0628\u0637 \u0631\u0627 \u0634\u0631\u0648\u0639 \u0646\u06a9\u0646\u062f. \u0633\u067e\u0633 \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f <code>rails new<\/code> \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u0638\u0631\u0641 \u062c\u062f\u06cc\u062f\u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u062a\u0635\u0648\u06cc\u0631.<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0627\u0646\u062c\u0627\u0645 \u0622\u0646\u060c \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u062f\u06cc\u062f \u062f\u0631 \u062f\u0627\u062e\u0644 \u067e\u0648\u0634\u0647 \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<blockquote>\n<p><strong>\u0646\u06a9\u062a\u0647<\/strong><\/p>\n<p>\u0627\u06af\u0631 Docker \u0631\u0627 \u0631\u0648\u06cc \u0644\u06cc\u0646\u0648\u06a9\u0633 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0641\u0627\u06cc\u0644 \u0647\u0627 <code>rails new<\/code> \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 root \u0647\u0633\u062a\u0646\u062f\u060c \u0628\u0631\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0622\u0646 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0645\u062c\u0628\u0648\u0631 \u0634\u0648\u06cc\u062f chown \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<pre class=\"highlight console\"><code><span class=\"gp\">$<\/span><span class=\"w\"> <\/span><span class=\"nb\">sudo chown<\/span> <span class=\"nt\">-R<\/span> <span class=\"nv\">$USER<\/span>:<span class=\"nv\">$USER<\/span> <span class=\"nb\">.<\/span>\n<\/code><\/pre>\n<\/blockquote>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u06cc\u06a9 Gemfile \u062c\u062f\u06cc\u062f \u062f\u0627\u0631\u06cc\u062f\u060c \u0628\u0627\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f. (\u0627\u06cc\u0646\u060c \u0648 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u0647 <code>Gemfile<\/code> \u06cc\u0627 Dockerfile\u060c \u0628\u0627\u06cc\u062f \u062a\u0646\u0647\u0627 \u0645\u0648\u0627\u0631\u062f\u06cc \u0628\u0627\u0634\u062f \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u062f\u0627\u0631\u06cc\u062f.)<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight console\"><code><span class=\"gp\">$<\/span><span class=\"w\"> <\/span>docker compose build\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D9%BE%D8%B1%D9%88%DA%98%D9%87\"><\/span>\n<p>  \u0627\u062c\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0648\u062a \u06a9\u0646\u06cc\u062f\u060c \u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u06a9\u0647 0.0.0.0 \u0631\u0627 \u0628\u0647 \u0633\u0631\u0648\u0631 \u062e\u0648\u062f \u0645\u062a\u0635\u0644 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645. \u0631\u0641\u062a\u0646 \u0628\u0647 <code>Procfile.dev<\/code> \u0648 &#8220;-b 0.0.0.0&#8221; \u0631\u0627 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u062e\u0637 \u0627\u0648\u0644 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f\u060c \u0628\u0627\u06cc\u062f \u0634\u0628\u06cc\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>web: env RUBY_DEBUG_OPEN=true bin\/rails server -b 0.0.0.0\njs: yarn build --watch\ncss: yarn build:css --watch\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0648 \u0622\u062e\u0631\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0642\u0628\u0644 \u0627\u0632 \u0686\u0631\u062e\u0634 \u0628\u0631\u0646\u0627\u0645\u0647 \u067e\u0631\u0648\u0698\u0647\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0628\u0631\u062e\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062c\u0632\u0626\u06cc \u062f\u0631 \u0622\u0646 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645 <code>Dockerfile.dev<\/code> \u0641\u0627\u06cc\u0644 \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0627\u06cc\u0646 \u062e\u0637\u0648\u0637 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<p><code>COPY ..<\/code><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight docker\"><code><span class=\"c\"># Entrypoint prepares the database.<\/span>\n<span class=\"k\">ENTRYPOINT<\/span><span class=\"s\"> [\"\/rails\/bin\/docker-entrypoint\"]<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>Dockerfile.dev \u0646\u0647\u0627\u06cc\u06cc \u0628\u0627\u06cc\u062f \u0628\u0647 \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight docker\"><code><span class=\"c\"># syntax = docker\/dockerfile:1<\/span>\n\n<span class=\"c\"># Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile<\/span>\n<span class=\"k\">ARG<\/span><span class=\"s\"> RUBY_VERSION=3.3.5<\/span>\n<span class=\"k\">FROM<\/span><span class=\"s\"> registry.docker.com\/library\/ruby:$RUBY_VERSION-slim-bookworm<\/span>\n\n<span class=\"c\"># Rails app lives here<\/span>\n<span class=\"k\">WORKDIR<\/span><span class=\"s\"> \/rails<\/span>\n\n<span class=\"c\"># Install packages needed to build gems<\/span>\n<span class=\"k\">RUN <\/span>apt-get update <span class=\"nt\">-qq<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>  apt-get <span class=\"nb\">install<\/span> <span class=\"nt\">--no-install-recommends<\/span> <span class=\"nt\">-y<\/span> build-essential git curl node-gyp sqlite3\n\n<span class=\"c\"># Install JavaScript dependencies<\/span>\n<span class=\"k\">ARG<\/span><span class=\"s\"> NODE_VERSION=18.15.0<\/span>\n<span class=\"k\">ARG<\/span><span class=\"s\"> YARN_VERSION=latest<\/span>\n<span class=\"k\">ENV<\/span><span class=\"s\"> PATH=\/usr\/local\/node\/bin:$PATH<\/span>\n<span class=\"k\">RUN <\/span>curl <span class=\"nt\">-sL<\/span> https:\/\/github.com\/nodenv\/node-build\/archive\/master.tar.gz | <span class=\"nb\">tar <\/span>xz <span class=\"nt\">-C<\/span> \/tmp\/ <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>  \/tmp\/node-build-master\/bin\/node-build <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">NODE_VERSION<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span> \/usr\/local\/node <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>  npm <span class=\"nb\">install<\/span> <span class=\"nt\">-g<\/span> yarn@<span class=\"nv\">$YARN_VERSION<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>  <span class=\"nb\">rm<\/span> <span class=\"nt\">-rf<\/span> \/tmp\/node-build-master\n\n<span class=\"c\"># Run bundle install<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> Gemfile Gemfile.lock .\/<\/span>\n<span class=\"k\">RUN <\/span>bundle <span class=\"nb\">install<\/span>\n\n<span class=\"c\"># Copy application code<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> . .<\/span>\n\n<span class=\"c\"># Entrypoint prepares the database.<\/span>\n<span class=\"k\">ENTRYPOINT<\/span><span class=\"s\"> [\"\/rails\/bin\/docker-entrypoint\"]<\/span>\n\n<span class=\"c\"># Start the server by default, this can be overwritten at runtime<\/span>\n<span class=\"k\">EXPOSE<\/span><span class=\"s\"> 3000<\/span>\n<span class=\"k\">CMD<\/span><span class=\"s\"> [\"rails\", \"server\", \"-b\", \"0.0.0.0\"]<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062d\u0627\u0644\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646<\/p>\n<p><code>docker compose build<\/code><\/p>\n<p>\u062f\u0648\u0628\u0627\u0631\u0647 \u0648 \u0633\u067e\u0633 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c<\/p>\n<p><code>docker compose up<\/code><\/p>\n<p>.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B5%D9%81%D8%AD%D9%87_%D8%AE%D9%88%D8%B4_%D8%A2%D9%85%D8%AF%DA%AF%D9%88%DB%8C%DB%8C_Rails_%D8%B1%D8%A7_%D9%85%D8%B4%D8%A7%D9%87%D8%AF%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0635\u0641\u062d\u0647 \u062e\u0648\u0634 \u0622\u0645\u062f\u06af\u0648\u06cc\u06cc Rails \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f!<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0647\u0645\u06cc\u0646 \u0627\u0633\u062a. \u0627\u06a9\u0646\u0648\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0631\u0648\u06cc \u067e\u0648\u0631\u062a 3000 \u062f\u0631 \u062f\u0627\u06a9\u0631 \u062f\u0627\u06cc\u0645\u0648\u0646 \u0634\u0645\u0627 \u0627\u062c\u0631\u0627 \u0634\u0648\u062f\u060c \u0628\u0647 \u0627\u06cc\u0646 \u0622\u062f\u0631\u0633 \u0628\u0631\u0648\u06cc\u062f <code>http:\/\/localhost:3000<\/code> \u062f\u0631 \u06cc\u06a9 \u0645\u0631\u0648\u0631\u06af\u0631 \u0648\u0628 \u0628\u0631\u0627\u06cc \u062f\u06cc\u062f\u0646 Rails Welcome.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%B1%D8%A7_%D9%85%D8%AA%D9%88%D9%82%D9%81_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0645\u062a\u0648\u0642\u0641 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u062a\u0648\u0642\u0641 \u0628\u0631\u0646\u0627\u0645\u0647\u060c docker compose \u0631\u0627 \u062f\u0631 \u0641\u0647\u0631\u0633\u062a \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f. \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0647\u0645\u0627\u0646 \u067e\u0646\u062c\u0631\u0647 \u062a\u0631\u0645\u06cc\u0646\u0627\u0644\u06cc \u06a9\u0647 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627 \u062f\u0631 \u0622\u0646 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u06cc\u0627 \u0627\u0632 \u067e\u0646\u062c\u0631\u0647 \u062f\u06cc\u06af\u0631\u06cc \u06a9\u0647 \u0628\u0647 \u06cc\u06a9 \u062e\u0637 \u0641\u0631\u0645\u0627\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0631\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u06cc\u06a9 \u0631\u0627\u0647 \u062a\u0645\u06cc\u0632 \u0628\u0631\u0627\u06cc \u0645\u062a\u0648\u0642\u0641 \u06a9\u0631\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight console\"><code><span class=\"go\">docker compose down\n \u2714 Container my-project-web-1  Removed0.0s\n \u2714 Network my-project_default  Removed\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%B1%D8%A7_%D9%85%D8%AC%D8%AF%D8%AF%D8%A7_%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0645\u062c\u062f\u062f\u0627 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u062c\u062f\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f <code>docker compose up<\/code> \u062f\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u067e\u0631\u0648\u0698\u0647<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%B1%D8%A7_%D8%A8%D8%A7%D8%B2%D8%B3%D8%A7%D8%B2%DB%8C_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06af\u0631 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u06cc \u062f\u0631 \u0641\u0627\u06cc\u0644 Gemfile \u06cc\u0627 Compose \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0645\u0648\u0627\u0631\u062f \u062f\u06cc\u06af\u0631\u06cc \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u06cc\u062f<br \/>\u062a\u0646\u0638\u06cc\u0645\u0627\u062a\u060c \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0633\u0627\u0632\u06cc\u062f. \u0628\u0631\u062e\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0641\u0642\u0637 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0646\u062f<br \/><code>docker compose up --build<\/code>\u060c \u0627\u0645\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u06a9\u0627\u0645\u0644 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u062c\u0631\u0627\u06cc \u0645\u062c\u062f\u062f \u062f\u0627\u0631\u062f<br \/><code>docker compose run web bundle install<\/code>  \u0628\u0631\u0627\u06cc \u0647\u0645\u06af\u0627\u0645 \u0633\u0627\u0632\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 <code>Gemfile.lock<\/code> \u0628\u0647<br \/>\u0645\u06cc\u0632\u0628\u0627\u0646 \u0648 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u0622\u0646 <code>docker compose up --build<\/code>.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0627\u0632 \u0645\u0648\u0631\u062f \u0627\u0648\u0644 \u0627\u0633\u062a\u060c \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u06a9\u0627\u0645\u0644 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a.<br \/>\u0641\u0631\u0636 \u06a9\u0646\u06cc\u062f \u0634\u0645\u0627 \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u067e\u0648\u0631\u062a \u062f\u0631 \u0645\u0639\u0631\u0636 \u062f\u06cc\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0645\u062d\u0644\u06cc \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f <code>3000<\/code><br \/>\u062f\u0631 \u0627\u0648\u0644\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0645\u0627 \u0628\u0647 <code>3001<\/code>. \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634\u060c \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644 Compose \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f<br \/>\u0628\u0646\u062f\u0631 <code>3000<\/code> \u0631\u0648\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u067e\u0648\u0631\u062a \u062c\u062f\u06cc\u062f\u060c <code>3001<\/code>\u060c \u0631\u0648\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646 \u0648 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f<br \/>\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code><span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\n  <span class=\"pi\">-<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">3001:3000\"<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06a9\u0646\u0648\u0646\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u062c\u062f\u062f \u06a9\u0646\u06cc\u062f <code>docker compose up --build<\/code>.<\/p>\n<p>\u062f\u0631 \u062f\u0627\u062e\u0644 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u062f\u0631 \u0647\u0645\u0627\u0646 \u067e\u0648\u0631\u062a \u0642\u0628\u0644\u06cc \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f <code>3000<\/code>\u060c \u0627\u0645\u0627<br \/>Rails Welcome \u0627\u06a9\u0646\u0648\u0646 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0627\u0633\u062a <code>http:\/\/localhost:3001<\/code> \u062f\u0631 \u0645\u062d\u0644 \u0634\u0645\u0627<br \/>\u0645\u06cc\u0632\u0628\u0627\u0646.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u0633\u0644\u0627\u0645 \u062e\u06cc\u0644\u06cc \u0648\u0642\u062a\u0647 \u0646\u062f\u06cc\u062f\u0645 \u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u0632 Docker Compose \u0628\u0631\u0627\u06cc \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0648 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 Ruby On Rails \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f 8 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0642\u0635\u062f \u0646\u062f\u0627\u0631\u0645 \u062a\u0645\u0627\u0645 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0627 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0646\u0633\u062e\u0647 \u0627\u0631\u0633\u0627\u0644 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":84436,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-84435","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/84435","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=84435"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/84435\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/84436"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=84435"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=84435"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=84435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}