はじめに
この記事は、以前書いたこちらの記事 :【初学者向け】Docker上でLinux環境を構築しよう!(Ubuntu) の改良版となっています。
Ubuntu のインストールだけではなく、Vim のインストールと 日本語 の設定も1回でまとめてできるようになっています。
こちらを用いれば、Linuxの学習に必要な環境はほぼ揃うのではないかと思います。
Linuxの学習教材としては、LPI-Japanが無償で公開している『Linux標準教科書』がおすすめです。
では参りましょう!
1. Docker Desktopのインストールと実行
まず「Docker Desktop」をインストールする必要があります。
以下のリンクから最新版をダウンロードしてインストールしてください。
Download Docker Desktop | Docker
インストールが完了したら、Docker Desktopを起動してください。
起動すると画面上部のバーにDockerのアイコンが表示されます。
2. Ubuntu のイメージを取得
ターミナルを開いて、以下のコマンドを入力してUbuntuの最新バージョンのイメージを取得します。
docker pull ubuntu:latest
ちゃんとpullできているか、下記のコマンドで確認してみましょう。
docker images
REPOSITORYのところに ubuntu があればOKです!
3. Dockerfileの作成
以下は日本語ロケールの設定とVimのインストールを含む、UbuntuのDockerイメージをビルドするためのDockerfileです。
- Dockerfile
# Ubuntuイメージをベースにする
FROM ubuntu:latest
# apt-getがインタラクティブなフロントエンドを使用しないように設定
ENV DEBIAN_FRONTEND=noninteractive
# ロケールの設定とVimのインストール
RUN apt-get update && apt-get install -y locales vim && rm -rf /var/lib/apt/lists/* \
&& localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
# コンテナ起動時の作業ディレクトリを設定
WORKDIR /root
# コンテナが起動する際にbashを実行(コンテナが停止しないように)
CMD ["bash"]
このDockerfileは以下のステップを実行します。
- Ubuntuの最新版をベースイメージとして使用します。
- apt-getがインタラクティブなフロントエンドを使用しないように設定します。これにより、Dockerイメージのビルドプロセスがインタラクティブなプロンプトで中断されることを防ぎます。
-
locales
パッケージをインストールし、日本語ロケールを設定します。 - Vimをインストールします。
- コンテナが起動したときの作業ディレクトリを
/root
に設定します。 - (コンテナがすぐに停止しないように、)コンテナ起動の際にbashを実行する。
各コードの解説
-
FROM ubuntu:latest
この行は今回作成するDockerイメージのベースとなるイメージを指定します。ここでは最新のUbuntuイメージを指定しています。 -
ENV DEBIAN_FRONTEND=noninteractive
ENV
は環境変数を設定するための命令です。ここではDEBIAN_FRONTEND
をnoninteractive
に設定しています。これは、Dockerイメージのビルド時にapt-get
コマンドがインタラクティブモードを使用しないようにするための設定です。これにより、Dockerイメージのビルドプロセスがインタラクティブなプロンプトで中断されることを防ぎます。 -
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* && localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
RUN
はシェルコマンドを実行するための命令です。ここでは一連のコマンドを実行して、日本語のロケールを設定しています。まず、apt-get update
でパッケージリストを更新し、次にapt-get install -y locales
でlocalesパッケージをインストールします。そして、/var/lib/apt/lists/*
を削除してディスクスペースを節約し、最後にlocaledef
コマンドで日本語のUTF-8ロケールを定義します。 -
ENV LANG ja_JP.UTF-8
ここではLANG
環境変数をja_JP.UTF-8
に設定して、デフォルトのシステムロケールとして日本語を使用するように指定しています。 -
RUN apt-get update && apt-get install -y vim
ここでもRUN
命令を使用していますが、今回はvim
エディタをインストールしています。 -
WORKDIR /root
WORKDIR
はコンテナが起動したときの作業ディレクトリを設定するための命令です。ここでは作業ディレクトリを/root
に設定しています。これにより、コンテナが起動したときに自動的に/root
ディレクトリに移動します。また、後続のRUN
,CMD
,ENTRYPOINT
,COPY
およびADD
命令の実行ディレクトリもこのWORKDIR
で指定したディレクトリとなります。
「/var/lib/apt/lists/*」を削除する理由
/var/lib/apt/lists/*
を削除することは必須ではありませんが、推奨されます。なぜなら、この操作により不要なファイルを削除して Docker イメージのサイズを小さく保つことができるからです。
具体的には、apt-get update
を実行すると、/var/lib/apt/lists/
ディレクトリにパッケージリストのファイルがダウンロードされます。このパッケージリストは、次に apt-get install
を実行する際にどのパッケージをダウンロードするかを決定するために使用されます。
しかし、Docker イメージがビルドされると、これらのパッケージリストはもはや必要ではありません。したがって、これらを削除することでイメージのサイズを削減することができます。
イメージのサイズを小さく保つことは、ストレージスペースの節約だけでなく、イメージの配布やデプロイも高速化します。したがって、イメージを作成する際には通常、不要なファイルを削除してイメージのサイズを最小限に抑えることが推奨されます。
4. Dockerイメージのビルド
このDockerfileを使用してDockerイメージをビルドするには、Dockerfileが存在するディレクトリで 以下のコマンドを実行します。
docker build -t my-ubuntu-image .
これで、日本語ロケールの設定とVimがインストールされたUbuntuのDockerイメージがビルドされます。
コードの解説
docker build -t my-ubuntu-image .
というコマンドは Docker イメージをビルドするためのものです。具体的には以下のような機能があります。
-
docker build
これは Docker イメージをビルドするためのコマンドです。Dockerfileと呼ばれるテキストファイルに従って新しい Docker イメージが作成されます。Dockerfile は、ベースとなるイメージから始めて、さまざまな命令(パッケージのインストール、環境変数の設定、ファイルのコピーなど)を実行して新しいイメージを作成します。 -
-t my-ubuntu-image
この-t
オプションは "tag" を意味し、ビルドした Docker イメージに名前(タグ)を付けるために使用されます。ここでは作成される Docker イメージにmy-ubuntu-image
という名前(タグ)を付けています。 -
.
最後の.
は Dockerfile が存在するディレクトリを指しています。つまり、現在のディレクトリに Dockerfile があるという意味です。Docker はこのディレクトリを "ビルドコンテキスト" として使用します。ビルドコンテキストは Docker イメージをビルドするために Docker デーモンに送信されるファイル群です。
以上のコマンドを実行すると、現在のディレクトリにある Dockerfile に従って新しい Docker イメージがビルドされ、そのイメージに my-ubuntu-image
という名前が付けられます。
ちゃんとDockerイメージが作成できているか、下記のコマンドで確認してみましょう。
docker images
REPOSITORYのところに my-ubuntu-image があればOKです!
5. イメージをもとにコンテナを実行する
先ほどビルドしたDockerイメージをもとに、以下のコマンドを使用して新しいコンテナを作成・起動します。
docker run -it --name myubuntu my-ubuntu-image
このコマンドではmy-ubuntu-image
イメージから新しいコンテナを作成し、新しいコンテナにmyubuntu
という名前を付けます。
以上で既にコンテナの中に入っている状態です。コンテナから抜けるにはexit
コマンドを実行します。
《補足》コンテナ実行時のコマンド(オプション)について
コンテナ実行時のコマンド(オプション)はいくつかあります。以下にそれぞれのコマンドの説明をします。
-
docker run -it --name myubuntu my-ubuntu-image
このコマンドは、新しいコンテナをインタラクティブモードで起動し、そのシェルに直接アクセスします。-it
オプションは、コンテナの標準入力を開き続け(-i
)、TTY(端末)を割り当てる(-t
)ことを意味します。このコマンドは、コンテナ内で直接作業を行いたい場合 に適しています。 -
docker run -d --name myubuntu my-ubuntu-image
このコマンドは、新しいコンテナをバックグラウンドモード(デタッチモード)で起動します。-d
オプションは、デタッチモードを意味します。このコマンドは、長期間稼働させるサービスやアプリケーションをコンテナ内で実行する場合に適しています。
どちらのコマンドを使用するべきかは、あなたがどのようにコンテナを使用したいかによります。直接コンテナ内で作業を行いたい場合は、インタラクティブモードでコンテナを起動するコマンドを使用します。一方、バックグラウンドでサービスを実行する場合は、デタッチモードでコンテナを起動するコマンドを使用します。
この時点で コンテナの中に入っている 状態です。
現在のワーキングディレクトリは /root
なので、例えばここで ls
コマンドを実行しても何も出力されませんので注意してください。ディレクトリ構造を確認したい場合などは、cd /
でルードディレクトリまで移動してからls
コマンドを実行しましょう。
操作が完了したらexit
コマンドで コンテナから抜ける ことができます。
最後に、docker ps
コマンドを用いてコンテナの状態を確認しましょう。コンテナが実行中だった場合は、docker stop myubuntu
コマンドでコンテナを停止しましょう(たぶん初回起動時はコンテナから抜けた時点で停止すると思いますが)。
またコンテナを起動してLinuxを触りたい時
まずは停止したコンテナを起動します
docker start myubuntu
コンテナの中に入ります
docker exec -it myubuntu bash
これでOKです!
終わりにしたいときの手順は前と一緒です。
exit
コマンドでコンテナから抜けて、docker stop myubuntu
コマンドでコンテナを停止しましょう。
最後に
以上で、Docker Desktopを使ってLinux(Ubuntu)の環境を構築する手順が完了となります。
Linuxの学習教材としては、LPI-Japanが無償で公開している『Linux標準教科書』がおすすめです。
初学者にとっては簡単な内容じゃないと思いますが、とても基礎的な知識がコンパクトにまとまっていますので、ぜひこの記事を参考に環境構築をしてコマンドなどを練習してみてください。
それではまた!(^_^)ノシ