如何 Dockerize Rails 應(yīng)用程序:Dockerize Compose 和 Rails 教程

言鼎科技 2023-06-24 398

介紹

好奇的開(kāi)發(fā)人員和技術(shù)愛(ài)好者永遠(yuǎn)不會(huì)錯(cuò)過(guò)每天多學(xué)習(xí)一點(diǎn)的機(jī)會(huì)!我完全可以理解這種學(xué)習(xí)的沖動(dòng)。所以,我們回來(lái)了另一個(gè) Rails 教程,關(guān)于如何在 rails docker compose 的幫助下對(duì)rails app 進(jìn)行 dockerize 。請(qǐng)熟悉什么是 Docker 以及我們?yōu)槭裁葱枰?Docker。

讓我們開(kāi)始應(yīng)用程序開(kāi)發(fā)并將其 docker 化。

創(chuàng)建 Rails 應(yīng)用程序

觸發(fā)以下命令來(lái)創(chuàng)建一個(gè) Rails 應(yīng)用程序。

如何 Dockerize Rails 應(yīng)用程序:Dockerize Compose 和 Rails 教程
mkdir ~/項(xiàng)目/noteappcd ~/項(xiàng)目/noteapp

先決條件:Dockerize Rails 應(yīng)用程序

在我們實(shí)施 Docker Compose 時(shí),請(qǐng)?jiān)陂_(kāi)始之前確保以下安裝。

  • 安裝Docker 社區(qū)版

  • 安裝Docker 組合

創(chuàng)建一個(gè) Dockerfile

Dockerfile 是任何 Dockerize Ruby on Rails 應(yīng)用程序的基礎(chǔ)。它包含構(gòu)建應(yīng)用程序映像的所有說(shuō)明。您可以通過(guò)安裝 Ruby 及其所有依賴項(xiàng)來(lái)進(jìn)行設(shè)置。Dockerfile 包含以下指令。

// 文件

如何 Dockerize Rails 應(yīng)用程序:Dockerize Compose 和 Rails 教程
來(lái)自紅寶石:2.3.0運(yùn)行 apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs運(yùn)行 mkdir /noteapp工作目錄 /noteapp添加 Gemfile /noteapp/Gemfile添加 Gemfile.lock /noteapp/Gemfile.lock運(yùn)行捆綁安裝添加 。/筆記應(yīng)用

Dockerfile 會(huì)將應(yīng)用程序代碼保存在一個(gè)圖像中,構(gòu)建一個(gè)包含 Bundler、Ruby 和其他依賴項(xiàng)的容器。因此,在應(yīng)用程序的根目錄中,使用以下命令創(chuàng)建一個(gè)新的 Dockerfile觸摸 Dockerfile并將上述 dockerfile 的內(nèi)容放入其中。

解釋

1. FROM ruby:2.3.0:告訴 Docker 使用預(yù)構(gòu)建的 Ruby 鏡像。有多種選擇,但本項(xiàng)目使用 ruby:2.3.0 鏡像。
2. RUN:運(yùn)行命令。在這里, RUN 用于使用Apt安裝不同的軟件。
3. WORKDIR:用于說(shuō)明執(zhí)行所有命令的基本目錄。
4. ADD:用于將文件從主機(jī)復(fù)制到我們的容器。

創(chuàng)建一個(gè)寶石文件

接下來(lái),打開(kāi)編輯器并創(chuàng)建一個(gè)加載 Rails 的引導(dǎo)程序 Gemfile。

// 寶石文件

如何 Dockerize Rails 應(yīng)用程序:Dockerize Compose 和 Rails 教程
來(lái)源 'https://rubygems.org'寶石 'rails', '~>5.0.0'

創(chuàng)建一個(gè)空的Gemfile.lock文件來(lái)構(gòu)建我們的Dockerfile

如何 Dockerize Rails 應(yīng)用程序:Dockerize Compose 和 Rails 教程
觸摸 Gemfile.lock

Dockerize Rails 應(yīng)用程序:為您的應(yīng)用程序添加可移植性、模塊化和可擴(kuò)展性
聯(lián)系 Bacancy 并聘請(qǐng) Rails 開(kāi)發(fā)人員對(duì)您的 Rails 應(yīng)用程序進(jìn)行 Dockerize。

