// // //

DockerでPythonの環境構築かんたん解説【初心者向け: Mac, Jupyter Lab 2020年11月版】

Docker-000 Programming
Docker-000
この記事は約8分で読めます。

本記事ではMacを使って、Docker上でPythonを実装する方法を初心者の方向けに簡単に解説していきます。
また同時に、もっとも初心者に適したと思われるJupyter Labでの開発環境の構築も同時に行います。
ぼくの使用環境は以下の通りです。

  • Hardware: Macbook Pro 13 inch 2016
  • OS: macOS Mojave ver. 10.14.6

また、2020年11月に発表されたM1チップ搭載のMacでは現状(2020年11月16日現在)ではDocker自体に対応していないようです。順次対応はなされていくと思いますが、ご留意ください。

Dockerとは

Dockerとは仮想環境を構築してその中でアプリケーションを開発できるオープンソースのソフトウェアです。米Docker社から提供されており、現在IT企業などを中心に広く活用されています。
それでは、どうしてDockerは現在広く活用されているのでしょうか。
まずは、Dockerのメリット・デメリットを簡単にまとめてみました。

Dockerを使うことのメリット

  • ローカル環境内でもDockerにてコンテナにより環境の囲い込みを行うことができる。これによってDocker内外の環境を分離して、相互間の影響を遮断することができる。
  • DockerはホストOSベースのコンテナイメージを用意することができ、チーム開発を行う場合は、このDockerFileを共有することで、チーム内で同じ開発環境を構築できる。
  • Dockerのイメージ, コンテナの新設・破棄が簡単に行える。
  • 構築、本番の環境が異なっても、Dockerイメージごと移動することによって、環境の違いによるエラーを極力軽減できる。
  • オープンソースであり、コストがかからない。

Dockerを使うことのデメリット

  • 後に述べるコンテナエンジンを必要とするので、その分のストレージリソースを必要とする。
  • Dockerを本番環境として使う場合にはセキュリティー対策が必要になる。

他の仮想化技術との違い

Dockerはコンテナ型仮想環境と呼ばれてルものの一つですが、仮想技術にはそれ以外に、ホスト型仮想環境やハイパーバイザー型仮想環境と言われるものがあります。
それぞれと特徴と長所・短所を以下に簡単にまとめます。

コンテナ型仮想環境

Docker-10
Docker-10

上図がコンテナ型仮想環境を模式的に示したものです。コンテナエンジン(Docker等)はホストOSのカーネルを利用するので、コンパクトにまとめることができます。また、その為、Dokcerの場合、ホストOSがLinux出ない場合はLinuxを仮想的に立ち上げる必要があります。

ホスト型仮想環境

Docker-11
Docker-11

ホスト型仮想環境は、上図のように土台となるホストOSの上にゲストOSを立ち上げるタイプの仮想環境です。MacにWindowsを走らせるParallels Desktopなどを思い浮かべていただけるとイメージしやすいかと思います。
一般的には、VMwareやWindows7でのXPモードなどが、これに分類されます。全ての処理はホストOSも経由して行われる為、パフォーマンスの低下がかなりあります。

ハイパーバイザー型仮想環境

Docker-12
Docker-12

一般ユーザーはあまり馴染むがないハイパーバイザー型仮想環境は上記のような模式図で表されます。ハードに直接仮想環境を構築するので、ホストOSがなく、効率よくハードのリソースを活用できます。また、複数の仮想環境を稼働することができます。

Docker本体のインストール

container-04
container-04

前置きが長くなってしまいましたが、それでは早速、Docker自体のインストールを行なっていきましょう。

まず、ブラウザーの検索窓に"docker.com"と入力し、Dockerのホームページにアクセスします。

Docker-51R
Docker-51R

Dockerのホームページ(英語です)が開いたら、上記の①(Get Started)をクリック。

Docker-52R
Docker-52R

次に、①(Download for Mac)の右側にある下向きの印をクリック。

Docker-53R
Docker-53R

プルダウンメニューが出るので、①をクリック。ダウンロードが開始すると②が表示されるので、これをクリック。

Docker-57
Docker-57

ダウンロードが終わったら、Dockerのインストールを行います。上記のようなウインドーが開くので、このウインドー上で①のDockerアイコンを②のApplicationsのホルダーまでドラッグアンドドロップします。

