dockerfileの復習
自分なりに説明できるようにまとめていきます。
Dockerとは?
パソコン上に仮想環境を作れるツールです。
仮想環境とは?
物理的なハードウェアを持たず仮想的にOSを動かし、アプリケーションを実行させる環境
ハードウェアとは→http://kccn.konan-u.ac.jp/information/cs/cyber01/cy1_hdw.htm
OS(Operating System)とは
システム全体を管理し、様々なアプリケーションソフトを動かすための最も基本的なソフトウェア(windows mac LinuxなどがOS)
Dockerを使った仮想環境の具体例
画像 独学プログラマ様より引用
通常開発環境 左画像
railsを使用するとmac上のruby環境に依存するため、複数人で同じ環境にする場合はmacにインストールされているものを全員で揃えなければならない
またはgemfileを書き換えrubyのバージョンを変更し、起動させる
Docker開発環境 右画像
本体にインストールするわけではなく、dockerを起動し、コンテナ内にrubyや他の必要なものをインストールする。
mac上にあるものに変化はありません。
Dockerのメリット
移植性が優れている
→他の環境でも同じ環境を作成できる。
コンテナ作成のもととなるものがDockerイメージ
DockerイメージはDocerfileをもとに作られる
Dockerfile→Dockerイメージ→Dockerコンテナ
Dockerfileにはコンテナがどの様な構成なるのかをコードで記述する。
docker buildコマンドを実行することで、Dockerイメージが作成され、そのイメージをもとにコンテナが起動する。
front
FROM node:14.15.0-alpine
ARG WORKDIR
ARG CONTAINER_PORT
# 本番環境
ARG API_URL
ENV HOME=/${WORKDIR} \
LANG=C.UTF-8 \
TZ=Asia/Tokyo \
HOST=0.0.0.0 \
API_URL=https://foodcom-api.work/ \
NPM_CONFIG_PRODUCTION=false
# ENV check
RUN echo ${HOME}
RUN echo ${CONTAINER_PORT}
RUN echo ${API_URL}
WORKDIR ${HOME}
COPY package*.json ./
RUN apk update && \
apk upgrade && \
apk add --no-cache make gcc g++ python && \
yarn install && \
rm -rf /var/cache/apk/*
COPY . .
# 開発環境-------------------------
# RUN yarn run build
# EXPOSE ${CONTAINER_PORT}
# ----------------------------------
# 本番環境-------------------------
RUN yarn run build
EXPOSE 3000
CMD ["yarn","run","start"]
#----------------------------------
backend
FROM ruby:2.7.1-alpine
ARG WORKDIR
ENV RUNTIME_PACKAGES="linux-headers libxml2-dev make gcc libc-dev nodejs tzdata postgresql-dev postgresql git less" \
DEV_PACKAGES="build-base curl-dev" \
HOME=/${WORKDIR} \
LANG=C.UTF-8 \
TZ=Asia/Tokyo
RUN echo ${HOME}
WORKDIR ${HOME}
COPY Gemfile* ./
RUN apk update && \
apk upgrade && \
apk add --no-cache ${RUNTIME_PACKAGES} && \
apk add --virtual build-dependencies --no-cache ${DEV_PACKAGES} && \
bundle install -j4 && \
apk del build-dependencies
COPY . .
# # 開発環境
# CMD ["bundle", "exec", "rails", "s", "-p", "3000", "-b", "0.0.0.0", "-e", "development"]
# 本番環境
EXPOSE 3000
CMD ["bundle", "exec", "rails", "s", "puma", "-b", "0.0.0.0", "-p", "3000", "-e", "production"]
FROM <ベースイメージ>
コンテナをどのイメージから生成するかを必ず記入する
ARG 変数名
Dockerfile内で使用している変数名を指定する
ENV 変数名=値
Dockerイメージで使用する環境変数を指定する
ENVを使って設定した環境変数は、イメージからコンテナに渡される。
コンテナに渡されるとコンテナ内で起動したアプリケーション(railsやnuxtなど)
RUN 実行コマンド
ベースイメージに対して何らかのコマンドを実行する場合に使用する。
RUN echo 'hoge'
とすると、dockerimageを生成する際のログに'hoge'が出力される
WORKDIR ディレクトリパス
Dockerfile で定義した命令を実行する、コンテナ内の作業ディレクトリパスを指定。
今回は$workdirを.envでappとしているので、ここにはappが入ります。
COPY ローカルのファイルパス Dockerイメージのファイルパス
ローカルファイルをdockerイメージにコピーする命令
ローカルファイルとは自分のPC上にあるファイル
Gemfile*
はGemfileで始まるファイル名をすべてコピーするというコマンド
ローカルのGemfileとGemfile.lockを指定
./
コピー先のパスを絶対パス、もしくは相対パスで指定します。
相対パス指定をしているのでARG WORKDIR つまりはappディレクトリ直下にコピーされます。
apk
alpineのコマンド
CMD [実行したいコマンド]
-b 0.0.0.0
railsのプロセスをどのipアドレスにバインドするかを指定。
ここではlocalhostのipアドレス「127.0.0.1」を「0.0.0.0」にバインド
https://qiita.com/Masato338/items/f162394fbc37fc490dfb