🐍

MacでDocker x PythonのGUI開発環境をつくる

2024/07/19に公開

株式会社ウェイブの渡邉です!
MacでPythonのGUIアプリを作りたく環境構築を行いました。
最初はMac上のPython環境でTkinterを使おうとしたのですがうまくいかず...
Dockerで環境を構築できたので、備忘録として残しておきます。

環境情報

  • OS: macOS 14.5
  • CPU: Apple M1 Pro
  • Rancher Desktop: 1.14.1
  • Docker: 26.1.0-rd,
  • Docker Compose: v2.27.1

手順

1. XQuartzのインストールと起動

XQuartzをインストールします。
Homebrewがあれば下記のコマンドでインストール出来ます。

brew cask install xquartz

インストール後、XQuartzのPreferences > Securityから両方の設定が有効になっていることを確認します。その後、必要であればXQuartzを再起動します。

下記コマンドを実行して起動します。ローカルからのアクセスに制限しています。

xhost -
xhost + localhost

2. ファイル作成

フォルダ構成

├── Dockerfile
├── docker-compose.yml
└── src
    └── tkinter-sample.py

Tkinterを使ったサンプルコードを作成

PythonのGUIライブラリであるTkinterを使って、GUIアプリのサンプルコードを作ります。

src/tkinter-sample.py
import sys
import tkinter as tk

root = tk.Tk()
Static1 = tk.Label(text=u'test')
Static1.pack()
root.mainloop()

Dockerfileの作成

TkinterはPythonの標準ライブラリなので、Pythonさえ入っていれば大丈夫です。

Dockerfile
FROM python:3.11.9

RUN apt-get update -y

docker-compose.ymlの作成

docker-compose.yml
services:
  python-gui:
    build: .
    working_dir: /app
    command: "python tkinter-sample.py"
    volumes:
      - ./src:/app
    environment:
      - DISPLAY=host.docker.internal:0.0

host.docker.internalについて

  • DockerコンテナからMac側にGUIを出力する場合に、コンテナから見たMacのIPアドレスが必要です。
  • MacのIPアドレスはRancharDesktopを使っている場合はhost.docker.internalでコンテナから名前解決が可能です。

3. 起動

実際に起動します。

docker-compose up

こんな画面が出れば成功です。

参考記事

wwwave's Techblog

Discussion