■この記事を読むとわかること
- dockerを使ってpythonからmysqlを呼び出して処理する方法がわかる(「Docker Compose」は利用していません)
- pythonとmysqlを連携するときに必要なDockerネットワークの使い方がわかる
- pythonとmysqlを連携する際にハマるポイントがわかる
\IT未経験者からのサポートあり!転職サービス3選!!/
サービス名 | |||
---|---|---|---|
未経験 | 未経験OK | 未経験の転職専用 | 経験者向け |
公開の求人数 | ITエンジニア全体で1万件以上 ITエンジニア未経験で600件以上 |
未公開 | 5,000件以上 |
利用対象 | 全職種 | IT特化 | IT特化 |
特徴 | ✓誰もが知る転職サービス ✓経歴を登録しておくとオファーが来る |
✓企業担当者と条件交渉 ✓スキルの身につく企業を紹介 |
✓IT専門のエージェントが対応 ✓転職成功すると年収200万円以上の大幅アップがある |
転職サポート内容 |
|
|
|
公式サイト | リクナビネクスト | テックゲート | レバテックキャリア |
概要
時間をかけないでpythonとmysqlの開発環境を作りたいかと思います。
今回は、Mac bookにdockerでpythonとmysqlを動かす環境を作ることを例にして解説します。
解説は、Mac bookの例ではありますが、Windows,linuxにも応用できるかと思います。
dockerは、筆者の経験上、1アプリに対して1コンテナを作る運用が多い(「Docker compose」で複数のコンテナを一元管理する運用が一般的)ため、ここではpythonとmysqlは別々のコンテナとします。
※2023年11月20日現在は、「Docker Compose」を使って、コンテナを連携することが一般的のため、何らかの理由で「Docker Compose」を利用できない人のための記事内容になります。
実験環境:
・MacBook Pro
・python3.8(docker)
・mysql8.0(docker)
実際にdockerで開発環境を作っていく
dockerのインストール
まずは、dockerの公式サイトよりMac向けのdockerをダウンロードしてインストールします。
以下のサイトにアクセスしてdocker本体をダウンロードする
mysqlとpythonのイメージを用意する
docker本体のインストールが終わったら、公式のpythonとmysqlをそれぞれpullコマンドよりimageを取得します。
■mysqlのイメージを取得する
docker pull mysql
■pythonのイメージを取得する
docker pull python
これら2つのコマンドを実行して、ダウンロードが終わったら、イメージの準備は終了です。
dockerのネットワークを作る
pythonとmysqlは、別々のコンテナで動作します。
何も設定せずにpythonとmysqlのコンテナを起動するだけでは、pythonからmysqlに接続できずデータを取ってくることができません。
pythonからmysqlに接続してデータを取ってくるためには、コンテナ間で通信ができるようにする必要があります。
コンテナ間で通信できるようにする仕組みが、「docker network」です。
ネットワークは以下のように作成します。
docker network create python-network
上記の例では、「python-network」という名前でdocker networkを作りました。
本当にnet workが作られたか確認します。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
9598fdbdca75 bridge bridge local
a9fd88677cb4 host host local
1d4a82e5eed7 none null local
ea3f2d52854c python-network bridge local
docker runでコンテナを起動する
docker runを使ってコンテナを起動します。
まずは、以下のようなコマンドを実行しmysqlから起動します。
コンテナ名は、「mysql_con」としています。
docker run --name mysql_con --network python-network -e MYSQL_ROOT_PASSWORD=mysql_pass -d -p 33306:3306 mysql
#--networkはpython-network
オプションの設定は以下の通りです。
–network・・・使用するネットワークを指定する。今回は、「python-network」を指定
-e MYSQL_ROOT_PASSWORD・・・mysqlのrootのパスワード
-d・・・デタッチモードで起動する
-p・・・ポートの設定。ローカル側を33306、ホスト側を3306にしています。ローカル側で33306を指定すると、dockerコンテナの内部でポート3306で動作しているmysqlに接続できる。
次にpython側のコンテナを起動します。
docker run -it --network python-network -v /Users/oresama/develop/python/python_tools:/var/opt python:latest /bin/bash
-it・・・ ttyを割り振る
–network・・・「python-network」を指定
-v・・・マウントの設定。上記の例ではローカル側を「python_tools」ホスト側を「/var/opt」でマウントしています。
マウントすることでmac上で作ったpythonプログラムをdocker側で動かせるようにしています
mysqlの設定
次にmysqlの設定をします。
設定内容は以下の通り
- スキーマーを作成する
- 任意のユーザーを作成する(rootユーザーで良ければ省いて良い)
- mysql8の場合は、パスワードの認証方式を変更する必要がある場合がある(詳しくは次の項目にて)
mysql8の場合の注意点
mysql8のデフォルトのパスワード認証方式が「caching_sha2_password」に変わっています。
そのままでは、pythonからmysqlに接続する際に認証エラーが出てmysqlからデータを読み込むことができません。
よって、認証方法、変更方法を確認します。
詳細は、以下の記事にまとめていますので確認してください!
https://programming-info.dream-target.jp/mysql8_python
pythonでmysqlに接続する
mysql-connector-pythonのインストール
python側のコンテナを起動すると、pythonが使えるようになっています。
しかし、コンテナを起動した直後だと、mysqlに接続するライブラリーが存在しません。
よって、pipを使ってmysql接続ライブラリーをインストールします。
この記事では、mysql-connector-pythonを使ってmysqlに接続します。
mysql-connector-pythonのインストールコマンド
pip3 install mysql-connector-python
pythonからmysqlに接続してみる
いよいよpythonからmysqlからデータを取得します。
mysqlの接続の設定は以下の通りになります。
host・・・mysqlコンテナのIPアドレス
port・・・コンテナ側のポート番号(この記事の例では3306)
user・・・mysqlで設定したユーザ
password・・・パスワード
ここでポイントは、hostはmysqlコンテナのIPアドレスであり、ローカルホスト(127.0.0.1)ではないことです。
接続先
コンテナからコンテナへの接続の場合は、hostはlocalhostにならないので注意。
コンテナのホスト(IPアドレス)は、docker network inspect python-networkで確認します。
以上の設定が終わったらpythonで実行してみます。
以下、サンプルコードです。
# -*- coding: utf-8 -*-
import mysql.connector
#docker環境の場合、ローカルPCであってもhostは127.0.0.1ではない。
#docker network inspect python-networkで、ネットワーク環境を確認して、
#hostを設定する
db=mysql.connector.connect(host="172.18.0.2", port="3306", user="root", password="mysql_pass")
cursor=db.cursor()
cursor.execute("USE test_work")
db.commit()
cursor.execute("""CREATE TABLE IF NOT EXISTS docker_make(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
fruits VARCHAR(32),
value INT);""")
db.commit()
実行後、無事にmysql側にdocker_makeテーブルが作成されたことを確認取れました。
以上、docker環境によるpythonからmysqlに接続する方法でした。
プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化
\IT未経験者からのサポートあり!転職サービス3選!!/
サービス名 | |||
---|---|---|---|
未経験 | 未経験OK | 未経験の転職専用 | 経験者向け |
公開の求人数 | ITエンジニア全体で1万件以上 ITエンジニア未経験で600件以上 |
未公開 | 5,000件以上 |
利用対象 | 全職種 | IT特化 | IT特化 |
特徴 | ✓誰もが知る転職サービス ✓経歴を登録しておくとオファーが来る |
✓企業担当者と条件交渉 ✓スキルの身につく企業を紹介 |
✓IT専門のエージェントが対応 ✓転職成功すると年収200万円以上の大幅アップがある |
転職サポート内容 |
|
|
|
公式サイト | リクナビネクスト | テックゲート | レバテックキャリア |