dockerとdocker composeでwebアプリをdocker化する方法

使用Docker和Docker Compose将Web应用程序容器化。

我想要建立一个Docker环境

    • docker-compose upでrailsプロセスとdbが起動し、http://localhost:3000 でアクセスできるようにすること

 

    • nodejs,yarnはマルチステージビルドでインストールすること(apt-getは使用しない)

 

    • ※マルチステージビルド

1つのDockerfileに複数のイメージを作る
複数のFROMが存在する

步骤

今回はrails newはしてある

必要なファイルを準備する
touch [Dockerfile docker-compose.yml]

Dockerfileに以下を記述

# FROMが2つあり、nodeとrubyの2つのイメージ
FROM node:14.17.6 as node
FROM ruby:3.0.2

# railsのセットアップ
WORKDIR /rails-docker
# 複数コピーする場合はtargetのディレクトリの最後にスラッシュ(/)を追加しないとエラーになるらしい
COPY Gemfile Gemfile.lock /rails-docker/
RUN bundle install

# nodeのイメージからyarnを取得、hostのパッケージを持ってくる
COPY –from=node /opt/yarn-* /opt/yarn
COPY –from=node /usr/local/bin/node /usr/local/bin/
COPY –from=node /usr/local/lib/node_modules/ /usr/local/lib/node_modules/

# npmが入っているファイルに扱いやすい名前でシンボリックリンクを作成
# -sでシンボリックリンク、デフォはハードリンク
# -fでリンクファイルと同じ名前のファイルがあっても強制的に上書きする、ビルド時にファイル重複でエラーを吐かせないため
RUN ln -fs /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
&& ln -fs /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npx \
&& ln -fs /opt/yarn/bin/yarn /usr/local/bin/yarn \
&& ln -fs /opt/yarn/bin/yarnpkg /usr/local/bin/yarnpkg

# docker-compose up時にrailsサーバーを立ち上げる
CMD [ “rails”, “s”, “-b”, “0.0.0.0” ]

docker-compose.ymlに以下を記述

docker-compose.yml
version: ‘3.9’

volumes:
# dbのデータを入れておくためのdocker volume
db-data:

services:
web:
build: .
ports:
– “3000:3000”
volumes:
– ‘.:/rails-docker’
environment:
– ‘DATABASE_PASSWORD=postgres’
tty: true
stdin_open: true
depends_on:
– db

db:
# DBをpostgresqlに
image: postgres
volumes:
– ‘db-data:/var/lib/postgresql/data’

/config/database.ymlの変更
default: &defaultに以下を追記
host, user, port, paswordを追加

host: db
user: postgres
port: 5432
password: <%= ENV.fetch("DATABASE_PASSWORD") %>

docker-compose upして、http://localhost:3000/ にアクセスしてrailsの画面が表示されていれば成功

自己要确保不要忘记检查,因为我已经将WORKDIR指定的路径更改为与原先的不同。在容器启动后,进入容器使用ls命令,确认构建上下文是否正确地挂载是一个好主意。

bannerAds