1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

100日後にエンジニアになるキミ - 98日目 - 開発環境 - Docker について4

Posted at

昨日までのはこちら

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に指定するものはなるべく小さいイメージが良いようです。
初めのうちはubuntualpineなどが良さそうです。

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

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?