🐳

2ステップでVS Code上でDockerの分析環境を構築する

2022/12/17に公開約2,900字

Dockerで分析環境を構築する。
JupyterをVS code上で使用できるようにした。
2ステップで構築する。

    1. Dockerfileを作成する
    1. 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

ログインするとコメントできます