こんにちは!スタビジ編集部です!
最近IT業界でよく耳にするようになった「コンテナ」という技術!
ただ、言葉は知っていてなんかすごいらしいけど、中身はよくわからない、、、という方が多いのではないでしょうか?
ただ、コンテナを使うことでアプリの開発がすごく楽になるから知っていて損はない!
この記事では実際にDockerコンテナを使ってpython環境を作りながらコンテナに対するイメージを変えていきたいと思います!
目次
Dockerコンテナとは
Dockerコンテナを作成する前に「コンテナとは?」「Dockerとは?」について解説していきます。
コンテナとは
「コンテナ(コンテナ技術)」とはOSレベルの仮想化技術であり、複数のアプリケーションを単一のOS上で隔離して実行できるものです。
一般的な仮想化(ハイパーバイザー型)とコンテナ型の違いを簡単なイラストで表すと下図の感じです。

コンテナ化したアプリはOS環境(カーネル)を共有しています。
そのため、従来の仮想マシンよりもリソース利用が抑えられるので、コンテナ化したアプリは軽量で高速に動作します。
Dockerとは
続いて「Docker」について見ていきましょう。
DockerはDocker社が開発しているコンテナ技術を利用したオープンソースのコンテナ管理ソフトです。
Dockerではコンテナのビルド、デプロイ、管理、監視などの機能を提供しています。
アプリケーションやサービスをコンテナ化して実行できて、このDockerで作成されたコンテナを「Dockerコンテナ」と呼びます。
DockerコンテナではDockerレジストリなどのリポジトリからベースイメージ(Dockerイメージ)を取得することで簡単にコンテナを起動することが出来ます。

Dockerイメージの作成
ではDockerを使ってPython環境を構築していきましょう!
構築に当たって大きく2つのフェーズがあります!
まずは「Dockerイメージの作成」!
ここでDockerを立ち上げる元を準備します!
Dockerエンジンをインストール
まずはご自身のPCにDockerエンジンをインストールします!
これをインストールすることで自分のPCでDockerコンテナを利用することが出来ます!
https://www.docker.com/products/docker-desktop
インストールしたらDocker Desktopを起動しましょう!

Dockerfileの準備
続いて、Dockerコンテナの元になるDockerイメージ、その設計書となる「Dockerfile」を準備していきましょう!
まずは適当な場所に実行場所となるDocker用のフォルダを準備し、Dockerfileを作成しましょう!(今回はwindows10環境で実行しています!)

続いてDockerfileの中身を書いていきます!

一見難しそうですが内容は単純です!ここでは基本の「FROM」と「RUN」を押さえておきましょう!
FROM python:3
FROMコマンドでは、コンテナのベースイメージを選択していますが、ざっくりいうとOSを選択しています!
普段だと「ubuntu」や「centos」といったベースイメージを選択することが一般的です
なので、例えばubuntuのベースイメージを選択してその上にpythonをインストールするということも可能です!
ただ、いちいちOSとpythonのバージョンの互換性をチェックしてインストールするのは面倒なので、今回はあらかじめ公式が用意しているpythonイメージを使います!
そうすることですぐにpythonがインストールされた環境を利用できます!ちなみに「python:3」を選択した場合、OSはDebianのようです!
RUN ~
RUNコマンドはベースイメージで出来上がったコンテナに対して実行する命令を記述する、いわば初期設定のようなものです!
例えば、「○○をインストール」と記述するとコンテナが立ち上がった段階で、コンテナに〇〇がインストールされています!
他のDockerfileのコマンドを調べてみよう!
コンテナイメージの作成
では用意したDockerfileからコンテナの元になるコンテナイメージを作成しましょう!
今のdockerレポジトリにあるイメージを確認しましょう!Docker Desktopの「Images」から確認できます!

dockerfileからdockerイメージを作成します!dockerfileのある場所で下記のコマンドを実行します
「docker build -t コンテナ名 .」

このコマンドで現在のディレクトリ(.)にあるdockerfileを探して実行します!
各コマンドが順番に実行されていることがわかります!

実行が終わるとDockerイメージが作成されます、dockerレポジトリの中身を見てみましょう!

コンテナでPython環境作成
ここでは前のフェーズで作ったDockerイメージからDockerコンテナを起動していきます!
コンテナ起動
作成したDockerfileからコンテナを起動します!
「docker container run -it dockerイメージ名」で実行!

dockerイメージからdockerコンテナを作成し、そのコンテナの中に入っています!pythonが起動されていますね!(「quit()」か「exit()」と打つとコンテナから抜けられます!)
コンテナ一覧を見てみるとコンテナが作成されたことがわかります(Docker Desktop「Containers/App」でも確認できます!)

