Dockerの使い方入門

執筆者:

カテゴリ:

2re funでは各プロジェクトのインフラにDockerを使っています。以前「Dockerの使い方入門|基本コマンドとdocker-composeの書き方を実例で解説」でコマンドとdocker-composeの実例をまとめましたが、今回はさらに一歩前、「これからDockerを触ってみる人」向けに、インストールから最初のコンテナ起動までの流れを整理しておきます。

Dockerを使うと何がうれしいのか

Dockerは、アプリケーションとその実行環境をまとめて「コンテナ」として起動できるツールです。導入すると、次のようなメリットがあります。

  • 「自分のPCでは動くのに他の人の環境では動かない」という差異を防げる
  • MySQLやRedisなどのミドルウェアを、PCに直接インストールせずに試せる
  • 使い終わったら丸ごと削除でき、PC環境を汚さない
  • 本番サーバーと同じ環境をローカルで再現しやすい

インストール方法

環境ごとに、次の方法でDockerを導入します。

  • Windows / Mac:Docker Desktopを公式サイトからダウンロードしてインストールする
  • Linux(Ubuntuなど):各ディストリビューションのパッケージマネージャーからDocker Engineをインストールする

インストールが終わったら、ターミナルで次のコマンドを実行し、バージョンが表示されればセットアップは完了です。

docker --version

はじめてのコンテナ起動

まずは動作確認として、公式が用意しているサンプルイメージを起動してみます。

docker run hello-world

このコマンドを実行すると、Dockerは次の順番で処理を行います。

  1. 手元にhello-worldイメージがあるか確認する
  2. なければDocker Hub(公式のイメージ置き場)から自動でダウンロードする
  3. ダウンロードしたイメージからコンテナを起動する
  4. コンテナ内のプログラムがメッセージを表示して終了する

「Hello from Docker!」というメッセージが表示されれば、Dockerが正しく動作しています。

Webサーバーを起動して動作を体感する

次に、実際にブラウザからアクセスできるコンテナを起動してみます。Webサーバーのnginxを例にします。

docker run -d -p 8080:80 --name my-nginx nginx

それぞれのオプションの意味は次の通りです。

  • -d:コンテナをバックグラウンドで起動する
  • -p 8080:80:ホストの8080番ポートをコンテナの80番ポートにつなぐ
  • --name my-nginx:コンテナに分かりやすい名前を付ける

起動後、ブラウザでhttp://localhost:8080にアクセスすると、nginxのウェルカムページが表示されます。確認が終わったら、次のコマンドでコンテナを停止・削除できます。

docker stop my-nginx
docker rm my-nginx

PCにnginxを直接インストールしていないのに、コマンド1つでWebサーバーを試せて、不要になったら痕跡を残さず消せる。この手軽さがDockerの基本的な使い勝手です。

次のステップ

単体のコンテナ起動に慣れたら、次はWordPress+MySQLのように複数のコンテナを組み合わせる場面が出てきます。そこで使うのがDocker Composeです。基本コマンドやdocker-compose.ymlの具体的な書き方は「Dockerの使い方入門|基本コマンドとdocker-composeの書き方を実例で解説」で、この2re blog自体のdocker-compose.ymlを例に詳しく解説していますので、あわせて読んでみてください。

また、既存のイメージではなく自分のアプリケーション用に独自のイメージを作りたい場合は、「Dockerfileの書き方入門」でFROM・COPY・RUN・CMDといった基本命令とサンプルコードを紹介していますので、そちらもあわせてご覧ください。

コメント

“Dockerの使い方入門” への1件のフィードバック

  1. […] 「Dockerの使い方入門」では、Docker Hubにある既存のイメージ(hello-world、nginxなど)をそのまま使ってコンテナを起動する方法を紹介しました。今回は一歩進んで、自分のアプリケーション用に「独自のイメージ」を作るための設計図、Dockerfileの書き方を整理しておきます。 […]

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です