参考にした記事
https://qiita.com/notozeki/items/ac1bf72cf44b7ed6a6ad

通常Dockerfileでは、カレントディレクトリにあるデータを「COPY」コマンドでイメージにコピーし作成しますが、githubからcloneしてサーバーを建てることで複数人で開発している場合のデプロイ作業を誰でも簡単にできるようにします。

筆者が作成したRailsアプリケーションを例にしています。適宜変更してください。

Dockerfile

FROM ruby:3.0.0-alpine

WORKDIR /app

ENV RAILS_ENV="production"
ENV NODE_ENV="production"
ENV SECRET_KEY_BASE=hogehoge

# 依存パッケージのインストール
RUN apk add --no-cache -t .build-dependencies \
    build-base \
    libxml2-dev\
    libxslt-dev \
    git \
 && apk add --no-cache \
    bash \
    file \
    imagemagick \
    libpq \
    libxml2 \
    libxslt \
    nodejs \
    sqlite-dev \
    tini \
    tzdata \
    yarn \
 && gem install bundler:2.0.2 

# これ以降はキャッシュが利用されないようにする。
ADD "https://www.random.org/cgi-bin/randbyte?nbytes=10&format=h" /dev/null

# Githubからクローン
RUN git clone https://github.com/kajikentaro/timetablemanager

# Workdirをクローンしたディレクトリに変更
WORKDIR /app/timetablemanager

# Gemfile.lockを更新するため一度bundle install
RUN bundle install

# ビルドの設定をデプロイメントに変更し、bundle install
RUN bundle config set --local deployment 'true' && bundle config set --local without 'test development' && bundle install

# ビルド時にのみ必要なパッケージをアンインストール
RUN apk del --purge .build-dependencies

RUN bundle exec rails assets:precompile \
 && yarn cache clean \
 && rm -rf node_modules tmp/cache

RUN rails db:migrate

ENV RAILS_SERVE_STATIC_FILES="true"
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0", "-p", "3000"]
EXPOSE 3000

空ディレクトリ、もしくは適当なディレクトリにDockerfileという名前で保存した後、そのディレクトリ内で、

docker build .

とコマンドを実行。正しくできれば「Successfully built [ハッシュ値]」と出力される。

起動したいときは以下コマンド

docker run -itd -p 3000:3000 [ハッシュ値]

あとはブラウザからlocalhost:3000にアクセスすれば良い

おまけ

開発用のDockerfile。

FROM ruby:3.0.0-alpine

WORKDIR /app

# 依存パッケージのインストール
RUN apk add --no-cache -t .build-dependencies \
    build-base \
    libxml2-dev\
    libxslt-dev \
    git \
 && apk add --no-cache \
    bash \
    file \
    imagemagick \
    libpq \
    libxml2 \
    libxslt \
    nodejs \
    sqlite-dev \
    tini \
    tzdata \
    yarn \
 && gem install bundler:2.0.2 


# Githubからクローン
RUN git clone https://github.com/kajikentaro/timetablemanager

# Workdirをクローンしたディレクトリに変更
WORKDIR /app/timetablemanager

# Gemfile.lockを更新するため一度bundle install
RUN bundle install

RUN rails webpacker:install && rails db:migrate

CMD ["/bin/sh"]

EXPOSE 3000

$ docker run -it -p 3000:3000 [イメージハッシュ値] /bin/sh
# rails s -b 0.0.0.0

としてやると、localhost:3000でアクセスできる。developmentモードなので、コードを変更してもセーブすれば自動で反映する。