使用 Docker Compose 定義服務(wù)

最后,進(jìn)入最重要的部分。docker-compose.yml文件將包含您的應(yīng)用程序(Web 應(yīng)用程序和數(shù)據(jù)庫(kù))所需的服務(wù),用于獲取彼此的 Docker 映像,以及用于連接它們并使其在端口上可見(jiàn)的配置。

// docker-compose.yml

如何 Dockerize Rails 應(yīng)用程序:Dockerize Compose 和 Rails 教程
版本:'2'服務(wù):
 D b:
   圖片:mysql:5.7
   重啟:總是
   環(huán)境:
       MYSQL_ROOT_PASSWORD:密碼
       MYSQL_DATABASE:記事本
       MYSQL_USER:應(yīng)用用戶
       MYSQL_PASSWORD:密碼
  端口:
       - “3307:3306”
   應(yīng)用程序:
       建造: 。
       命令:bundle exec rails s -p 3000 -b '0.0.0.0'
       卷:
           - “.:/noteapp”
       端口:
           - “3001:3000”
       依賴于取決于
         - D b
       鏈接:  
            - D b

構(gòu)建項(xiàng)目

現(xiàn)在在 docker-compose run 的幫助下構(gòu)建 Rails 應(yīng)用程序的框架。

如何 Dockerize Rails 應(yīng)用程序:Dockerize Compose 和 Rails 教程
docker-compose run app rails new 。--force --database=mysql 

  • compose——為應(yīng)用服務(wù)構(gòu)建鏡像,我們必須在 docker-compose.yml 中定義它

  • runs rails new——使用該圖像在新容器中運(yùn)行應(yīng)用程序

  • database=mysql – 定義數(shù)據(jù)庫(kù)

成功執(zhí)行命令后,應(yīng)創(chuàng)建您的應(yīng)用程序。列出使用的文件ls -l

數(shù)據(jù)庫(kù)連接

在本節(jié)中,我們將連接數(shù)據(jù)庫(kù),因?yàn)?rails 希望數(shù)據(jù)庫(kù)在本地主機(jī)上運(yùn)行。

我們還將更改數(shù)據(jù)庫(kù)和用戶名,以使其與 MySQL 映像的默認(rèn)值保持一致。當(dāng)我們運(yùn)行docker-compose命令首先,它會(huì)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)容器,用于下載 MySQL 數(shù)據(jù)庫(kù)鏡像,并根據(jù)docker-compose.yml文件中設(shè)置的環(huán)境變量創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)。

到目前為止,我們已經(jīng)創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù)容器和應(yīng)用程序結(jié)構(gòu)。我們需要編輯config/database.yml文件并從環(huán)境變量中設(shè)置配置。

將config/database.yml的內(nèi)容替換為以下內(nèi)容:

// docker-compose.yml

如何 Dockerize Rails 應(yīng)用程序:Dockerize Compose 和 Rails 教程
版本:'2'服務(wù):
 D b:
   圖片:mysql:5.7
   重啟:總是
   環(huán)境:
       MYSQL_ROOT_PASSWORD:密碼
       MYSQL_DATABASE:記事本
       MYSQL_USER:應(yīng)用用戶
       MYSQL_PASSWORD:密碼
  端口:
       - “3307:3306”
   應(yīng)用程序:
       建造: 。
       命令:bundle exec rails s -p 3000 -b '0.0.0.0'
       卷:
           - “.:/noteapp”
       端口:
           - “3001:3000”
       依賴于取決于:
         - D b
       鏈接:  
            - D b
       環(huán)境 :
           DB_USER:根
           DB_NAME:記事本
           DB_PASSWORD:密碼
           DB_HOST:分貝

設(shè)置docker-compose.yml后,運(yùn)行docker-compose 構(gòu)建命令為應(yīng)用程序構(gòu)建圖像并安裝所有必需的 gem。

運(yùn)行以下命令創(chuàng)建數(shù)據(jù)庫(kù)。

