Dockerで簡単にUbuntu,C/C++言語の開発環境を作る


Mac OS上で、gcc, g++といったC/C++コンパイラを実行することが可能です。しかし、Linux関連のプログラミングを行う上で、環境の差異に手間取られていては、効率的な開発を進めることができません。そこで本記事では、Dockerで、Ubuntu環境を構築し、C/C++言語の実行環境を作る手順を説明します。(おそらくDocker for Windows でも同様の手順で進めることができるはずです)

環境

Dockerfileの作成

はじめにdocker for mac をインストールしていない方はこちらからインストールしてください。

適当なディクレクトリに以下のようなDockerfileを作成します。

$ vi Dockerfile
FROM ubuntu:latest
MAINTAINER username
WORKDIR /home/projects

RUN apt-get update && apt-get install -y \
  vim \
  gcc \
  g++ \

ベースイメージとなるubuntuは最新バージョンを利用しています。ワーキングディレクトリをWORKDIR /home/projectsとし、後にここにホスト側で作成したCやC++のファイルをマウントする予定です。CのコンパイラgccとC++のコンパイラg++をインストールしておきます。

Dockerfileを記述したらbuildします。buildすることで、Dockerfileに記述したgcc, g++がインストール済みのubuntuイメージが作成されます。

$ docker build -t ubuntu:ccpp .

実行

ファイルの編集、作成はホスト側で行いたいですよね?以下の形式でrunすることで、指定したホスト側のディレクトリをコンテナ側の指定したディレクトリにマウントした状態で、ターミナルからコンテナ内に入ることができます。

docker run -itv ホスト側絶対パス:コンテナ側絶対パス ImageId /bin/bash

オプションの-vコマンドをつけることで、DockerのVOLUME(ファイル共有システムを)機能を使用しています。ディレクトリに対するパスが絶対パスであることに注意しましょう。また、コンテナ起動後は/bin/bashを用いてコンテナとやりとりをします。この時-iオプションと-tオプションを同時につける必要があります。これら3つのオプションをまとめて-itvと表現しています。

もちろん、ホスト側でのファイルの変更は、コンテナ内にも反映されます。docker-composeを使ってボリュームすることもできますが、C/C++を実行する分には、これで十分でしょう。

では実際に、コンテナを起動してみます。

まずはじめに、実行するimage idを確認しておきましょう。

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
ubuntu                  ccpp              d14bc1c80779        7 hours ago         337MB

IMAEG ID をメモしておきます。続いて実行します。筆者の場合はホスト側の/Users/name/projects3/ubuntuccpp/projectsディレクトリを作業用のディレクイトリにしているので、こちらをコンテナ側のhome/projectsにマウントします。

結果、以下のようなrunコマンドを入力します。

$ docker run -itv /Users/name/projects3/ubuntuccpp/projects:/home/projects d14bc1c80779 /bin/bash

うまくいけば、次のようにコンテナ内にログインできているはずです。

root@e9f111d8f044:/home/projects#

すでに、コンパイラは入っているので、Hello Worldなんかで試してみるのが良いでしょう!

まとめ

VirtualBox等の仮想化ソフトと比べると軽量かつ簡単に環境が作れて便利ですよね!!

コマンドが少し長ったらしくなりがちだけど、alies貼ったりして簡潔化すれば問題ないでしょう!

参考資料

 Dockerfile を作成する際に参考

comments powered by Disqus