🐳
2ステップでVS Code上でDockerの分析環境を構築する
Dockerで分析環境を構築する。
JupyterをVS code上で使用できるようにした。
2ステップで構築する。
-
- Dockerfileを作成する
-
- VS codeの設定ファイルを作成する
もともとDockerは苦手の意識があったが、「実践 Docker - ソフトウェアエンジニアの「Docker よくわからない」を終わりにする本」でかなり理解できた。最高にわかりやすかった。
1. Dockerfileを作成する
Dockerfileは以下のようにPythonのImageを用いた。
FROM python:3.11.1-bullseye
COPY src/requirements.txt /src/
RUN pip install --no-cache-dir -r src/requirements.txt
WORKDIR /src
PythonのImageは以下のように重なっていた。
いろんな記事をみているとosはubuntuが多いが、pythonのImageのosはDebianであった。
https://hub.docker.com/_/python
https://github.com/docker-library/python
https://hub.docker.com/_/buildpack-deps
https://github.com/docker-library/buildpack-deps
いちいちdockerコマンドをうつのが面倒くさいのでdocker-compose.yml
をかく。
version: '3.9'
services:
sandbox:
container_name: analysis-sandbox
build:
dockerfile: docker/sandbox/Dockerfile
context: .
volumes:
- type: bind
source: .
target: /src
# docker container run --interactiveに相当
stdin_open: true
# docker container run --ttyに相当
tty: true
command: bash
このときのフォルダ構成は以下。
├── README.md
├── docker
│ └── sandbox
│ └── Dockerfile
├── docker-compose.yml
└── src
└── requirements.txt
2. VS codeの設定ファイルを作成する
VS codeのDev containersを使うことで、Container上でのVS Codeの設定が可能になる。
.devcontainer/devcontainer.json
を以下のようにかいた。
{
"name": "Sandbox",
"dockerComposeFile": "../docker-compose.yml",
"service": "sandbox",
"customizations": {
"vscode": {
"settings": {
"files.autoSave": "onFocusChange",
"editor.renderWhitespace": "boundary"
},
"extensions": [
"ms-python.python",
"ms-toolsai.jupyter"
]
}
},
"workspaceMount": "source=${localWorkspaceFolder},target=/src,type=bind",
"workspaceFolder": "/src"
}
.
├── README.md
├── .devcontainer
│ └── devcontainer.json
├── docker
│ └── sandbox
│ └── Dockerfile
├── docker-compose.yml
└── src
├── requirements.lock
└── requirements.txt
この状態でcmd + P
→>Dev Containers: Open Folder in Container ...
でプロジェクトのフォルダを選択する。
懸念点
version: '3.9'
services:
sandbox:
container_name: analysis-sandbox
build:
dockerfile: docker/sandbox/Dockerfile
context: .
volumes:
- type: bind
source: .
target: /src
stdin_open: true
tty: true
command: bash
において以下部分を省くとcontainerがstopしてしまう。
本当に以下の指定で動かしていいのかが懸念事項である。
stdin_open: true
tty: true
Discussion