コンテナをいじってみる
今度はpythonは起動せずにコンテナに入ります!
「docker container exec -it コンテナID /bin/bash」と入力してみましょう!

コンテナの中に入りました!pythonがインストールされているのがわかります!
ではこの環境で行列の掛け算をするpythonのアプリを実行したいと思います!

このpythonアプリを実行します・・・エラーになります

このコンテナにはnumpyをインストールしていないので、エラーになるんですね
ではnumpyをインストールして再度実行してみます!

実行されて計算結果が出力されています!
このように、コンテナを立ち上げた後も必要なツールのインストールなど環境を拡張することも簡単にできます!
新しいコンテナをDockerイメージにする
今のコンテナはnumpyをインストールされた環境です!
DockerではこのコンテナをDockerイメージに戻すこともできます!
一度コンテナから出て、「docker commit コンテナ名 コンテナイメージ名:タグ」を実行するとそのコンテナのコンテナイメージを作成できます!

コンテナイメージの一覧を見てみましょう!

今回はわかりやすく「docker_python」でコンテナイメージ名を統一しました!
新しい方(ver2)の方は前のもの(latest)に比べて、容量が多いですね!
numpyをインストールしたりsample.pyを作成した分が反映されているのがわかります!
では、新しいコンテナイメージでコンテナを起動してみましょう!

先ほど作ったsample.pyがありnumpyでの計算も実行されています!
このようにコンテナで環境を作ってコンテナイメージにすることで、いろんな環境構築を試すことが出来ます!
また、コンテナで試した後でインストールして大丈夫なものを最初のDockerfileのRUNコマンドにまとめることもあります!
Dockerの勉強方法
Dockerは比較的新しい技術ですので今のうちに勉強しておくとよいでしょう!
Dockerを学ぶのにおすすめなのはUdemyの以下の講座!
米国AI開発者がゼロから教えるDocker講座

【オススメ度】 | |
---|---|
【講師】 | データサイエンティスト |
【時間】 | 8時間 |
【レベル】 | 初級~中級 |
チームでの開発環境を構築する上でおさえておきたいのが、Docker!
従来の分析・開発環境は、各自がローカルに持っていたり共有サーバーに持っていたり、場所が違えば環境が変わり、環境を整えるのが面倒でした。
それがこのDockerを使うことで他人と共有、PJごとに共有、することが容易になったのです。
ただなかなか分かりやすい教材がないなか、米国AI開発者のかめさんのこの動画は素晴らしい!
Dockerを学ぶならまず見ておきたい教材です!
非常に分かりやすくDockerについて教えてくれます。
この講座をやれば一通りDockerについては理解が深まると思います。
ただDockerだけできても意味がありません。
プログラミングやデータサイエンスについても一緒に勉強していきましょう!


Dockerを使ったpython環境構築 まとめ

最後までご覧いただきありがとうございます!
本記事では、Dockerを使ったpythonの環境構築についてその手順をお伝えしました!
コンテナは一見難しそうですが、実際に触ってみると簡単にpython環境を作れることがわかると思います!
またコンテナを改造したらまた新しいDockerイメージとして作ることで、自分の環境をいろんな人に渡すこともできます!
こうしていろんな環境を手軽に使えるのがコンテナの良さなので、ぜひ試してみてください!
コンテナの土台となるLinuxについて勉強したい方は、以下の記事で詳しくまとめてありますので、是非チェックしてみてください。

pythonの勉強法については以下の記事で詳しくまとめてありますので、是非見てください!

構築したPython環境でAIやデータ分析をしてみたいという方は当サイト「スタビジ」が提供するスタビジアカデミーというサービスで体系的に学ぶことが可能ですので是非参考にしてみてください!
AIデータサイエンス特化スクール「スタアカ」

【価格】 | ライトプラン:1280円/月 プレミアムプラン:149,800円 |
---|---|
【オススメ度】 | |
【サポート体制】 | |
【受講形式】 | オンライン形式 |
【学習範囲】 | データサイエンスを網羅的に学ぶ 実践的なビジネスフレームワークを学ぶ SQLとPythonを組み合わせて実データを使った様々なワークを行う マーケティングの実行プラン策定 マーケティングとデータ分析の掛け合わせで集客マネタイズ |
データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「スタアカ」!!
当メディアが運営するスクールです。
24時間以内の質問対応と現役データサイエンティストによる複数回のメンタリングを実施します!
カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください!
他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。
そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコースになっています!
Pythonが初めての人でも学べるようなカリキュラムしておりますので是非チェックしてみてください!
ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったり・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践してもらったりする盛りだくさんの内容になってます!
・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