2023.05.20

Dockerを使ってMacでUbuntuを動かす|LPIC備忘録

お久しぶりの投稿です。
PCが弱弱すぎたことと社会人生活1年めが忙しくてブログの更新ができていませんでした。
今回は、今度LPICを受けることになったのでその学習のためにUbuntuをMacのDocker上で作った話をします。

Dockerの概要

コンテナ型仮想化とは?

Dockerについて説明するにはDockerが実現しようとしているコンテナ型仮想化という技術について説明する必要があります。

コンテナ型仮想化というのは、簡単に言うと軽量な仮想環境のことです。
ここで言うコンテナというのは皆様が想像される通りのあの箱のことです。
image.webp

イメージとしては箱の中に必要なものだけを詰めてアプリケーションを動かす感じです。
これによって

  • 運ぶ(配布する)のが楽になる
  • 同じような仕組み(Dockerfileなど)を使うことで効率よく環境構築ができる
  • 開発環境で作ったものをそのままコンテナに入れて本番環境にデプロイできる

といったようなメリットがあります。

技術的にはコンテナ型仮想化はゲストOSを使わない仮想化というのが一般的な説明です。
OSなしでどうやってアプリケーションを動かすのか?というと、ホストOSの力を借ります。
すなわち、ホストOSのカーネル(OSの重要な機能)を借りることでCPUやメモリにアクセスすることができます。
環境の中にカーネルが入っていないというためにコンテナは軽量かつ高速になるというからくりです。

とはいえ、ではどんなOSのカーネルでも借りてくることができるのか?というとそんなことはなく、Linuxのカーネルしか借りてくることができません。
そのため、WindowsやMac上でコンテナを使うにはまずLinuxをゲストOSとして導入するか、あるいは別途Linuxカーネルを用意する必要があります。
本記事ではColimaを使ってこの環境を整えます。

Dockerとは?

Docker(ドッカー)は、コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンプラットフォームである。
出典: フリー百科事典『ウィキペディア(Wikipedia)』

Dockerはコンテナ型仮想環境を扱う上でのデファクトスタンダードとなっているツールです。
Docker Hubを使ってDockerイメージ(コンテナを作るための設計書)を配布することができるなど、コンテナを扱う上で便利な機能を有しています。

Colimaを使ったDocker環境の構築

Colimaとは?


CoilimaというのはMac OSとLinux上でDockerを動かすためのランタイム(ツール)です。
前節で述べた通りDockerはLinux上でしか動きません。
ColimaはLimaというMac用のLinux仮想環境のラッパーでDockerによるコンテナ仮想環境を動かすことに特化したものです。

Mac上でDockerを動かす方法にはColimaの他にDocker Desktopを用いる方法もありますが、今回はColimaを使ってみます。

Colimaの導入と起動

Colimaの導入は基本的に上記のgithubに従えば問題ありません。
今回はbrewを使ってインストールします。

brew install colima

インストールが完了したら以下のコードでColimaが起動します。

colima start

これだけでDockerを動かすことができます。
非常に簡単ですね。

ただし、肝心のDockerが入っていなければどうしようもないので、ここからはDockerのインストールについて説明します。

Dockerをインストールして起動

Dockerもbrewを使ってインストールすることができます。

brew install docker docker-compose
docker ps

dockerが正しく入っていて、なおかつColimaが正常に動いていればcontainer idなどのテーブルが表示されます。

Docker上にUbuntuを構築

ここからはDocker上に実際にUbuntu環境を構築していきます。
といっても特段難しいことはなく、イメージを作成→起動を行うだけです。

今回はDockerfileを使ってDockerイメージを作成します。
Docker Hubからイメージを取得して、それを起動させるだけでももちろんUbuntu環境を構築することはできますが、Dockerfileを使うとコンテナのビルド時に色々な設定(主にパッケージのインストール)を済ませることができるので後から設定する手間が省けます。

今回は以下のようなDockerfileを用意しました。

