LoginSignup
3
0

DockerでC言語の環境構築を行う

Last updated at Posted at 2024-02-17

はじめに

こんにちは。
今回、私は「ふつうの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コンテナ内でディレクトリが作成されると、ホストマシンの指定したディレクトリにも新しいディレクトリが作成される

起動中のコンテナIDの確認
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ディレクトリができます。

Image from Gyazo

また、ホストマシンではexample/linux_pro/helloディレクトリができます。

Image from Gyazo

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
  1. インストールの確認
  2. インストールされたgccのバージョンを確認します。
gcc -dumpversion
出力例:5.0.4

終わりに

ここまででhello.cファイルなどをコンテナ内でビルドする環境が完成しました。
ここまで読んでくださってありがとうございました。

3
0
4

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
3
0