見出し画像

dockerfileの復習

自分なりに説明できるようにまとめていきます。

Dockerとは?

パソコン上に仮想環境を作れるツールです。

仮想環境とは?

物理的なハードウェアを持たず仮想的にOSを動かし、アプリケーションを実行させる環境

ハードウェアとは→http://kccn.konan-u.ac.jp/information/cs/cyber01/cy1_hdw.htm

OS(Operating System)とは
システム全体を管理し、様々なアプリケーションソフトを動かすための最も基本的なソフトウェア(windows mac LinuxなどがOS)

Dockerを使った仮想環境の具体例

画像 独学プログラマ様より引用 

画像1

通常開発環境 左画像

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


この記事が気に入ったらサポートをしてみませんか?