Docker✕Dev ContainerでRustの開発環境を構築する

eyecatch docker

概要

Dockerコンテナを使用してRustの開発環境を立ち上げます。DockerコンテナにはVSCodeのdev containerを利用して接続します。

開発環境

  • Docker Engine 23.0.1
  • Rust 1.68.0
  • VSCode 1.76.2

Dockerのインストール

dockerのインストールについては下記の記事を参考にしてください。

VSCodeのインストール

VSCodeのインストールは下記の記事を参考にしてください。

ファイル

ファイルを3つ用意します。Dockerイメージを作成するためのDockerfile、Docker アプリケーションのサービス、ネットワーク、およびボリュームを定義するcompose.yaml、VSCodeのDev Containers 拡張機能を使用して、開発環境を構成するためのファイルdevcontainer.jsonの3つです。

ディレクトリ構造

以下のようなディレクトリ構造で開発していきます。

.
├── compose.yaml
├── .devcontainer
│   └── devcontainer.json
└── Dockerfile

Dockerfile

Rustの公式Dockerイメージrust:1.68.0-alpineをカスタマイズしていきます。ここではrustuserという名前のユーザを作成しています。またUIDとGIDを1000としていますが、これはホストで利用しているユーザのUIDとGIDが1000だからです。このようにホストのユーザのUIDとGIDと同じにすることでファイルの所有権で問題が起こらなくなります。

FROM rust:1.68.0-alpine

ARG USER_NAME=rustuser
ARG USER_ID=1000
ARG GROUP_ID=1000

RUN addgroup -S -g ${GROUP_ID} ${USER_NAME} \
    && adduser -u ${USER_ID} -G ${USER_NAME} -D ${USER_NAME}

compose.yaml

rustという名前のサービスを1つ定義しています。ビルドは前述のDockerfileを使用するようにしています。ビルドの結果できるイメージ名はrust-image、コンテナはrust-containerという名前で起動します。ボリュームはホストのカレントディレクトリをコンテナの/rust-dockerにマウントするように設定しています。

services:

  rust:
    build:
      context: .
      dockerfile: Dockerfile
    image: rust-image
    container_name: rust-container
    volumes:
      - .:/rust-docker
    working_dir: /rust-docker
    command: /bin/sh
    tty: true

devcontainer.json

nameでをrustと定義しています。dockerComposeFileで前述のcompose.yamlを使用するようにしています。serviceでcompose.yamlに記述されているrustというサービスを起動します。remoteUserでDev Containerを使用した時にrustuserでログインするようにしています。

{
    "name": "rust",
    "dockerComposeFile": "../compose.yaml",
    "service": "rust",
    "remoteUser": "rustuser",
    "workspaceFolder": "/rust-docker",
    "customizations": {
        "vscode": {
            "extensions": [
                "rust-lang.rust-analyzer",
                "bungcip.better-toml",
                "serayuzgur.crates"
            ]
        }
    }
}
項目説明設定値
name開発コンテナの名前rust
dockerComposeFile使用するComposeファイル../compose.yaml
service起動するサービス名rust
remoteUserDev Containerでログインするときのユーザrustuser
workspaceFolderDev Containerでログインしたときの最初のフォルダ/rust-docker
customizationsカスタマイズ設定追加したいVSCodeの拡張機能

コンテナの起動

VSCodeで.devcontainerのあるフォルダを開きます。

.devcontainer
.devcontainer

そしてVSCodeの画面の左下の><みたいなところをクリックします。

dev container
dev container

メニューが出てくるのReopen in Containerをクリックします。

reopen in container
reopen in container

端末を開いてcargo versionを実行します。バージョンが表示されればコンテナに入れていることが確認できました。

cargo version
cargo version

コメント