ソースコードで体感するネットワークの仕組みの開発環境をDockerを使って構築します。著者はVirtual Machine上CentOS7.0を使い開発していますが、個人的にVirtualBoxに苦手意識を持っているためDockerを用いて開発環境を構築しました。対象としている読者は以下のとおりです。
- Dockerに少しなれている
- イメージ、コンテイナーなどの用語がわかる
- 以下のコマンドが何をしているかがわかる
- docker pull
- docker run
- docker ps
- docker start
- docker attach
- ソースコードで体感するネットワークの仕組みを勉強したいがVirtualBoxを使いたくない
私自身、Dockerの勉強中です。もし用語や表現が間違えていたらコメントで指摘したいただければ幸いです。
開発環境構築
開発環境イメージをプル
CentOS 7.0のイメージからコンテイナーを立ち上げ開発環境を整えるを考えていたのですが、デフォルトではgcc
やmake
が入ってないため、それらが入ったイメージを使います。
自分の勉強のために自分でDockerイメージを作ってみました。docker pull koheiarai/taikan-tcp
でプルできます。変更履歴は最後に乗せてあります。
コンテイナーを立ち上げる
プルしたイメージをもとに次のコマンドでコンテイナーを立ち上げます。docker run -it --net host -v [プログラムへのディレクトリパス]:/mnt --name taikan-tcp koheiarai/taikan-tcp /bin/bash
[プログラムへのディレクトリパス]は本のソースコードが入っているディレクトリへのパスに置き換えてください。上のコマンドを実行すれば、コンテイナー内部のbashへと切り替わります。cd /mnt
をすれば本のソースコードが表示され、make
と実行すればCentOS 7.0上でビルド・テストができます。
コンテイナーを終了する
コンテイナーを終了し、もとのターミナルに戻るにはexit
とコマンドを実行すればできます。
終了したコンテイナーへまたアタッチする
docker start taikan-tcp
でコンテイナーを立ち上げ、docker attach taikan-tcp
でコンテイナー内部の実行環境にアタッチします。ここで使われているtaikan-tcp
はイメージの名前ではなく、「コンテイナーを立ち上げる」のセクションで指定された--name
オプションを指しています。違う値を渡した場合、その値にならないといけないため、お気をつけください。
makeがうまくいかないとき
make
が走るようになってもうまく通らない可能性があります。私は以下の2点でつまづきました。
その1
Makefile:7: *** missing separator. Stop.
Makefile
の7行目でタブではなく、スペースを使ってるとこのエラーが起きます。
解決策
スペースではなく、タブに切り替えます。
その2
make: *** No rule to make target 'cc', needed by 'MyEth'. Stop
Makefile
の最後の行が一行で行おうとすると、このエラーが発生します。
解決策
もとのコード通り改行して、タブを挿入しましょう。
taikan-tcpイメージの変更履歴
09/19/2018: 63cbe97 centos7をベースイメージとして使うと最新版の7.5になるため、7.0.1406に変更した。その際、必要なライブラリも増えたため、Dockerfileも編集した。
09/25/2018 2e0e516 30b9492 自分用に.vimrc
や.gitconfig
を加えた。また、vimで自動で閉じ記号をいれてくれるauto-pairsもいれた。