如何 Dockerize Rails 應(yīng)用程序:Dockerize Compose 和 Rails 教程
docker-compose 運(yùn)行 --rm app rake db:migrate

在創(chuàng)建任何遷移/模型之前,讓我們做一個(gè) docker-compose up 來(lái)啟動(dòng)應(yīng)用程序和數(shù)據(jù)庫(kù)服務(wù),并在database.yml中進(jìn)行更改后啟動(dòng)應(yīng)用程序。

命令執(zhí)行成功后,我們可以看到rails運(yùn)行在容器中的3000端口上。但是,那不是主機(jī)上的端口,所以我們無(wú)法在瀏覽器上訪問(wèn)它。根據(jù) docker-compose,我們已經(jīng)將本地主機(jī)上的端口從 3000 暴露到 3001;因此,它應(yīng)該在 localhost:3001 上可用。

完成在瀏覽器上運(yùn)行的應(yīng)用程序后,創(chuàng)建模型并在項(xiàng)目目錄的不同控制臺(tái)中使用這些命令執(zhí)行遷移。

如何 Dockerize Rails 應(yīng)用程序:Dockerize Compose 和 Rails 教程
docker-compose run --rm app rails g 腳手架注釋標(biāo)題正文:文本docker-compose 運(yùn)行 --rm app rake db:migrate

現(xiàn)在,我們可以訪問(wèn)端口 3001-localhost:3001/notes 上的應(yīng)用程序并對(duì)應(yīng)用程序執(zhí)行操作。

總結(jié):如何將 Rails 應(yīng)用程序 Dockerize

  • mkdir ~/項(xiàng)目/noteapp

  • cd ~/項(xiàng)目/noteapp

  • 創(chuàng)建Gemfile并清空Gemfile.lock(內(nèi)容如上)

  • 創(chuàng)建Dockerfile(內(nèi)容如上)

  • 創(chuàng)建docker-compose.yml(內(nèi)容如上)

  • docker-compose run app rails new 。–force –database=mysql

  • 在 config/database.yml 中進(jìn)行更改

  • docker-compose 構(gòu)建

  • 碼頭工人組成

  • http://localhost:3001

  • docker-compose run –rm app rails g 腳手架注釋標(biāo)題正文:文本

  • docker-compose run –rm app rake db:遷移

  • http://localhost:3001/筆記

還可以觀看有關(guān)如何對(duì)Rails 應(yīng)用程序進(jìn)行 docker 化的視頻教程。

源代碼:dockerize-rails-app

您還可以克隆代碼并瀏覽項(xiàng)目。這是存儲(chǔ)庫(kù)的源代碼:dockerize-rails-app

命令:停止、重新啟動(dòng)和重建應(yīng)用程序

  • 停止應(yīng)用程序

如何 Dockerize Rails 應(yīng)用程序:Dockerize Compose 和 Rails 教程
docker-compose down
  • 重新啟動(dòng)應(yīng)用程序

如何 Dockerize Rails 應(yīng)用程序:Dockerize Compose 和 Rails 教程
碼頭工人組成
  • 重建應(yīng)用程序

當(dāng)您嘗試不同的配置并更改 Gemfile 或 Compose 文件時(shí),必須重建應(yīng)用程序。
? 有時(shí)只
docker-compose up –build足夠。
? 但是,如果你想完全重建整個(gè)應(yīng)用程序,那么使用
docker-compose run app bundle 安裝, 其次是docker-compose up –build用于同步 Gemfile.lock 和主機(jī)之間的更改。

結(jié)論

教程就是這樣:如何使用 Docker Compose 對(duì) Rails 應(yīng)用程序進(jìn)行 Docker 化。我希望本教程對(duì)您構(gòu)建自己的演示應(yīng)用程序和探索更多內(nèi)容有所幫助。

訪問(wèn)Ruby on Rails 教程頁(yè)面以獲取類似的教程,您可以在其中探索您的興趣并嘗試代碼。正在尋找可以幫助您滿足項(xiàng)目要求的熟練 Rails 開(kāi)發(fā)人員?聯(lián)系我們并聘請(qǐng) Rails 開(kāi)發(fā)人員。

言鼎科技

The End