【WSL2, Docker】Pythonの開発環境を構築する【VSCode】
Pythonの開発環境をWSL2とDockerで構築します。
- Windows
- 10 21H2 (19044.2604)
- WSL
- 2
- Ubuntu
- 20.04 LTS
- Docker Desktop for Windows
- 4.9.1 (81317)
- VSCode
- 1.75.1
Dockerイメージの選定
本番環境で使用しているエックスサーバーに合わせて、今回はPython3.6.8を使用します。
ビルドコンテキスト
home/dev/python/
|-- .devcontainer/
| |-- python/
| | `-- Dockerfile
| |-- .env
| |-- devcontainer.json
| `-- docker-compose.yml
`-- src/
.devcontainer/
python/Dockerfile
.devcontainer/python/Dockerfileの内容は以下となります。
sudo、sqlite3、pipでjupyter-labなどを追加していますが、Pythonのバージョン(Dockerイメージ)も含め、必要に応じて書き換えてください。
FROM python:3.6.8-slim
ARG USER_ID
ARG GROUP_ID
ARG USER_NAME
ARG USER_PASS
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
ENV PATH $PATH:/home/${USER_NAME}/.local/bin
RUN apt-get update && apt-get -y install --no-install-recommends \
sudo \
locales \
git \
openssh-client \
ssh-agent-filter \
sqlite3 && \
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 && \
apt-get clean && rm -rf /var/lib/apt/lists/*
RUN /usr/local/bin/python -m pip install --upgrade pip && \
pip install --upgrade setuptools && \
pip install jupyterlab pytest pytest-cov
RUN groupadd -g $GROUP_ID $USER_NAME && \
useradd -u $USER_ID -g $GROUP_ID -G sudo -s /bin/bash -m $USER_NAME && \
echo $USER_NAME:$USER_PASS | chpasswd && \
echo "$USER_NAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
USER $USER_ID
.env
Dockerfile,docker-compose.ymlへ渡す定数を定義します。
CONTAINER_NAME=python
PORT_WEB=8088
USER_ID=1000
GROUP_ID=1000
USER_NAME=dev
USER_PASS=pass
docker-compose.yml
version: '3'
services:
web:
build:
context: ./python
args:
USER_ID: ${USER_ID}
GROUP_ID: ${GROUP_ID}
USER_NAME: ${USER_NAME}
USER_PASS: ${USER_PASS}
image: python3
container_name: ${CONTAINER_NAME}
command:
jupyter-lab --ip=0.0.0.0 --allow-root --NotebookApp.token='' --no-browser
ports:
- ${PORT_WEB}:8888
volumes:
- ../src:/home/${USER_NAME}/src
working_dir: /home/${USER_NAME}/src
tty: true
stdin_open: true
devcontainer.json
{
"name": "Python",
"dockerComposeFile": "./docker-compose.yml",
"service": "web",
"workspaceFolder": "/home/dev",
"overrideCommand": false,
"extensions": [
"ms-ceintl.vscode-language-pack-ja",
"ms-python.python",
"ms-python.vscode-pylance",
"qwtel.sqlite-viewer"
],
"settings": {
"python.analysis.typeCheckingMode": "basic",
},
"postCreateCommand": ""
}