はじめに
こんにちは。
今回、私は「ふつうのLinuxプログラミング」を読む過程で、Ubuntu上でC言語が動作する環境をDockerで構築しました。この記事では、その時の備忘録を共有したいと思います。
初学者のため間違っている箇所がある可能性があります。
その際はご指摘いただけると嬉しいです。
動作環境
ハードウェア: Mac M2
コンテナ:Docker
OS: Ubuntu 16.04(バージョンは書籍で指定していたバージョンを使用しました。)
手順
①DockerのUbuntuのイメージをpullする
②pullしたイメージを元にdocker run
をしてコンテナを作成する。
※docker run
する際にマウントの設定をする。
③作成したコンテナ内に入って、gccをインストールする
①DockerのUbuntu16.04のイメージをpullする
公式のDockerイメージをダウンロードする。
docker pull ubuntu:16.04
pullしてきたイメージを確認する。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 0000000000 months ago MB
②pullしたイメージを元にdocker run
してコンテナを作成する
イメージを元にコンテナを作成する際、注意すべき点が2つあります。
2-1 マウントの設定をする
2-2 マウントする際に絶対パスで指定する
2-1 マウントの設定
コンテナ内で特定のディレクトリをボリュームとして扱いたい場合、docker runコマンドでマウントの設定をします。
docker run -v [ホストディレクトリの絶対パス]:[コンテナの絶対パス] [イメージ名] [コマンド]
例えば、/Users/aaaaaaaa/example/linux_pro
をコンテナ内の/usr/src/myappにマウントするには、以下のように設定します。
docker run -v /Users/aaaaaaaa/example/linux_pro:/usr/src/myapp -it ubuntu:16.04 /bin/bash
以下のように指定してもマウントが可能です。
※linux_proディレクトリにいることを前提としています。
docker run -v "$(pwd)":/usr/src/myapp -it ubuntu:16.04 /bin/bash
コンテナの絶対パスを指定する際にusr/src
などと指定しているとエラーが出るので/usr/src
と指定してするように気をつけてください。
docker: invalid reference format: repository name must be lowercase.
この設定により、以下の2つの効果があります。
1.DockerのUbuntuコンテナ内でディレクトリが作成されると、ホストマシンの指定したディレクトリにも新しいディレクトリが作成されます。
2. ホストマシン上でマウントしたディレクトリ配下に新しいディレクトリを作ると、コンテナ内の同じ場所にも同じディレクトリが作成されます。
詳しく説明します。
1.DockerのUbuntuコンテナ内でディレクトリが作成されると、ホストマシンの指定したディレクトリにも新しいディレクトリが作成される
docker container ls
# 出力例
# CONTAINER ID IMAGE COMMAND CREATED STATUS
# ID ubuntu:16.04 "/bin/bash" About an hour ago Up About an hour
docker exec -it [containerID] /bin/bash
cd /usr/src/myapp
mkdir hello
これでDockerの/usr/src/myapp/hello
ディレクトリができます。
また、ホストマシンではexample/linux_pro/hello
ディレクトリができます。
2. ホストマシン上でマウントしたディレクトリ配下に新しいディレクトリを作ると、コンテナ内の同じ場所にも同じディレクトリが作成される。
2について
ホストマシンでexample/linux_pro/file
を作ると、
Dockerでは/usr/src/myapp/file
ができます。
2-2 ホストディレクトリは絶対パスで表す
docker run
でコンテナを作成する際にマウントしたいディレクトリのパスを指定しますが、この際にルートディレクトリ(/)からの絶対パスでホストディレクトリの絶対パス
を指定するように気をつけてください。
③コンテナ内でgccをインストールする。
コンテナ内でgccをインストールする手順は以下の通りです。
1. パッケージリストの更新
インストールする際にE: Unable to locate package build-essential
のようなエラーが出たため、まずはパッケージリストを更新します。
apt-get update
2. gcc(build-essential)のインストール
gccを含む開発ツールのインストールには、build-essentialパッケージを利用しました。
apt-get install build-essential
- インストールの確認
- インストールされたgccのバージョンを確認します。
gcc -dumpversion
出力例:5.0.4
終わりに
ここまででhello.cファイルなどをコンテナ内でビルドする環境が完成しました。
ここまで読んでくださってありがとうございました。
参考