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