Python
を使ってAtCoderを最近始めましたが、TLEにあまりにも悩まされたので、C++
で挑むことにしました。そのときのDockerの環境構築方法について備忘録として残しておきます。
環境構築の手順
筆者は以下の環境にて構築しました
- MacOS Big Sur 11.6.1
- Apple MacMini 2018 Intel Core i3
また、Docker for Desktopはインストール済みと言う前提で進めます。
1. Dockerfileの作成
Dockerfileの中身は以下の通りです。
FROM ubuntu:latest
RUN apt update && \
apt upgrade -y && \
apt install -y build-essential
RUN mkdir /work
WORKDIR /work
これを以下のようなディレクトリに配置します。Dockerfileがある階層にwork
というフォルダを作成します。
.
┣━ Dockerfile
┗━ work/
2. イメージをビルドしてコンテナ作成
上記のDockerfileを用いて環境構築を行います。
以下のコマンドを使ってコンテナ作成を行っていきます。
パスはDockerfileがある階層で行ってください。
- イメージビルド
$ docker image build . -t イメージ名
イメージ名は任意です。
- コンテナ立ち上げ
docker run -v "$(pwd)"/work:/work -it イメージ名 --name コンテナ名
コンテナ名は任意です。イメージはビルドしたときに指定したイメージ名を入力してください。
※以下はVSCodeの設定です。
3. C++ファイルの実行ショートカットコマンドの設定
ショートカットを使って実行ができるように設定を行います。
3-1. 拡張機能のインストール
以下の拡張機能をインストールしてください。
3-2. ショートカットの設定
以下の画像のように「Code > 基本設定 > キーボードショートカット」を選択します。
右上にある「キーボードショートカットを開く(JSON)」をクリックし、keybindings.json
を開きます。
そしてkeybindings.json
に以下のようにショートカットの設定を入力します。
例としてCommand
+ N
によって実行できるようにしていますが、組み合わせは任意です。
[
{
"key": "cmd+n",
"command": "code-runner.run"
}
]
3-3. ショートカットの動作設定
VSCodeの設定を開き、右上にある「設定(JSON)を開く」をクリックし、setting.json
を開きます。
そしてsetting.json
に以下のコードを追加します。
{
"clang.executable": "clang++",
"code-runner.runInTerminal": true,
"clang.cxxflags": [ "-std=c++14"],
"code-runner.executorMap": {
"cpp": "cd $dir && g++ -O2 -std=c++14 $fileName && ./a.out",
}
}
3-4. Dockerコンテナのリモート接続
以下の拡張機能をインストールしてください。
インストールできれば、以下の画面の「リモートエクスプローラ」を開きます。
先程作成したコンテナの「Attach to Container」をクリックします。
そして、ディレクトリの選択を求められるので、/work/
を選択します。
すると、コンテナの中に入った新規ウィンドウが開きます。
ここに.cpp
ファイルを適当に作成し、そしてコマンドを入力して試しに実行してみます。
ターミナルにショートカットが入力され、正しく動作すれば設定完了です。
まとめ
本記事ではC++
のコンテナ作成と実行のショートカット設定を行いました。
上記の方法で何かエラーが起きたなどがあればご連絡いただけると幸いです。
以上になります。