はじめに
以前Dockerについて調べてみましたがよくわからなかったので、実際にインストールして使用してみます。
難しい話は後回しにして、まずは「動かしてみる」ことを目標にしています。
目次
- Dockerのインストール方法
- 初めてのDockerコマンド実行
- Webサーバー(Nginx)を動かしてみる
- コンテナの基本操作(起動・停止・削除)
ステップ1: Dockerをインストールする
Windows / Mac
- Docker Desktopをダウンロード
- インストーラーを実行
- Docker Desktopを起動
インストール確認
ターミナルで以下のコマンドを実行します
docker --version
以下のような出力が表示されればインストール成功です
Docker version 29.1.3, build f52814d
バージョン番号は異なる場合がありますが、エラーが出なければOKです
ステップ2: 初めてのDockerコマンド実行
Hello Worldを実行
ターミナルで以下のコマンドを実行します
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.
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.
このメッセージが表示されれば、Dockerが正しく動作しています
ステップ3: 簡単なWebサーバーを動かす
次は、実用的なものを動かしてみます。
NginxというWebサーバーを起動します。
Nginxコンテナを起動
docker run -d -p 8080:80 --name my-nginx nginx
コマンドの意味
各オプションの意味を簡単に説明します。
| オプション | 意味 |
|---|---|
-d |
バックグラウンドで実行(デタッチモード) |
-p 8080:80 |
ポート8080(ホスト)を80(コンテナ)に転送 |
--name my-nginx |
コンテナに my-nginx という名前をつける |
nginx |
使用するイメージ名 |
ブラウザで確認
コンテナが起動したら、ブラウザで以下のURLにアクセスしてください。
http://localhost:8080
「Welcome to nginx!」 のページが表示されたら成功です。
何が起きているか
docker run はイメージからコンテナを作成して実行するコマンドです。
このコマンドを実行すると、以下の処理が自動的に行われます。
- ローカルに
nginxというイメージがあるか確認 - なければDocker Hubから自動ダウンロード(
nginxイメージを取得) -
イメージからコンテナを作成
- コンテナ名を
my-nginxに設定 - コンテナ内でnginxがポート80番で起動
- コンテナ名を
-
ポート転送を設定
- 自身のPCの8080番 → コンテナの80番に転送
-
バックグラウンドで実行(
-dオプション)- ターミナルを占有せず、裏で動き続ける
- ブラウザで
http://localhost:8080にアクセスすると、nginxのページが表示される
メモ:-p 8080:80とは?
Docker コンテナは 独立した環境
→コンテナ内でnginxが80番で動いていてもホストからは見えない
ここで使うのが-pオプション
これはホストとコンテナの間でポート番号を紐づける(ポートフォワードする)ための設定。
(ホストの8080番にとどいた通信をコンテナ内の80番へ転送する)
このオプションがないとコンテナ外からアクセスできない
ステップ4: コンテナの基本操作を覚える
実行中のコンテナを確認
docker ps
以下のような出力が表示されます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
094b67e17636 nginx "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 0.0.0.0:8081->80/tcp, [::]:8081->80/tcp my-nginx
コンテナを停止
docker stop my-nginx
もう一度 docker ps を実行すると、コンテナが表示されなくなります。
停止したコンテナを含めて表示するには docker ps -a を使います。
コンテナを再起動
docker start my-nginx
stopで停止状態のコンテナを再起動します。
再び http://localhost:8080 にアクセスすると、nginxのページが表示されます。
コンテナを削除
# まず停止
docker stop my-nginx
# 削除
docker rm my-nginx
削除後、docker ps -a で確認すると、コンテナが消えていることが分かります。
プラスα
コンテナを削除してもイメージは残ったままです。
これが積み重なるとストレージが圧迫するのでいらないものを消していきます。
docker image rm nginx
# 複数指定も可能
docker image rm イメージ名 イメージ名
イメージ名(またはID)がわからない場合はdocker image lsで一覧表示できます
よく使うコマンド一覧
今回使ったコマンドをまとめておきます。
# === コンテナ操作 ===
docker run <イメージ名> # コンテナを作成・起動
docker ps # 実行中のコンテナ一覧
docker ps -a # すべてのコンテナ一覧
docker stop <コンテナ名> # コンテナを停止
docker start <コンテナ名> # コンテナを起動
docker rm <コンテナ名> # コンテナを削除
# === イメージ操作 ===
docker image rm <イメージ名> # イメージを削除
docker image ls # イメージの一覧
おわり
今回は理解の浅かったDockerを実際に使用してみました
次は自分でDockerfileを作成しイメージをビルドしてみたいです