金子邦彦研究室インストールchroot,lxc コンテナ,QEMU エミュレータ隔離された環境(chroot 環境)を用いて,Docker ベースイメージの作成(Ubuntu 上)

隔離された環境(chroot 環境)を用いて,Docker ベースイメージの作成(Ubuntu 上)

ユースケース: Ubuntu の隔離された環境(chroot 環境)を作り,自由に使いたい(仮想マシンとはさよならしたい)

chroot を使って隔離する.debootstrap を使って,Ubuntu の環境をすばやく簡単に作る.

前準備

Ubuntu のシステム更新

UbuntuUbuntu で OS のシステム更新を行うときは, 次のコマンドを実行.

UbuntuUbuntu のインストールは別ページ »で説明

sudo apt -y update
sudo apt -yV upgrade
sudo /sbin/shutdown -r now

Ubuntu の隔離された環境(chroot 環境)の作成(debootstrap を使用)

  1. 前準備として,debootstrap, schroot のインストール
    sudo apt -y update
    sudo apt -y install debootstrap schroot
    

    [image]
  2. Ubuntu の隔離された環境(chroot 環境)の作成

    ここでの設定

    終了まで,しばらく待つ

    sudo rm -rf /home/ubuntu1804
    sudo mkdir /home/ubuntu1804
    sudo debootstrap --arch amd64 --variant buildd --include=ca-certificates,apt,wget,sudo bionic /home/ubuntu1804 http://jp.archive.ubuntu.com/ubuntu
    

    [image]
  3. 終了の確認

    [image]
  4. 確認のため,Ubuntu の隔離された環境(chroot 環境)を有効にし,「uname -a」で確認
    sudo chroot /home/ubuntu1804 bash
    uname -a
    exit
    

    [image]
  5. /etc/apt/sources.list のコピー
    sudo cp /etc/apt/sources.list /home/ubuntu1804/etc/apt/sources.list
    

    [image]
  6. /home/ubuntu1804/etc/fstab の設定

    これは,隔離された環境(chroot 環境)の中で,procfs を使うためのもの

    /home/ubuntu1804/etc/fstab に「proc /proc proc defaults 0 0」を書き加える.

    [image]
  7. procfs が使えることを確認

    次の操作を行い,プロセス情報が表示されれば OK

    sudo chroot /home/ubuntu1804 bash
    sudo mount /proc
    ps
    exit
    

    [image]

    ※ このとき「ps -augx」を実行すると,すべてのプロセス情報が表示される.

  8. 隔離された環境(chroot 環境)を使ってみる.

    ここでは,nano のインストール, C プログラムの編集とビルドと実行を行ってみる.

    1. まず,管理者の権限で,Ubuntu の隔離された環境(chroot 環境)を有効にし,「uname -a」で確認
      sudo chroot /home/ubuntu1804
      uname -a
      

      [image]
    2. nanoエディタをインストールしてみる
      apt install nano
      

      [image]
    3. コンパイラの確認のため、 エディタを使って次のプログラムファイルを作成。「/tmp/hello.c」のようなファイル名で保存.
      #include<stdio.h>
      int main() {
          printf("Hello,World!\n");
          printf("sizeof(size_t)=%ld\n", sizeof(size_t));
          return 0;
      }
      

      [image]

      [image]
    4. コンパイルして実行
      cd /tmp
      gcc -o a.out hello.c
      ./a.out
      

      [image]
    5. exit で終了
      exit
      

      [image]

隔離された環境(chroot 環境)を用いて,Docker ベースイメージの作成(Ubuntu 上)

※ 前準備として,Docker のインストールを終わっていること.Docker のインストールは,「別のページ」で説明している.

  1. Docker ベースイメージの作成 「ubuntu1804:base」のところは,「イメージ名」を指定する.
    cd /home/ubuntu1804
    sudo chroot /home/ubuntu1804 bash
    sudo umount /proc
    exit
    sudo tar -cpzf ../ubuntu1804.tar.gz .
    docker import ../ubuntu1804.tar.gz ubuntu1804:base
    

    [image]
  2. 確認のため,コンテナを作成し,コンテナ上で /bin/bash を実行

    ubuntu1804:base」のところは,「イメージ名」を指定する.

    エラーメッセージが出なければ OK

    docker run -it ubuntu1804:base /bin/bash
    exit
    

    [image]