メインコンテンツへスキップ

Dockerで勉強用の使い捨て環境を構築する

·
ツール Docker ハンズオン・チュートリアル 入門
目次

今日学んだこと
#

Dockerを使って学習用の使い捨て環境を構築する方法を学びました。docker run -it --rmの基本パターンを押さえておけば、Node.js、Python、MySQL、Linux基礎など様々な学習環境をローカルPCを汚さずに構築できます。

学習内容
#

基本パターン
#

# 使い捨てコンテナの基本形
docker run -it --rm <イメージ名> bash

# ローカルファイルをマウントする場合
docker run -it --rm -v $(pwd):/work -w /work <イメージ名> bash
オプション意味
-it対話モード(ターミナルで操作可能)
--rm終了時にコンテナ自動削除
-v $(pwd):/workカレントディレクトリをコンテナ内の/workにマウント
-w /work作業ディレクトリを/workに設定

学習内容別イメージ一覧
#

学習内容イメージ用途
Node.js/フロントエンドnode:20npm、Babel、Webpack、React等
Python/データ分析python:3.12pip、Pandas、Scikit-learn等
MySQLmysql:8.0SQL学習
Linux基礎ubuntu:24.04コマンド操作練習

Node.js環境
#

docker run -it --rm -v $(pwd):/work -w /work node:20 bash

# コンテナ内
npm init -y
npm install --save-dev @babel/cli @babel/core @babel/preset-env

Python環境
#

docker run -it --rm -v $(pwd):/work -w /work python:3.12 bash

# コンテナ内
pip install pandas matplotlib scikit-learn
python script.py

MySQL環境
#

# 単体でSQL練習(データは消える)
docker run -it --rm -e MYSQL_ROOT_PASSWORD=root mysql:8.0 mysql -uroot -proot

# バックグラウンドで起動してクライアントから接続
docker run -d --rm --name mysql-study -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:8.0

# 接続
docker exec -it mysql-study mysql -uroot -proot

# 終了時
docker stop mysql-study

Docker Compose(複数コンテナ連携)
#

アプリとDBなど複数コンテナを扱う場合に便利です。

# docker-compose.yml
services:
  app:
    image: node:20
    volumes:
      - .:/work
    working_dir: /work
    command: bash
    tty: true
    stdin_open: true

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: study
# 起動
docker compose up -d

# アプリコンテナに入る
docker compose exec app bash

# 終了・削除
docker compose down

Dockerfileで環境を固定
#

毎回同じ環境を再現したい場合に使用します。

# Dockerfile
FROM node:20
WORKDIR /workspace
RUN npm install -g npm@latest
CMD ["bash"]
docker build -t study-env .
docker run -it --rm -v $(pwd):/workspace study-env

学習例:Babelのトランスパイル
#

実際にBabelの学習環境を構築してみます。

mkdir babel-study && cd babel-study
docker run -it --rm -v $(pwd):/work -w /work node:20 bash

# コンテナ内
npm init -y
npm install --save-dev @babel/cli @babel/core @babel/preset-env
echo '{ "presets": ["@babel/preset-env"] }' > .babelrc
mkdir src dist
echo 'const greet = () => console.log("Hello");' > src/app.js
npx babel src/app.js -o dist/app.js
cat dist/app.js
exit

マウントしたファイルは手元に残ります。不要になったらbabel-studyディレクトリごと削除すればクリーンアップ完了です。

まとめ
#

パターンコマンド用途
基本形docker run -it --rm <イメージ> bash簡単な動作確認
ファイル永続化docker run -it --rm -v $(pwd):/work -w /work <イメージ> bash学習成果を残したい場合
複数コンテナdocker compose up -dアプリ+DB連携
環境固定Dockerfile + docker buildチームで同一環境を共有
  • --rmオプションでコンテナ終了時に自動削除されるため、ローカル環境を汚さない
  • -vでマウントしたディレクトリ内のファイルはコンテナ終了後も残る
  • 学習終了後はディレクトリごと削除すれば完全にクリーンアップできる

参考
#