Dockerfileの書き方

Dockerfileとは

Dockerでイメージをビルドするにはコンテナの構成情報を記述されたファイルが必要です。
そのファイルをDockerfileと呼びます。
Dockerイメージを作成するにはコマンドラインからも作成可能ですが、Dockerfileで設定をコードとして明示的に示すことで、変更などを可能にします

Dockerをインストールする 【MacOS】こちらで紹介している環境構築ではコマンドラインから作成しています。)

Dockerfileを作成することで以下のことをビルド時に実行することができます。

  • Dockerのイメージの作成
  • Docker上で行うコマンド操作
  • 環境変数の設定
  • Dockerコンテナ上で動作させるためのデーモン実行

Dockerfileの書き方

DockerFileにはDocker特有の書き方があります。
「命令コード 引数」という書式で1行に付き1つの操作を書いていきます。
よく使われる命令コードは以下の通りです。

FROMイメージの指定
USERユーザーの指定
WORKDIR作業ディレクトリの指定
RUNコマンドの命令
VOLUMEボリュームのマウント
ADDファイル及びディレクトリの追加
ENV環境変数の設定
EXPOSEポートのエクスポート
CMDデーモン実行

Python開発環境構築してみよう

Dockerfileを実際に書いていきながらDockerでPythonの開発環境構築してみます。

準備

ディレクトリの準備をします。

$ mkdir docker-sample
$ cd docker-sample 
$ touch Dockerfile

docker-sampleというディレクトリにDockerfileが作成されました。

Dockerfileの書き込み

$ vi Dockerfile
FROM python:3.6
USER root
WORKDIR /home/username

RUN apt-get update
RUN apt-get install -y vim
RUN pip install requests==2.18.4 click==6.7

ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8

  • FROMでどのDockerイメージからコンテナを生成するか記述
    使用できるコンテナイメージはDockerHubから確認します。
    pythonで検索をかけると、様々なタグ(バージョン)が出てくるので選択します。
    今回はpython3.6をインストールしました。

  • USERで各種命令実行時のユーザーを指定

  • WORKDIRで各種命令実行時のカレントディレクトリを指定

  • RUNでコマンド実行
    「apt-get update」パッケージリストの更新
    「apt-get install -y vim」vimのインストール
    「pip install requests==2.18.4 click==6.7」 Requests ライブラリをインストール

  • ENVで日本語の設定

ではこのDockerfileをもとにイメージを作ってみます。

$ docker build -t pytest .
Sending build context to Docker daemon  2.048kB
Step 1/1 : FROM python:3.6
3.6: Pulling from library/python
.
.
.
.
.
Status: Downloaded newer image for python:3.6
 ---> 
Successfully built a2e9f0fba405
Successfully tagged pytest:latest

docker build -t [イメージ名] [Dockerfileのパス]
docker buildコマンドでDockerfileの上から順番に処理が実行されていきます。
今回のように作成したDockerfileと同じディレクトリにいる状態でビルドするときはパスは”.”で大丈夫です。

確認してみます。

$ docker images
pytest      latest     a2e9f0fba405        2 weeks ago         913MB

Dockerfileをもとにイメージが作成されています。

コンテナに接続してみます。

$ docker run -it pytest /bin/bash 
root@48af0a1cef7f:/# python --version
Python 3.6.9

pythonがインストールされていることが確認できました。

python実行確認のために現在の日時を表示してみましょう。

# vim sample.py

sample.py

import datetime

tm_now = datetime.datetime.now()
print(tm_now.strftime('%Y年%m月%d日 %H:%M:%S'))

# python sample.py
2019年11月06日 06:19:45

OKですね!