このシリーズでは、データサイエンス初心者でもできるようにDocker(ドッカー)を用いて分析環境を構築していきます!
このシリーズを読むことで、Dockerとはなにかを理解できるだけなく、Dockerによる分析環境ができるようになります!
Docker(を含めたインフラ分野の知識)はデータサイエンティストではもはや実務では必須の知識です。
今回の記事では以下のことを扱います!
- Dockerfileとはなにか簡単にまなぶ
- Dockerfileを作成し、その後イメージやコンテナを作成し起動する
Dockerは、現在データサイエンスを専攻している大学生は授業で習っており、今すぐにでも覚えるべき知識です。
それでは、Dockerを学んでいきましょう!
※今回の記事はMacOSでかつバージョンが10.14以上(CtalinaまたはMojave)を想定しています。
WineyTradeの記事にでてくるコードはLINE@にて配布をしております!
LINEのメッセージ欄に各記事のキーワードをお送りいただければ、ダウンロードリンクを送付いたします!
ソースコードを見逃したくない方は、今のうちにLINE登録をしておいてくださいね!

目次
Dockerfileとはなにか簡単に学ぼう!

前回Dockerのコマンドオプションを学んでいき、Dockerイメージからコンテナを起動させるまでの流れを学んで行きました!
その中で今回は、DockerイメージをDockerfileとよばれるもので自分で作ってみます!
Dockerイメージがどうすれば作ることができるか知ることで、自分の好みにあわせて使いたいイメージなどを自作することができるようになります!
Dockerfileを学び、Dockerを使える人になりましょう!
Dockerfileとは
まずは簡単にDockerfileの説明をします!
Dockerイメージを作ることができる設計書のようなもの
ここで今一度Dockerの流れを簡単に説明します。
今まで私たちは、DockerイメージからDockerコンテナを起動していました。
その中で今回のDockerfileを学ぶことによって、
- Dockerfile(必要であれば) ー>Dockerイメージー>Dockerコンテナ
という流れになります!
そんなDockerfileの簡単なメリットを見ていきましょう!
Dockerfileのメリット
Dockerfileのメリットとして、主に2つがあげられます。
1つ目は、自分でイメージをカスタマイズすることができる点です!
例えば、pythonイメージをもとにpythonコンテナを起動するとします。
そのとき、pythonの用途としてデータ分析やWeb開発などがありますが、それによって予めイメージがデータ分析/Web開発に最適になっていたら便利です。
2つ目は、Dockerfileはファイルなので、簡単に共有できたりと管理が楽な点です。
Dockerfileは、Dockerイメージとは違いテキストファイルのようなファイルとして扱います。
そのため、他人に共有をするときもその他のファイルと同じように共有が可能であったりと管理がしやすいです。
このように、Dockerfileは今後Dockerを触っていく上では覚えるべきものですので、ぜひ学んでいきましょう!
DockerfileをもとにDockerイメージ/Dockerコンテナを作成/起動してみよう!

簡単にDockerfileについて学んだところで、実際に手を動かしていきましょう!
Visual Studio Codeをインストールする
今回Dockerfileを作成するにあたって、コードファイルの作成や編集を行うためのソフトウェアの一つであるVisual Studio Code(vscode)を使用します。
vscode以外のコードエディタが使える方はそちらでも大丈夫です!!
まずは、 vscodeのダウンロードページにいきMac版をダウンロードし、Macにインストールします。

インストールし起動したら、下記のような画像になります。


その後、”command”+”shift”+”p”を同時押しし、コマンドパレットを起動させたのち、codeと記載します。
そして、ターミナルにcodeコマンドを設定します。

これでvscodeの準備は完了です!
Dockerfileを作成する
準備ができたところで、Dockerfileを作成していきます!
ターミナルを起動し、Dockerfileを作成するためのディレクトリ(フォルダ)を作成し、そのディレクトリでvscodeを起動させます!
mkdir testenv && cd testenv && code .