FROM ubuntu:20.04

ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 以下に行いたい設定を記入
RUN apt-get update && apt-get upgrade
RUN apt-get install -y binutils build-essential golang sysstat python3-matplotlib python3-pil fonts-takao fio qemu-kvm virt-manager libvirt-clients virtinst jp docker.io containerd libvirt-daemon-system
RUN adduser `id -un ` libvirt
RUN adduser `id -un ` libvirt-qemu
RUN adduser `id -un ` kvm

最初の行はubuntu20.04のイメージをDocker Hubから取得しています。
その次でタイムゾーンの設定をしています。
その後にパッケージのインストールなどを行っています。
今回は以下の本の環境を作りたかったので、そのような設定を行っていますが、ここは作りたい環境によって適宜書き直してください。

このDockerfileをもとにDockerイメージをビルドします。
Dockerイメージは動作環境(コンテナ)を作るためのテンプレートファイルです。
この中にはOS、コマンド、データ(ファイルなど)、メタデータ(バージョン情報など)が入っています。
Dockerイメージは次のようなコマンドを用いることでビルドすることができます。

docker build -t ubuntu .

上記のようにdocker build <Dockerfileのパス>でDockerイメージをビルドします。
ここで、docker buildの-tオプションは--tagの省略記法でdockerイメージに名前をつけることができます。
また、dockerイメージのビルドにはdocker composeなどを使うこともありますが、今回はdockerコマンドのみで作っています。

コンテナを立ち上げる

最後に上で作成したDockerイメージをもとにDockerコンテナを立ち上げ、bashにアクセスします。

docker run -it ubuntu bash
root@◯◯◯◯◯◯:/#

上記のようなプロンプトが出ていればdockerコンテナの立ち上げは成功です。
ここで、docker runのシグネチャーはdocker run [OPTIONS] <dockerイメージ> <コマンド>で、今回は-iオプションと-tオプションの2つを指定しています。
-iオプションは--interactiveの省略記法で、コンテナの標準入出力を開き続けます。
-tオプションは--ttyの省略記法で、コンテナに疑似ttyを割り当てます。
ttyというのは簡単に言うとターミナルのことです。
例えば、-iオプションのみを付した場合、ターミナルが割り当てられないのでプロンプトが表示されません。
その反面、コンテナの標準入出力は開いているのでlsコマンドを打ち込むとファイル・ディレクトリの一覧が表示されます。
一方、-tオプションのみを付すとターミナルがアタッチされるのでプロンプトは表示されますが、コンテナの標準入出力が開いていないのでコンテナにコマンドを送ることができなくなります。

まとめ

本記事ではMac OSでDocker on Colima上にUbuntu環境を構築する方法を説明しました。
こんな簡単なことでも仮想化・Linuxの基礎的な部分の勉強ができて結構おもしろいです。
この環境上でLPICの勉強するぞ~

おまけ

ColimaはMacをシャットダウンすると停止してしまい、再起動のたびにターミナルで起動し直す必要があります。
これは非常に面倒くさいので、頻繁にDocker環境を使う場合にはMac OSのAutomatorを使うことをおすすめします。
これはアプリケーションなどのトリガーを設定できる機能で、起動した際にシェルスクリプトを実行させるようなこともできます。

設定は簡単で以下のような手順です。

  1. FinderのアプリケーションからAutomatorを選択
  2. アプリケーションを選択
  3. 検索ボックスに「シェル」と打ち込み、「シェルスクリプトを実行」を選択
  4. 右のアクション設定で以下のように打ち込む。注意点としてAutomatorからのパスが全然通っていないので、1行目がないとcommand not foundになってしまう。
export PATH=/opt/homebrew/bin:$PATH
colima start
  1. 実行を押してテスト
  2. うまく行ったらファイル→保存で保存。この際*.appという名前をつける。
  3. システム設定で「ログイン項目」で検索し、ログイン時に開くの+を押して先程作ったファイルを追加

これで設定完了です。
ぜひお試しを。

profile

プロフィール画像

あすなろ

広告代理店で働いている新米エンジニアの技術ブログです。主にWeb技術で遊んでいます。日々楽しみながら学んでいくことを目標としています。

© Asunaro 2022