競プロ C++ をdockerでコンパイルしたい

ここのところ、競プロの問題をC++で解くことを日課にしている。

この日課が一か月くらい続いてきて、いろんなPCでやりたいようになったのだが、各PCごとにUbuntu だったり WSL1 だったり 2 だったりで面倒。

やはりDocker しかない。簡単に以下の Dockerfile を書いてみた。

FROM ubuntu:18.04

RUN apt-get update && \
    apt-get install -y build-essential 

WORKDIR /codes
VOLUME . /codes

ちょっと長いビルドが完了。

しかし中にはいってbashで動かそうとすると OCI Error だなんだと動かない。

いろいろ調べたが直接的原因はわからなかった。とはいえVOLUMEあたりがいけないんだろうなーとは思ったのでdocker-composeで迂回することにした

version: "3"

services:
    eachfile:
        build: .
        volumes:
            - .:/codes/

Dockerfile は以下のようにした

FROM ubuntu:18.04

RUN apt-get update && \
    apt-get install -y build-essential 

RUN mkdir /codes

最初はうまくいかなかったのだが、いろいろテストして挙動を確かめたりしてたらbashに入れるようになってた。なぜだ。

docker-compose run --rm eachfile /bin/bash

最終的には上記コマンドで中に入れたので、g++でコンパイルして動かした。

entrypoint等で扱いやすくするのはまた今度。