その後、下記のように先ほど作成したディレクトリでvscodeを起動できたのがわかります!

その後、macのパッドを二本指でクリックし、「新しいファイルを作成」を押します。

そして、ファイル名をDockerfileと記載します!
そうすると、Dockerfileができたことがわかります。

Dockerfileの中身を書く
その後、Dockerfileを指定し、中身の下記のように記載します。
FROM python:3.8
# pythonのイメージ上で/var/wwwディレクトリを作成
RUN mkdir /var/www
# 作業ディレクトリとして/var/wwwを指定
WORKDIR /var/www
# ローカルにあるrequirements.txtを作業ディレクトリ(/var/www)内にコピー
COPY requirements.txt ./
# Pythonライブラリインストール
RUN pip install --upgrade pip && pip install -r requirements.txt
上記コードについて、簡単に説明します!
- FROMでは、公式(Dockerhub)のpythonイメージを指定し、カスタマイズする対象を決めます。
- RUNでは、指定したイメージ上で打つコマンドを記載します。(今回は指定したイメージ上で /var/www フォルダを作成します)
- WORKDIRでは、指定したイメージ上でどこを作業するディレクトリにするか指定しています。(今回は指定したイメージ上で /var/www フォルダを指定しています)
- COPYでは、ローカルPCにあるファイル(フォルダ)を指定したイメージ上のどこにコピーするかを指定しています。(今回は後ほど作成するrequirements.txtと呼ばれるものを /var/www フォルダ内にコピーしています。)
そして、2回目のRUNで、イメージ上で走らせるコマンドをもう一度記載しています!
今回はなんとなく触れることを目的としているため、詳しい説明は割愛しますが、DockerfileはFROMやRUNなど様々なものを指定し書いていくということを頭に入れてもらえると嬉しいです!

Dockerfileを起動する
実際にDockerfileを起動していきます!
その前に、起動するさいに足りない部分があるのでそこだけ追加します。
まずは、requirements.txtを作成し、中にfakerと書きます!
こちらは、pythonのfakerというライブラリをインストールするためにつかいます!

次にtest.pyを作成し、かきのようなコードを記載します!
from faker import Faker
fake = Faker('ja_JP')
# str型の住所が出力
print(fake.address())

今回は、Dockerfileをもとにイメージを作成し、そこからコンテナを起動させtest.pyを実行させていきます!
まずはDockerfileからdockerイメージを作成します!
下記のコマンドをうち、dockerイメージをつくります!
docker build -t <作成するさいのイメージ名> .
このとき、buildコマンドと呼ばれるイメージを作成するコマンドを使用し、Dockerfileがある場所を指定し作成します。
このとき、今回は-t オプションでイメージに名前を指定しています。(オプションがなくてもイメージ作成はできます)
vscode上でターミナルを起動し打ちます!


buildさせると、先ほど記載したDockerfileの中身が実行されていることがわかります!
特に、fakerというライブラリがpythonイメージをカスタマイズし自作するさいにインストールされていることがわかります!
実際にイメージがあることも確認できます。

Dockerイメージからコンテナを起動する
作成したイメージをもとにコンテナを起動します!
下記のようなコマンドを打ち起動します!
docker run -it -v $(pwd):/var/www <イメージ名> bash

そして、ここでpythonを起動します!

このように、fakerのライブラリを使いながらpythonを実行することができました!
この応用でデータ分析/開発にあわせてDockerfileをカスタマイズすることも可能です!
まとめ
今回は、
- Dockerfileとはなにか簡単にまなぶ
- Dockerfileを作成し、その後イメージやコンテナを作成し起動する
といった流れをおこなっていきました!
次回は、docker-composeの使い方を覚え、より実践的にjupyternotebookなどの分析環境の構築を行っていきます!
Dockerのシリーズを通し、データサイエンティストへの一歩を歩みましょう!
WineyTradeの記事にでてくるコードはLINE@にて配布をしております!
ソースコードを見逃したくない方は、今のうちにLINE登録をしておいてくださいね!
