もくじ
Docker ってなぁに?
Docker の基本
コンテナの操作
おわりに
使用する環境
- Apple M1 Pro
- macOS Sequoia 15.0
- Rancher Desktop
使用書籍
- 開発系エンジニアのための Docker 絵とき入門
第1章 〜 第6章
Docker ってなぁに?
コンテナ型仮想化ソフトウェアのひとつ
- ホスト OS にインストールして、コンテナという単位でアプリケーションを管理する
- 1つのコンテナで1つのアプリケーションを扱う
- コンテナにゲスト OS は含まれないが、あるように見える
- コンテナは Linux カーネルをホストマシンに借りるため、Linux 仮想マシンが必要
Docker を構成するもの
- Docker
- Docker Engine
- デーモン(常駐プロセス)
- デーモンが提供する API
- デーモンが提供する CLI クライアント
- Docker Compose
- Docker コンテナを一括で操作するためのツール
- Docker Desktop
- Docker を扱うための GUI アプリケーション
- Docker Hub
- クラウド上のレジストリサービス
- イメージ(コンテナの雛形)が公開されている
Docker の基本
コンテナ ってなぁに?
- コマンドを実行するための領域
- コンテナはイメージから作られる
- 個々のコンテナは互いに独立している
- コンテナはコンテナランタイムがあればどこでも動く
イメージ ってなぁに?
- コンテナの実行に必要なパッケージ
- イメージを共有すれば複数人で同じ開発環境を構築できる
Dockerfile ってなぁに?
- 独自のイメージを作るための設定ファイル
コンテナの操作
事前に Rancher Desktop を起動します
コンテナを起動する
hello-world
というイメージを使ってコンテナを起動してみる
docker container run hello-world
そうすると以下のようなメッセージが表示された
ここでは Hello from Docker!
という表示が出れば OK!
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
478afc919002: Pull complete
Digest: sha256:91fb4b041da273d5a3273b6d587d62d518300a6ad268b28628f74997b93171b2
Status: Downloaded newer image for hello-world:latest
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 from Docker!
を表示するために Docker が何をやったかがうんたらかんたら書いてある。
Ubuntu container を起動するコマンドが親切?に書いてある。
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
docker run
コマンドは旧コマンドらしい。
現在のコマンドで実行してみる。(挙動は一緒だけど・・・)
docker container run -it ubuntu bash
コマンドを実行すると、ubuntu のイメージを使ったコンテナが起動し、操作待ちの状態になる。
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
6e59cb05818e: Pull complete
Digest: sha256:dfc10878be8d8fc9c61cbff33166cb1d1fe44391539243703c72766894fa834a
Status: Downloaded newer image for ubuntu:latest
root@1a36f23dc916:/#
試しに現在のシェルが何か聞いてみる
echo $SHELL
/bin/bash
よかった。bash。想定通り!
OS 情報が記載されてるファイルものぞいてみる。
head -n 4 /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
Ubuntu の 24.04 が動いていることがわかる。
すごい。mac から Ubuntu 使えてる〜。
コンテナ一覧を確認する
もうひとつターミナルを立ち上げて
ls
コマンドで起動中のコンテナ一覧を確認してみる
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a36f23dc916 ubuntu "bash" About a minute ago Up About a minute modest_clarke
直前まで使っていた ubuntu コンテナが起動中になっていることがわかる。(STATUS が Up になっている)
すべてのコンテナ一覧で起動中以外のコンテナも確認してみる。
docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a36f23dc916 ubuntu "bash" About a minute ago Up About a minute modest_clarke
15ff47cecae1 hello-world "/hello" 5 hours ago Exited (0) 5 hours ago sweet_carver
最初に作った hello-world コンテナは、メッセージを出力したあとそのまま終了してしまうので、--all
をつけることで一覧で確認できる。(STATUS が Exited は停止済のコンテナ)
起動中のコンテナを停止する
停止したい コンテナ ID を控えておく。(コンテナ一覧を確認したときに表示される)
今回は先ほど起動した Ubuntu コンテナを停止する。
docker container stop 1a36f23dc916
1a36f23dc916
コンテナが停止されると、停止したコンテナの ID が返ってくる
もう一度すべてのコンテナを表示させてみると、Ubuntu コンテナも停止済になっていることがわかる。
docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a36f23dc916 ubuntu "bash" 7 minutes ago Exited (137) 15 seconds ago modest_clarke
15ff47cecae1 hello-world "/hello" 5 hours ago Exited (0) 5 hours ago sweet_carver
コンテナを削除する
停止済みのコンテナを削除する
rm
コマンドを使い、コンテナ ID もしくは コンテナ名で削除できる。
Ubuntu コンテナを、コンテナ ID で
hello-world コンテナを、コンテナ名で削除してみる。
docker container rm 1a36f23dc916 sweet_carver
1a36f23dc916
sweet_carver
削除できているか確認してみる
docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
コンテナが表示されないため、削除されていることがわかる。
コンテナを削除するコマンド①
コンテナを起動するコマンドに --rm
オプションコマンドを付与する
コンテナはイメージがあれば起動できるので、起動時にコンテナを停止したらついでに削除してねってオプションコマンド --rm
をつけて起動するのもよいかも。
Ubuntu コンテナを起動する
docker container run -it --rm ubuntu bash
別ターミナルで Ubuntu コンテナが起動されていることを確認する
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ccefa9487efd ubuntu "bash" 6 seconds ago Up 5 seconds serene_haslett
Ubuntu コンテナを起動しているターミナルに戻って、コマンドの待ち受け状態を抜ける
exit
すべてのコンテナ一覧を確認する
docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
コンテナの終了と同時にコンテナが削除されていることがわかる。
コンテナを削除するコマンド②
起動中のコンテナを強制削除する --force
Ubuntu コンテナを起動する
docker container run -it ubuntu bash
別ターミナルで Ubuntu コンテナが起動されていることを確認する
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dcc20ef5c99c ubuntu "bash" 8 seconds ago Up 7 seconds cool_galois
起動中のコンテナを停止&削除する
docker container rm --force dcc20ef5c99c
dcc20ef5c99c
すべてのコンテナ一覧を確認する
docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
コンテナを途中で強制終了させたい場合は、--force
を使うが、場合によってはデータの損失や整合性に注意が必要になってくると思うので、慎重に使用したい。
--rm
はコンテナが終了すると自動的に削除されるので、ディスク領域のムダ遣いを防げる〜☆
おすすめは --rm
かな。
おわりに
今回はコンテナを起動して停止するところまでやってみました。
ちょっとだけ Docker が怖くなくなりました(笑)
この本、私にとっては分かりやすくて今のところ好きです〜!
くじけず最後までやってみようと思う。