プログラミング言語 仮想化 技術 開発環境

理想のpython開発環境を作る:Dockerfileで自前の環境構築

2023年5月6日

1.簡単なpython環境を作る
2.jupyterをVS Codeで使う
3.Githubと連携
4.Dockerfileで自前の環境構築(今ココ)
5.tensorflowを使う
6.pytorchを使う

これまでは、VSCodeから引っ張ってくるコンテナを使っていたけど、ここでは自前のコンテナを使えるかどうかを確認してみる。

vscode上で自前コンテナの中をいじくりまわす

簡単なDockerFileからビルドしてみる。

Reopen in Containerを選択。

コンテナビルドが走るので、「Attach to Running Container」を選択して、起動したコンテナを選択。

これでVsCodeからコンテナにリモート接続が出来る。ちなみにDockerfileがおいてあるフォルダが、/workspaces/XXXXにマウントされるので、VSCode上で底を開くと作業がしやすくなる。

コンテナにpython拡張機能をインストールしろと言われるので対応する。
(GUI上でコードの実行とかできるようになるので、便利になる。)

実行もできる。pipもできるかな?

OK。importした後のpandasも動作する。

ちょっと難度高めのコンテナ作成

scikit-learn、Keras、TensorFlowによる実践機械学習」のgithubに書かれてるrequirements.txtを使ってコンテナビルドをしてみる。

以下を参考にしました。

https://qiita.com/0MeO/items/1fc3995e568d2c95569e
https://e-penguiner.com/vscode-developent-environment-docker-without-root/
https://qiita.com/Spritaro/items/602118d946a4383bd2bb
https://e-penguiner.com/root-passwd-for-debian-ubuntu/
https://mirrorshades.jp/?p=1087

VSCode上のフォルダ構成
. 
└── python-test 
    ├── .devcontainer 
    │   └── devcontainer.json 
    ├── Dockerfile 
    └── requirements.txt

cmake、swig、wheel、setuptoolsあたりは小一時間はまる。<ライブラリインストールに必要。

DockerFile

FROM python:3.8

ARG USERNAME=dev-user
ARG GROUPNAME=dev-user
ARG UID=1000
ARG GID=1000
ARG PASSWORD=dev-user

RUN apt update && apt upgrade -y
RUN apt-get update && apt-get install -y sudo

#追加したユーザでsudoを使えるようにする
RUN groupadd -g $GID $GROUPNAME && \
    useradd -m -s /bin/bash -u $UID -g $GID $USERNAME  && \
    adduser dev-user sudo && \
    echo $USERNAME:$PASSWORD | chpasswd && \
    echo "$USERNAME   ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

#rootのパスワードがわからないのでパスワードを変更
RUN echo "root:root" | chpasswd

#エディタが入ってないのでエディタもいれる
RUN apt-get install -y vim

#以下はgym[Box2D,atari,accept-rom-license]のビルドに必要な処理。
RUN pip install --upgrade pip
RUN pip install cmake
RUN pip install swig
RUN python -m pip install --upgrade pip wheel==0.38.4 setuptools==65.5.1

rootログインは気持ち悪いので、リモート用ユーザを作成。
devcontainer.json側にrequirements.txtからのインストール指示を入れることも可能。

devcontainer.json

{
	"name": "handson-ml2",
	"build": {
		// Sets the run context to one level up instead of the .devcontainer folder.
		"context": "..",
		// Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename.
		"dockerfile": "../Dockerfile"
		},
	"settings":{
		"terminal.integrated.shell.linux": "/bin/bash",
		"python.pythonPath": "/usr/local/bin/python"
		},
	"extensions":[
		"ms-python.python"
	],
	"remoteUser": "dev-user",
	"postCreateCommand": "pip install -r requirements.txt"
}

上のほうと同じようにビルドからアタッチ。
dev-userで操作できるようになってますね。OK。

ちなみに、gitやnotebookなんかも同じように動作。

※リポジトリにできるのは、Workspaceだけっぽいかな?複数のプロジェクトはディレクトリを分けてやるしかないかもしれない。

-プログラミング言語, 仮想化, 技術, 開発環境
-, ,