Help us understand the problem. What is going on with this article?

さわっておぼえるDocker入門🐳#1(コンテナを作ったり壊したり)

はじめに

とにかくクジラ🐳がかわいいですよね。
Dockerを触りながら基本をさらっていきましょう。

目的

Dockerを触りながら、どんなことができるのか確認する

コンテナを起動したり、削除したりしながら、コンテナに慣れていきたいと思います。

今回は

  • コンテナの起動
  • コンテナの一覧を取得
  • コンテナのログを確認
  • コンテナを削除

していきます。

環境

  • macOS Mojave 10.14.6
  • Docker engine 19.03.5

まずはDockerのインストール

https://www.docker.com/

コンテナを作ったり壊したりしてみる

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 

これで全てのコンテナを削除できました。

まとめ

本当に簡単なコマンドで、

  • コンテナ起動したり、
  • コンテナの一覧を取得したり、
  • コンテナのログを確認したり、
  • コンテナを削除したり

できました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away