如何 Dockerize Rails 應(yīng)用程序:Dockerize Compose 和 Rails 教程
介紹
好奇的開(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)用程序
在我們實(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 包含以下指令。
// 文件
來(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。
// 寶石文件
創(chuàng)建一個(gè)空的Gemfile.lock文件來(lái)構(gòu)建我們的Dockerfile。
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
版本:'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)用程序的框架。
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
版本:'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ù)。
在創(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í)行遷移。
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)用程序
重新啟動(dòng)應(yīng)用程序
重建應(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ā)人員。