【初心者向け】Pythonでスクレイピングする環境を作る② Dockerの使い方
Naruhiko です。
新しいプログラムが必要になったとき、インストールを行います。
でも、あまりインストールしたくない環境ってありませんか?
いろいろなものを入れると管理が大変になったりします。
あと、サーバーには余計なものを入れたくないです。
そういうときが多々あるんです。
では、どうすればいいか。
Docker を入れるんです。
余談ですが、
僕は Linux (Debian) を使っています。
Linux を使っていて、どうしても Windows にしかないソフトが必要になったとき、そんなときがよくあります。
最近では、Amazon Kindle が必要になりました。
解決方法は一つ。
Wine というソフトを使うと Windows のソフトが完璧ではないですが使えるようになるんです。
でも、僕はあまり Wine が好きではありません。
Debian の中身をあまり Wine でぐちゃぐちゃになりたくなかったんです。
では、どうしたか。
そうです。Docker を使ったんです。
そうすれば、Docker 内だけで環境が構築されるので、PCに優しく、どの環境でも適応できます。
そんなことを開発環境でもやってしまおうというわけです。
Docker とは
Docker とは、コンテナ型仮想化という分類になります。
Docker には、ホストOSのカーネルを使用するという特徴があります。
何をいっているのかわからないかもしれませんが、今は気にする必要はありません。
簡単に言うと、早い、軽い、便利というすぐれものです。
その分、覚えるのが大変ですが、順を追って使い方を説明します。
Docker のインストール
Docker のインストールまで説明してしまうと一つの記事ができてしまいます。
ですのでインストール済みとして話を進めます。
もし、要望があるのであれば Docker のインストール方法をまとめたいと思います。
以下から、コンテナ起動からコンテナとイメージの削除まで一通りやってみます。
Python3 イメージでコンテナの起動
Docker イメージでコンテナを起動しますが、イメージがすでに存在するものもあります。
最初はその Python3 のイメージを使ってコンテナを直接起動してみましょう。
Docker は root 権限で実行する必要がありますので、
su で root になるか、sudo を使用します。
~/Workspaces$ sudo docker run python:3
python:3 というのが Python3 用のイメージです。
イメージをダウンロードして実行しています。
Unable to find image 'python:3' locally
3: Pulling from library/python
8f0fdd3eaac0: Pull complete
d918eaefd9de: Pull complete
43bf3e3107f5: Pull complete
27622921edb2: Pull complete
dcfa0aa1ae2c: Pull complete
61cf1e8f9385: Pull complete
6cb6c5f51ace: Pull complete
6c164355f57f: Pull complete
261e68ae7eaf: Pull complete
Digest: sha256:5e2dc76c9668e5bbb5ed77050f17f4e41cc29f42def887ab2033fa9cd101d6fa
Status: Downloaded newer image for python:3
~/Workspaces$
これで取得したイメージでコンテナが起動しました。
ただ、実行しただけなのですぐにプロセスは終了しています。
イメージの確認とコンテナの確認
では、取得したイメージを確認してみましょう。
~/Workspaces$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python 3 2d2ae8451803 7 days ago 933MB
python というイメージが確認できますね。
イメージとコンテナの違いってなに?と思うかもしれません。
イメージとはコンテナを起動するための基になるものです。
コンテナはイメージを基に起動します。
利用者からすれば、コンテナが実際に使用する仮想環境なわけです。
今回は直接イメージを実行したのでコンテナも一つでしたが、
あとで説明する Dockerfile を活用することで、カスタマイズした環境のコンテナも起動することができます。
Dockerfile を使えば、どんな環境でも同じように Docker 環境を構築できるんです。
ここでは、
・イメージとコンテナがあるよ!
・コンテナが実行されている仮想環境だよ!
・コンテナだけでは存在できないよ!
・イメージはコンテナが終了してないと削除できないよ!
・イメージを削除するときは先にコンテナを削除する必要があるよ!
と覚えておいてください。
では、コンテナが準備されているか見てみましょう。
ps コマンドをすることで実行されているコンテナを確認することができます。
~/Workspaces$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
python:3 のコンテナはプロセスが停止しているのでこのままでは表示されません。
-a を付けることで、停止中のコンテナを確認することができます。
~/Workspaces$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5f921195f78 python:3 "python3" 2 hours ago Exited (0) 2 hours ago gifted_hermann
python:3 のコンテナが確認できましたね。
コンテナの削除
では、停止中のコンテナを削除してみます。
コンテナを削除するときは、コンテナが停止中である必要があります。
もし、コンテナが起動中の場合は、stop コマンドを使用してください。
~/Workspaces$ sudo docker stop e5f921195f78
停止中を確認できたら CONTAINER ID を使って rm します。
~/Workspaces$ sudo docker rm e5f921195f78
~/Workspaces$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
削除されていますね。
イメージの削除
コンテナが削除できたので、イメージも削除してみます。
~/Workspaces$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python 3 2d2ae8451803 7 days ago 933MB
このイメージを削除してみます。IMAGE ID を rmi します。
~/Workspaces$ sudo docker rmi 2d2ae8451803
~/Workspaces$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
きれいに削除されました。
イメージを新しくビルドしたい時などは、こうして一度イメージまで削除してから再構築したほうがいいと思います。
できるだけ不要なイメージは削除しておいたほうがいいでしょう。
Dockerfile の準備
Python3 のイメージを使ってコンテナを起動しました。
Dockerfile はそのようなコンテナ起動の設定を記述したもので、Docker の環境を構築するのに便利です。
慣れてきたら自分で作成するのもいいでしょう。
Workspaces に Dockerfile という名前のファイルを作成しましょう。
中はこう記述します。
※追記:root で実行していたのを一般ユーザーを作成してそのユーザーで実行出来るようにしました。
FROM python:3
MAINTAINER Naruhiko
# Japanese Localization
RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# User settings
ARG UID=1000
ARG USER=ユーザー名
RUN useradd -m -u ${UID} ${USER}
# Change user
USER ${UID}
# python package
RUN pip install --upgrade pip && \
pip install requests && \
pip install bs4
中身の説明をします。
まずは、先程実行した Python:3 ですね。
このイメージを基本にします。
FROM python:3
次は、タイムゾーンの設定です。
日本にしておかないと、時間が大幅にずれます。
# Japanese Localization
RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
実行するユーザーを作成して、そのユーザーに切り替えます。
# User settings
ARG UID=1000
ARG USER=ユーザー名
RUN useradd -m -u ${UID} ${USER}
# Change user
USER ${UID}
ARG は Docker 実行時の指定した値を取り出します。
UIDはホストのUIDと同じものをするようにします。デフォルトは1000です。
ターミナルで id と入力すると、詳細が見えるので試しておいてください。
USERは作成したユーザー名を指定しておきます。実行時に変更することも可能です。
最後に、今回の Python で使うパッケージをインストールしておきます。
・pip というパッケージ管理を最新にします。
・スクレイピングする requests をインストールします。
・取得したデータを整形する bs4(beautifulsoup) をインストールします。
# python package
RUN pip install --upgrade pip && \
pip install requests && \
pip install bs4
これをビルドしてコンテナを起動していきます。
Dockerfile のビルド
では、作成した Dockerfile をビルドしてイメージを作ってみましょう。
ターミナルで Workspaces ディレクトリに移動し、docker build を実行します。
イメージの名前は crawler にしました。
~$ cd Workspaces
~/Workspaces$ sudo docker build -t crawler .
UIDを1000以外にする場合は、「-build-arg UID=調べたUID」をオプションとして追加指定します。 --build-arg USER=ユーザー名
USERをデフォルト以外にする場合は、「-build-arg USER=ユーザー名」をオプションとして追加指定します。
Sending build context to Docker daemon 2.56kB
Step 1/3 : FROM python:3
3: Pulling from library/python
・
・
・
---> ba242712fa43
Successfully built ba242712fa43
Successfully tagged crawler:latest
~/Workspaces$
途中長かったので省略しましたが、これでビルド完了です。
イメージができているか確認しましょう。
~/Workspaces$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
crawler latest ba242712fa43 3 minutes ago 944MB
python 3 eeadc22d21a9 28 hours ago 933MB
イメージが2つできています。
一つは python3 のイメージ、そしてもう一つは先程ビルドした crawler のイメージです。
crawler のイメージは python を基にして追加したイメージです。
実行にはこの2つがセットになっています。
ここで (None) などと表示されていた場合は失敗しています。
一度イメージを削除して DockerFile を見直してみてください。
ビルドしたイメージでコンテナを起動
とりあえずコンテナを起動できるか確認してみましょう。
~/Workspaces$ sudo docker run crawler
~/Workspaces$
何事もなく終わりました。
~/Workspaces$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5f51c4098810 crawler "python3" About a minute ago Exited (0) About a minute ago
停止していますが、コンテナの起動を確認できました。
今回のまとめ
Docker の簡単な使い方を説明しました。
慣れるまでは大変かもしれません。
でも、Docker のいいところは、変なことして壊しても
ホスト側には影響がまったくないことです。
ですので、どんどん Docker を起動して削除してみましょう。
この Dockerfile は次の VSCode で使いますので残しておきましょう。
ちなみに、今起動しているコンテナ及びイメージは削除しておいてください。
VSCode では新たにビルドをし直します。
---
気に入っていただけたら、フォローや好きをお願いします!
連載目次
【初心者向け】Pythonでスクレイピングする環境を作る① はじめに
【初心者向け】Pythonでスクレイピングする環境を作る② Dockerの使い方
【初心者向け】Pythonでスクレイピングする環境を作る③ VSCodeでDocker環境を構築する
【初心者向け】Pythonでスクレイピングする環境を作る④ requestsでデータを取得してみる
【初心者向け】Pythonでスクレイピングする環境を作る⑤ Google検索をしてみる
【初心者向け】Pythonでスクレイピングする環境を作る⑥ スクレイピングでの注意事項
【初心者向け】Pythonでスクレイピングする環境を作る⑦ 検索結果のページのタイトルを取得する
【初心者向け】Pythonでスクレイピングする環境を作る⑧ クラスにまとめてみる
【初心者向け】Pythonでスクレイピングする環境を作る⑨ テストしてみる
【初心者向け】Pythonでスクレイピングする環境を作る⑩ crawler と scraper を分ける
ここから先は
¥ 100
この記事が気に入ったらサポートをしてみませんか?