あとは、インストーラーの指示に従い、パスワードの代入指示がありますので、慌てず、Macを起動するときに代入するパスワードを代入してください。すばらくするとインストールが完了します。
インストールに必要な時間はインターネットの接続環境により様々ですが、十数分かかる場合もあります。一見とまてしまったように見える時もあるかもしれませんが、コーヒーなどを飲みながら気長に待ちましょう。

Docker-56
Docker-56

インストールが完了したら、ターミナルを開いて、①の"docker run hello world"とコマンドを入力してエンターを押し、コマンドを実行します。
②にありますように、"Hello from Docker!"と表示されれば、Dockerのインストールの完了が確認されました。お疲れ様でした。

また、ターミナルのことがよくわからない方は、以下のぼくのターミナルに関する記事を参照してください。

【Mac】ターミナルの使い方の初歩・よくわからん黒いやつ【初心者向け】

DockerfileとDocker Composeについて

それでは、Docker上で開発環境(エディター)であるJupyter Labを動かせるように設定を行なっていきます。
まずは適当な場所に適当な名前のフォルダーを作ります。例えばここでは、Desktopにpython_on_dockerというフォルダーを作るという前提で話を進めます。
そしてお手持ちのエディターにより、そのフォルダー内に、以下のDockerfileとDocker-compose.ymlというファイルをセーブします。

上記をDockerfileとしてセーブします。

上記をdocker-compose.ymlとしてセーブします。

Docker-60
Docker-60

ここで、この記事のソースコードのコピーの方法を説明します。コードが記述されている黒い部分にカーソルを乗せると、上部にメニューバーが降りてきます。この中の平氏から5番目のアイコンをクリックするとコードがコピーされます。あとはお使いのエディターのペーストして目的のフォルダーにセーブすれば一連の作業は完了です。

また、この機能はWordPress上でCrayon Syntax Highlighterというプラグインを使って実装しています。ブログを作成されている方で、興味のある方は以下のぼくの記事を参照してみて下さい。(実装に少しコツがあります。)

ここで少し細かな話になるのですが、Portの8888はJupyter LabをDockerを使わずに使っていると、使用されるので、ここでは8891に変更しています。(ぼくは8889、8890もすでに使っているので、 8891となっています。基本的に使っていない番号ならば、なんでも構いませんが、お約束的に8000番台にしましょう。)
このポートの変更はdocker-compose.ymlの最後の行の8891を変更することにより可能です。

Jupyter Labの開発環境

それでは、ターミナルに戻って、ターミナル上で上記の2つのファイルをセーブしたフォルダーにcdコマンドで移動します。(ここでの例ではDesktopの下のpython_on_dockerフォルダーです。)

そして、上記のスクショにある通り、"docker-compose up -d"と入力してリターンを押して下さい。
このコマンドによって、Dockerのコンテナの作成とその起動を行います。

Docker-90
Docker-90

処理がかなりの間行われ(環境にもよりますが、十数分。)最終的に上記のように"Successfully Built"と表示されれば完了です。

Docker-91
Docker-91

この後、ブラウザーに移り、"http://localhost:8891/lab"と入力してリターンを押します。ここでの8891は以前設定したPort番号です。設定された番号に従って、代入して下さい。

Docker-82
Docker-82

上記のアニメーションに続いて、下記のJupyter Labの画面が開きます。これでJupyter Labが起動しました。

Dcoker-93
Dcoker-93

ここで注意していただきたいのは、上記のスクショにあるフォルダー"pyhon_files"が以前作成した"python_on_docker"と連動しており、その中身は同じになります。つまりこの2つのフォルダーを通じてコンテナの内外間のデータのやりとりを行います。

まとめ

かなり長くなってしましました。この記事としてはここまでの環境構築までを一区切りとさせていただき、次の記事で使い方を説明させていただければと思います。

また、今回の記事の作成につき、キノコードさんのYouTubeの動画、「MacでPythonインストール徹底解説」を参考にさせていただいています。以下から動画を閲覧できます。

【徹底解説】Macでの環境構築|Pythonでプログラミングをはじめる準備をしよう!

それでは最後までお付き合いいただき、ありがとうございました。さようなら。

コメント