昨日までのはこちら
100日後にエンジニアになるキミ - 95日目 - 開発環境 - Docker について
100日後にエンジニアになるキミ - 94日目 - 開発環境 - 仮想化について
100日後にエンジニアになるキミ - 91日目 - 運用 - 監視について
100日後にエンジニアになるキミ - 90日目 - 開発 - CIについて
100日後にエンジニアになるキミ - 88日目 - データ - データ転送について
100日後にエンジニアになるキミ - 86日目 - データベース - Hadoopについて
100日後にエンジニアになるキミ - 76日目 - プログラミング - 機械学習について
100日後にエンジニアになるキミ - 70日目 - プログラミング - スクレイピングについて
100日後にエンジニアになるキミ - 66日目 - プログラミング - 自然言語処理について
100日後にエンジニアになるキミ - 63日目 - プログラミング - 確率について1
100日後にエンジニアになるキミ - 59日目 - プログラミング - アルゴリズムについて
100日後にエンジニアになるキミ - 53日目 - Git - Gitについて
100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて
100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて
100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1
100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1
100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1
100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1
本日はDockerfile
についてです。
Dockerfile
Dockerイメージをビルドする方法の手順が含まれるテキストファイルです。
これはバッチスクリプトに似ていて必要なプログラムのインストールや
ファイルのコピーなどの記述が、目的環境になるまで続きます。
Dockerfileはアプリケーションの構成と
必要なリソースの詳細を記載します。
簡単に言うとDockerfileは
・Dockerイメージの設計書
・Dockerfileと言う名称のテキストファイル
です。
ここからはDockerfileの書き方を見ていきましょう。
サンプル
サンプルとしてgetting-started
のイメージ用の
Dockerfileを記載します。
こんな内容のファイルになっています。
# Install the base requirements for the app.
# This stage is to support development.
FROM python:alpine AS base
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
# Run tests to validate app
FROM node:12-alpine AS app-base
WORKDIR /app
COPY app/package.json app/yarn.lock ./
RUN yarn install
COPY app/spec ./spec
COPY app/src ./src
RUN yarn test
# Clear out the node_modules and create the zip
FROM app-base AS app-zip-creator
RUN rm -rf node_modules && \
apk add zip && \
zip -r /app.zip /app
# Dev-ready container - actual files will be mounted in
FROM base AS dev
CMD ["mkdocs", "serve", "-a", "0.0.0.0:8000"]
# Do the actual build of the mkdocs site
FROM base AS build
COPY . .
RUN mkdocs build
# Extract the static content from the build
# and use a nginx image to serve the content
FROM nginx:alpine
COPY --from=app-zip-creator /app.zip /usr/share/nginx/html/assets/app.zip
COPY --from=build /app/site /usr/share/nginx/html
ファイルの命名規約
まずデフォルトのファイル名がDockerfile
になります。拡張子も無しです。
コンテナの構築手順を記述するdocker-compose.yml
ファイルは、
デフォルトのファイル名docker-compose.yml
となっています。
イメージのビルドコマンドは
docker build -t [イメージ名] -f [ファイル名] .
となっているので名称を変えた際は、ファイル名などを指定して実行できます。
コメント
Dockerfile内のコメントは先頭に「#」をつけます
# コメント
命令 引数 # コメント
基本構文
命令(INSTRUCTION) 引数(arguments)
「命令」は慣例的に大文字で書くようです、小文字でも問題は無いようです。
FROM
生成するイメージの元となるDockerイメージを記述します。
FROM 命令 : ベースイメージ
FROM python:alpine AS base
FROMに指定するものはなるべく小さいイメージが良いようです。
初めのうちはubuntu
やalpine
などが良さそうです。
RUN
ベースイメージに対して、何らかのコマンドを実行するときにはRUNを使用します。
RUN [実行したいコマンド]
RUN pip install -r requirements.txt
dockerはRUNごとにイメージレイヤーと言うものを作っています。
RUN毎にレイヤーが重なっていくのをイメージして貰えば良いかと思います。
そのためRUNをたくさん使用するとDockerイメージが肥大化していくようなので
RUNをなるべく少なくした方が良さそうです。
Dockerのレイヤーを作るのはRUN
,COPY
,ADD
になるようです。
これをうまく調整してやることで、レイヤーの数を抑えることができます。
&&
でコマンドを繋いだり、\
で改行を入れたりしてRUNが少なくなるようにします。
Linuxでコマンドでインストールを実行するときはインタラクティブなアクションを求められたりします。
そんな時はYesを打ち込めないのでオプション-y
を付けて対応します。
RUN apt-get update && RUN apt-get install -y curl
ADD
イメージにホスト上のファイルやディレクトリを追加します。
ADD ホストのファイルパス Dockerイメージのファイルパス
ADD add.txt.gz /tmp
COPY
イメージにホスト上のファイルをコピーします。
COPY ホストのファイルパス Dockerイメージのファイルパス
COPY app/package.json app/yarn.lock ./
CMD
Dockerファイルで生成したイメージから起動したコンテナ内で
コマンドを実行するときに使います。
Dockerfile内では1つだけ記述することができ
複数記述した場合は最後のCMDのみが有効になります。
CMD [実行したいコマンド]
CMD ["mkdocs", "serve", "-a", "0.0.0.0:8000"]
Dockerファイルを作ったら、ビルドテストをして
うまくイメージができていたら成功です。
まとめ
Dockerの話はここで終わりです。
Dockerに関してを全て抑えるには誌面が足りません。
ここからはDockerについては、ご自身で少しづつ学習して行ってください。
君がエンジニアになるまであと02日
作者の情報
乙pyのHP:
http://www.otupy.net/
Youtube:
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw
Twitter:
https://twitter.com/otupython