ToC
Dev Containersとは…
Dev Containersは、プロジェクトに必要な依存関係やツールをコンテナにインストールした開発環境を構築できるVisual Studio Code
の拡張機能です。
Dev Containersの利用には、Dockerが事前にインストールされている必要があります。
これまで、JetBrainsのエディタを積極的に利用していましたが、Dev Containersを利用してみたかったのでVSCodeを利用してみました。
Dev Containersでは、Dockerコンテナの起動およびローカルOS上に保存されているソースコードをコンテナ上にVolumeマウント、アプリケーションで必要なポートをマッピングする機能が提供されます。コンテナは、Microsoftによって提供される標準のDocker Imageを利用できます。コンテナ起動は、VSCode上でインタラクティブに対象のOSやツール、バージョンを選択して、Python, NodeJSなどの環境が構築できます。
今回は稼働環境のインフラの検証も兼ねてAmazon Linux 2023で環境を構築してみます。
初期環境の構築
はじめにソースコードを配置するために新しいディレクトリを作成します。
そして、VS Codeにて、作成したフォルダを File
> Open Folder
から開きます。
次にCommand + Shift + P
キーでコマンドウインドウを起動して、Dev Containers: New Dev Container
と入力します。
すると、インタラクティブに設定を行うことができます。
詳細の手順については、こちらのページを参考にすると簡単に進めることができます。
Amazon Linux 2023への設定ファイルの書き換え
次は、今回のメインの部分のAmazon Linux 2023
用に自分で設定ファイルを準備してみます。
devcontainer
の設定ファイルの書き換えと起動するDockerfile
の設定ファイルを実施します。
.devcontainer/devcontainer.json
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
{
"build": {
"dockerfile": "Dockerfile",
"args": {
"VARIANT": "2023",
"PYTHON_VERSION": "3.11.7"
}
},
"customizations": {
"vscode": {
"extensions": [
"ms-python.black-formatter",
"ms-python.vscode-pylance",
"ms-python.python",
"azemoh.one-monokai",
"vscode-icons-team.vscode-icons",
"eamodio.gitlens"
]
}
},
"remoteUser": "ec2-user"
}
.devcontainer/Dockerfile
ARG VARIANT="2023"
FROM public.ecr.aws/amazonlinux/amazonlinux:${VARIANT}
RUN dnf update -y \
&& dnf groupinstall -y "Development tools" \
&& dnf install -y shadow-utils \
tar \
gzip \
sudo \
bash-completion \
git \
which \
python
RUN dnf install -y zip unzip \
&& curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip" \
&& unzip awscliv2.zip \
&& ./aws/install \
&& dnf clean all
RUN dnf install -y gcc \
zlib-devel \
bzip2-devel \
readline-devel \
sqlite \
sqlite-devel \
openssl-devel \
tk-devel \
libffi-devel \
xz-devel
RUN adduser ec2-user
RUN echo 'ec2-user ALL=(ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers
USER ec2-user
# Python
RUN git clone https://github.com/pyenv/pyenv.git ~/.pyenv \
&& echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile \
&& echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile \
&& echo 'eval "$(pyenv init -)"' >> ~/.bash_profile \
&& source ~/.bash_profile
ARG PYTHON_VERSION="3.11.7"
RUN export PYENV_ROOT="$HOME/.pyenv" \
&& command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" \
&& eval "$(pyenv init -)" \
&& pyenv install ${PYTHON_VERSION} \
&& pyenv global ${PYTHON_VERSION} \
&& pyenv rehash
RUN curl -sSL https://install.python-poetry.org | python - \
&& echo 'export PATH="$HOME/.local/bin:${PATH}"' >> ~/.bash_profile \
&& source ~/.bash_profile
実行ユーザーについて
通常のDev Containersでは、実行ユーザーはvscode
というユーザーになります。
一方で、Amazon Linuxでは通常に利用するユーザーは、ec2-user
というのがよくあるパターンかと思います。
そのため、devcontainer設定ファイルにて、remoteUser
を設定しました。また、Dockerfileでもec2-user
を追加して、sudo
可能にしています。
環境の起動
設定ファイルの準備ができたところで、VSCodeで、Command + Shift + P
キーでコマンドウインドウを起動します。
次にDev Containers: Rebuild Without Cache and Reopen in Container
と入力して、実行します。
Dockerファイルの記述に沿ったイメージの取得や各種のパッケージのインストールが開始されていることをログで確認することができます。
起動したDev Containers上で、ターミナルを起動して確認します。 下記のように確かにDockerファイルで指定した通りの環境ができています。
[ec2-user@container al2023]$ pwd
/workspaces/al2023-w2
[ec2-user@container al2023]$ whoami
ec2-user
[ec2-user@container al2023]$ aws --version
aws-cli/2.15.15 Python/3.11.6 Linux/6.5.11-linuxkit exe/aarch64.amzn.2023 prompt/off
[ec2-user@container al2023]$ python --version
Python 3.11.7
このようにインフラも含めて、VSCodeとDev Containersを使って、環境構築は非常に簡単にできます。
今回は紹介していませんが、devcontainer.json
ファイルでは、Dockerfileだけでなくdocker-composeファイルも指定することが可能なため、
実際のAWSのプログラム開発の現場でよくあるlocalstack
もついでに起動しておきたいというようなニーズにも簡単に対応できそうです。
また、複数のメンバーに同じ環境を素早く提供できる点でも、Dev Containers
は非常に使えるソリューションだなと思いました。
参照
- Visual Studio Code:Developing inside a Container
- AWS:Amazon Linux 2023
- Visual Studio Code:Create Dev Container