はじめに
とにかくクジラ🐳がかわいいですよね。
Dockerを触りながら基本をさらっていきましょう。
目的
Dockerを触りながら、どんなことができるのか確認する
コンテナを起動したり、削除したりしながら、コンテナに慣れていきたいと思います。
今回は
- コンテナの起動
- コンテナの一覧を取得
- コンテナのログを確認
- コンテナを削除
していきます。
環境
- macOS Mojave 10.14.6
- Docker engine 19.03.5
まずはDockerのインストール
コンテナを作ったり壊したりしてみる
container run
以下のコマンドでnginxサーバーのコンテナが起動します。
ブラウザでlocalhost
にアクセスすることで、サーバーが立ち上がっていることを確認することができます。
docker container run --publish 80:80 nginx
-
docker container run
は、新しいコンテナを起動するコマンドです。 -
--publish
は、ローカルポートを開きます。 -
nginx
は、ここではイメージ名です。
メモ
- この時、イメージがローカルにない場合には、
Docker Hub
というサービスから自動でダウンロードされます。ちなみにダウンロードされるのは最新のパッケージです。 -
--publish
オプションを指定しない場合は、どのポートも開かれません。 -
80:80
はもちろん80(ホストのポート):80(コンテナのポート)
です。ホストの80番ポートへの通信は全てコンテナのポートへ転送しています。 - http通信のポートは80を使用することが多いので
80:80
を指定していますが、例えば8080:80
としてホストで待ち受けるポート番号に8080
を指定しても問題ありません。
プロセスを終了する時
もちろん、**ctrl + C
**でプロセスを終了できます。
--detach
今度は、--detach
というオプションをつけて実行しました。
このオプションを付け加えることで、バックグランドでコンテナプロセスが実行されます。つまり、コンテナを実行した後も、ターミナルは別のコマンドを受け付ける状態になっています。
docker container run --publish 80:80 --detach nginx
コマンドを実行した時に表示されるのは、起動したコンテナのIDです。
$ docker container run --publish 80:80 --detach nginx
#コンテナID: 19773d0f7ab574f9e7a9ba47df86426787ea865c0e7610dfc67b7b5fb1c50e52
docker container ls
起動中のコンテナの一覧を取得します。
container ls
container ls -a
全てのコンテナの一覧を取得します。
docker container ls -a
以下のように、コンテナの情報が取得できます。
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19773d0f7ab5 nginx "nginx -g 'daemon of…" 13 minutes ago Exited (0) 3 minutes ago optimistic_lovelace
704100449b0c nginx "nginx -g 'daemon of…" 27 minutes ago Exited (0) 14 minutes ago flamboyant_jennings
--name
container run
して起動したコンテナには、自動で名前がつけられています。
先ほどls
コマンドで確認した情報のname
の列から確認できます。
--name
オプションを使用することで、自由に名前をつけることができます。
docker container run --publish 80:80 --detach --name webhost nginx
ls
コマンドで確認すると、確かに指定した名前が確認できます。
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
00b50a6ae905 nginx "nginx -g 'daemon of…" 6 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp webhost
container stop
コンテナを停止するには、stop
コマンドにコンテナIDを指定します。
docker container stop 19773
指定するIDは、全部打ち込まなくても一意であれば補完してくれます。
ls
コマンドで、本当にコンテナが停止したかどうか確認できます。
container logs
指定したコンテナのログを取得します。
以下では、先ほど名前つきで起動したwebhost
コンテナのログを取得しています。
docker container logs webhost
container top
起動中コンテナのプロセスを確認できます。
docker container top webhost
PID USER TIME COMMAND
2384 root 0:00 nginx: master process nginx -g daemon off;
2426 101 0:00 nginx: worker process
今回のnginxコンテナの場合は、マスタープロセスとワーカープロセスが走っていることが確認できました。
container rm
使わないコンテナを削除します。
まずはls -a
コマンドで、全てのコンテナを確認し、その後全て削除してみます。
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
00b50a6ae905 nginx "nginx -g 'daemon of…" 9 minutes ago Up 9 minutes 0.0.0.0:80->80/tcp webhost
19773d0f7ab5 nginx "nginx -g 'daemon of…" 30 minutes ago Exited (0) 20 minutes ago optimistic_lovelace
704100449b0c nginx "nginx -g 'daemon of…" 44 minutes ago Exited (0) 30 minutes ago flamboyant_jennings
3つのコンテナが起動中です。これらをrm
コマンドで全て削除します。
rm の引数には、コンテナIDを一気に3つ指定していますが、例によってIDは全桁を入力する必要はありません。最初の3桁だけでも削除できます。
docker rm 00b 197 704
197
704
Error response from daemon: You cannot remove a running container 00b50a6ae90511bf80bece7ebbca5dadcabde96d0481c61ec0fb1d572bb1a1d7. Stop the container before attempting removal or force remove
ID197
とID704
は削除できたようですが、同時にエラーメッセージが出ました。
起動中のコンテナは削除できないことがエラーの理由です。
container rm -f
-f
オプションをつけることで、起動中のコンテナも強制削除することができます。
docker container rm -f 00b
これで全てのコンテナを削除できました。
まとめ
本当に簡単なコマンドで、
- コンテナ起動したり、
- コンテナの一覧を取得したり、
- コンテナのログを確認したり、
- コンテナを削除したり
できました。