サクッとdockerでpythonとmysqlの開発環境を作成する

■この記事を読むとわかること

  • 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本体をダウンロードする

Install Docker Desktop on Mac

 

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の設定をします。

設定内容は以下の通り

 

  1. スキーマーを作成する
  2. 任意のユーザーを作成する(rootユーザーで良ければ省いて良い)
  3. 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に接続する方法でした。

 

\IT未経験者からのサポートあり!転職サービス3選!!/

サービス名
未経験 未経験OK 未経験の転職専用 経験者向け
公開の求人数 ITエンジニア全体で1万件以上
ITエンジニア未経験で600件以上
未公開 5,000件以上
利用対象 全職種 IT特化 IT特化
特徴 ✓誰もが知る転職サービス
✓経歴を登録しておくとオファーが来る
✓企業担当者と条件交渉
✓スキルの身につく企業を紹介
✓IT専門のエージェントが対応
✓転職成功すると年収200万円以上の大幅アップがある
転職サポート内容
  • 求人検索
  • 企業担当者と交渉
  • 求人紹介
  • ライフプランのサポート
  • キャリア相談
  • 求人紹介
  • 提出書類の添削
  • 面接対策
公式サイト リクナビネクスト テックゲート レバテックキャリア
最新情報をチェックしよう!