LoginSignup
18
21

More than 5 years have passed since last update.

DockerでUbuntu + C言語の環境構築(Linuxプログラミング用)

Last updated at Posted at 2017-11-19

「ふつうのLinuxプログラミング」という書籍でOSを作りながらOSの仕組みを作ろう!と思い立ったものの環境構築が面倒だったのでDockerを使ってサクッとUbuntu + C言語の環境を作りました。
その手順と最終的なDockerファイルを共有しようと思います。

追記

・最後にコマンドをまとめたDockerfileを元に再度イメージとコンテナを作る工程を記載しました

Dockerファイル

この時点ではどんなパッケージとかが必要になるかよく分かってなかったので、ubuntuのdockerイメージを使って基礎となるイメージを構築する最低限の記述だけします。

FROM ubuntu:latest
RUN mkdir /workspace
ADD ./workspace /workspace
WORKDIR /workspace

今回はworkspaceを作業ディレクトリにしました。

Dockerイメージ作成

docker buildコマンドの-tオプションでリポジトリとタグ名を指定します。

docker build -t yorinton/ubuntu .
//docker build -t [タグ名] [Dockerfileのパス]

Dockerコンテナ作成

docker run -i -t -v /vagrant/linux-pj/workspace:/workspace イメージID
//-i:標準入力をオープンにする
//-t:擬似ターミナルを割り当て
//-v:指定したディレクトリにマウント

ここでコンテナが起動します。

必要なパッケージのインストール

インストールの準備

ここから必要なパッケージをインストールしていきますが、
apt-get install パッケージ名を実行しても見つからない、と出てしまいました。先にupdateでパッケージリストを更新する必要があるようです。

root@9300a0gI/workspace# apt-get update

Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
Get:3 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [52.0 kB]
Get:4 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
Get:5 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [489 kB]
Get:6 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]      
Get:7 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9802 kB]         
Get:8 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.9 kB]
Get:9 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [224 kB]
Get:10 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [3479 B]
Get:11 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]                                                                                 
Get:12 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]                                                                           
Get:13 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]                                                                             
Get:14 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]                                                                            
Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe Sources [224 kB]                                                                             
Get:16 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [851 kB]                                                                          
Get:17 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.7 kB]                                                                   
Get:18 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [699 kB]                                                                      
Get:19 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [18.5 kB]                                                                   
Get:20 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [5176 B]                                                                        
Get:21 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [6354 B]                                                                    
Fetched 24.5 MB in 13s (1768 kB/s)                                                                                                                           
Reading package lists... Done

これでパッケージをインストールする準備が出来ました。

sudoインストール

sudoでインストールしようとしましたが、そもそもsudoが無いとのことでしたので、インストールします。
あとでDockerファイルにまとめるので全て-yをつけておきます。

root@9300a0gI/workspace#apt-get -y install sudo

gccインストール

今回C言語でLinuxプログラミングをしたかったので、C言語のコンパイラであるgccをインストールします。

root@9300a0gI/workspace#sudo apt-get -y install build-essential

gccがインストールされたかの確認(バージョン確認)

root@9300a0gI/workspace#gcc -dumpversion

Gitインストール

バージョン管理したいのでGitもインストールします。

root@9300a0gI/workspace#sudo apt-get -y install git

vimインストール

ファイルの作成・編集もしたいのでvimもインストール
vimなくても他のsublimeとかのテキストエディタでもいいのですが、ちょっとしたファイルの編集はvimの方が個人的に早いのでvimもインストールしておきます。

root@9300a0gI/workspace#sudo apt-get -y install vim

manコマンドインストール

root@9300a0gI/workspace#sudo apt-get -y install man

このままだと、2のシステムコールが見れないので以下を実行

root@9300a0gI/workspace#sudo apt-get -y install manpages-dev

Dockerファイルにまとめる

ここまででLinuxプログラミング出来る環境は整いましたが、別の環境でも簡単に構築出来るように一応Dockerファイルにまとめておこうと思います。
RUN命令で&で上記のインストールコマンドを繋いで記述します。

FROM ubuntu:latest
RUN mkdir /workspace
ADD ./workspace /workspace
WORKDIR /workspace

#ここから追加分
RUN apt-get update
RUN apt-get -y install sudo && \
    sudo apt-get -y install build-essential && \
    sudo apt-get -y install git && \
    sudo apt-get -y install vim && \
    sudo apt-get -y install man && \
    sudo apt-get -y install manpages-dev && \
    apt-get install -y strace

ちなみにbashは最初から入ってました。
他に必要なパッケージ等あれば上記のような形で追記していけばOK.

先にコンテナ内で実行してうまく行くことを確認してからDockerfileに追記して行くと確実です。

作ったDockerfileを元にdockerイメージ&コンテナ作成

dockerイメージの作成
Dockerfileがあるディレクトリで以下を実行

docker build -t linux-prog .

dockerコンテナの作成
straceを使う場合は--security-opt seccomp:unconfinedをつけないとデフォルトだとエラーになる

docker run -i -t -v /vagrant/linux-pj/workspace:/workspace --security-opt seccomp:unconfined [イメージID]

(参考)
効率的に安全な Dockerfile を作るには
【入門】Dockerfileの基本的な書き方
Dockerfile リファレンス
Docker環境でstrace

18
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
21