WindowsでDocker環境構築は下記リンクを参照。
現在、Selenium,python,mysql(phpmyadminも)の計3つのdocker-composeを作って、selenium<->pythonはselenium_network、python<->mysqlはmysql_networkというネットワークを作成しそこを介してコンテナ間でやりとりしています。
Pythonのdocker-compose.ymlとmysqlのdocker-compose.ymlにネットワーク記述を
docker network create mysql_network
ネットワークを作成していなければdocker network create mysql_network(名前は好きなものを)作成しておきます。作成されたかは下記で確認しておきます。
docker network ls
python,mysqlそれぞれのdocker-compose.ymlにネットワークを記述
python
version: '3'
services:
python:
container_name: py3
build: .
ports:
- 8888:8888
volumes:
- ../proj/py:/app
tty: true
networks:
- selenium_network
- mysql_network
networks:
selenium_network:
external: true
mysql_network:
external: true
mysql
version: '3'
services:
mysql:
container_name: mysql
build: ./mysql
environment:
MYSQL_ROOT_PASSWORD: pass
TZ: "Asia/Tokyo"
networks:
- mysql_network
volumes:
- db:/var/lib/mysql
ports:
- 3306:3306
phpmyadmin:
container_name: phpmyadmin
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=mysql
- PMA_USER=root
- PMA_PASSWORD=pass
networks:
- mysql_network
ports:
- 8080:80
volumes:
db:
networks:
mysql_network:
external: true
それぞれdocker-compose upで変更が反映されるようにしておきます。
ネットワークの利用状況
先ほど作成したmysql_networkの状況を確認します。
下記のように、mysql_networkは、mysqlコンテナ、phpmyadminコンテナ、py3コンテナがリストに入っています。
# docker network inspect mysql_network
[
{
"Name": "mysql_network",
"Id": "f1f45bf1834df9c3632198e155177249f599b91ed97d851a358405af943b55bb",
"Created": "2022-05-30T23:57:37.561171096Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"3531f051ce584a6e72fa28efae430f625bbf296a0f8f5aac4d6d3725780e067e": {
"Name": "mysql",
"EndpointID": "f32ef7803f62db13d23d02adb4e4e34c617890b0baa08eb2f0b3e0329e0529e0",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"64788b7196ea52176b003c4c55d52b0a0638eb3d80a2122a9cbf68590f5f3fc8": {
"Name": "phpmyadmin",
"EndpointID": "18638338bcf347b4fc9f7224c6a37cfb4d739d7d3aeeea3a59a11b4dd9142cc7",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"81cd4067524cebb8b88d1d7da638c590665507830c31ad30c9551f8096ace5ff": {
"Name": "py3",
"EndpointID": "6e7f24e6b9cf44ef654934a05c20583bcca4d8b660b3ce78e621736afce62dc4",
"MacAddress": "02:42:ac:12:00:04",
"IPv4Address": "172.18.0.4/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
pythonにはmysqlclientパッケージを入れておく
requirements.txtとかに下記を書いておきます。別途Dockerfile必要です。
selenium
requests
BeautifulSoup4
mysqlclient
pythonからmysqlに接続しテーブル作成するコード
下記がサンプルです。実行するとテーブル作成されます。sqltest.pyとしました。
#sqltest.py
import MySQLdb
#接続
conn = MySQLdb.connect(
host='mysql', #mysqlコンテナ名
port=3306, #mysqlコンテナのポート
user='root', #DBuser名
passwd='pass', #DBパスワード
db='pydb', #データベース名
charset='utf8'
)
#カーソルオブジェクト取得
cur = conn.cursor()
#SQL実行命令(中身はなんでもいい)
cur.execute("""CREATE TABLE tt(id INT(11) AUTO_INCREMENT NOT NULL, name VARCHAR(32) NOT NULL, PRIMARY KEY (id) )""")
#コミットで命令を実際に適用する
cur.commit()
#接続を閉じる
conn.close()
dockerコマンドでpythonコンテナに入り、実行してみます。
docker exec -it py3 /bin/bash
python sqltest.py
PHPMyAdminでテーブル作成されたかチェック
ブラウザでlocalhost:8080(自分のmysql docker-compose.yml設定では)でphpmyadminを開き、確認します。出来ています。

コメント