Dockerをご存知ですか?私のシステム開発では使わない日は無いくらい、必須の開発ツールです。
一言でいうと、PCの中に小さな仮想PCを作ることが出来るようになります。
仮想PCは、さまざまなOS、PHPだったら様々なバージョンがあらかじめインストールされた状態で用意されています。
起動も数秒で完了し、すぐに使用することができます。
私は開発環境の構築にも使用していますし、複数のDockerを組み合わせて本番環境を構築することもあります。
Dockerでまず覚えて欲しいのは、コンテナとイメージの2つです。この2つが基本です。
この記事では、Dockerの基礎知識、Dockerの使い方、Dockerのメリット・デメリットについて記載します。
DockerのインストールとHello World!
Dockerは小さな仮想PCです。Dockerを使用するには、「Docker Desktop」をインストールしましょう。
Docker Desktopをインストール出来たら、早速起動してみましょう。
% docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(arm64v8)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
%から始まる行が実行するコマンドです。ターミナルや、コマンドプロンプトから実行します。
このコマンドは、hello-worldのDockerイメージをダウンロードして、起動する。という動きをします。
hello-worldのDockerイメージは、起動するとメッセージを表示するという処理が設定されたDockerイメージです。
Dockerがオフィシャルのイメージとして用意しています。
上記の表示が出来たら成功です。
Dockerイメージ
Dockerを起動するためには、イメージが必要になります。先ほどは、hello-worldのイメージをダウンロードして使用しました。
ダウンロードしたイメージを見てみましょう。
% docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest ee301c921b8a 20 months ago 9.14kB
はい、イメージがダウンロードされていますね。サイズも9.14kbと非常にコンパクトです。
Dockerイメージを使って起動させるためには、Dockerイメージを元にコンテナを作成する必要があります。
次は、Dockerコンテナを見てみましょう
Dockerコンテナ
Dockerコンテナは、Dockerイメージを元に作られます。Dockerを起動するということは、Dockerコンテナを起動させるという意味になります。
Dockerコンテナも作成/実行すると、次回の起動では、同じコンテナが起動します。
作成されたコンテナを見てみましょう。
% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe1ca6a3c2b6 hello-world "/hello" 14 minutes ago Exited (0) 14 minutes ago vigilant_brahmagupta
存在してますね。docker run イメージ名を実行すると、新しくDockerコンテナが作成されます。
次は、Dockerコンテナを起動させてみましょう。
% % docker container start -a vigilant_brahmagupta
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(arm64v8)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
pta
さっきと同じ表示が出てきました。vigilant_brahmaguptaがDockerコンテナ名です。
今回は、Dockerコンテナからの起動を行ったため、Dockerイメージのダウンロードが発生しませんでした。これも大事なことです。毎回ダウンロードが行われるのでは、遅くて使い物になりませんよね。
-aオプションを使用しているのは、標準出力を確認するためです。-aオプションを使わないで実行するとどうなるのかも確認しておくと良いです。
Dockerのメリット
Dockerを使用するメリットは、たくさんありますが、特に思いつくことを紹介します。
- Dockerコンテナ内に必要なものがインストールされるため、ホストPCに不要なライブラリなどをインストールする必要がない。ホストPCとは完全に独立した環境を用意することができます。
- システム開発を行っていると、PCに複数の開発環境が作成されていることが多くあると思います。この環境をDockerコンテナに閉じ込めることで、複数の環境があったとしても、それぞれが依存することなく綺麗に開発環境を構築することができます。
- 本番環境でも、Dockerコンテナをベースとして構築することで、本番環境とかなり近い環境で開発を進めて行くことができます。
- 考えると他にもたくさんありそうです。Dockerを使用し、扱いに慣れておくことを強くおすすめします。
Dockerのデメリット
Dockerを使用するデメリットは、、、ほとんど無いんですが、強いてあげるとすれば学習コストが必要になることです。
これまでは、開発環境が必要になると専用のPCを用意して、OSをインストールしてDBをインストールしてなど、結構な労力が必要でした。
Dockerを使う場合でも、OSの知識が必要になったりすることはもちろんあります。
そのための学習コストはどうしても必要になってきます。
Dockerの次のステップ
Dockerは面白く、奥が深いです。伝えたいことが他にもあります。
これは別の記事にします。次のステップでは、下記のことをとりあげたいと思います。
- Dockerビルド
- Dockerfile
- Docker Compose
- Docker Volume
まとめ
Dockerは今後も必ず使っていく技術になります。Dockerよりも別の、ものができてくる可能性もありますが、仮想化の技術がなくなることはありません。
今のうちにDockerの仕組みを理解し、今の開発スタイルに慣れておきましょう。
それでは、次の記事をお楽しみに。