0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

さわっておぼえるDocker入門🐳#2(コンテナの様子をみる)

Last updated at Posted at 2020-04-07

はじめに

Dockerコンテナを実際に動かして確認しながら、動いているコンテナの様子をざっくり眺めていきます。

前回はコンテナを作ったり壊したりしました -> さわっておぼえるDocker入門🐳#1

目的

Dockerを触りながら、コンテナの様子を確認したり、コンテナ内のシェルを使用できるようになる

今回は、下記の操作を行います。

  • コンテナのメタデータを確認
  • コンテナのステータスを確認
  • コンテナのシェルにアクセス
  • ubuntuコンテナにパッケージをインストール
  • コンテナのプロセスを確認

環境

  • macOS Mojave 10.14.6
  • Docker engine 19.03.5

まずはDockerのインストール

コンテナをアレコレしてみる

まずはコンテナを起動させてみる

以下のコマンドは、nginxのコンテナを起動します。

  • -dオプションによって、バックグラウンドでコンテナが起動します。
  • --nameオプションによって、nginxと名付けました。
docker container run -d --name nginx nginx

さらに、MySQLのコンテナも起動します。

MySQLサーバーには、rootパスワードが必要なので-eオプションを使用してランダムなパスワードを設定しています。
-eはenvironmentオプションです。

docker container run -d --name mysql -e MYSQL_RANDOM_ROOT_PASSWORD=true mysql

これで、nginxとmysqlの2つのコンテナが起動しました。

container inspect

指定したコンテナのメタデータを取得します。

以下のコマンドを実行すると、mysqlコンテナのメタデータがJSON形式で表示されます。つまりコンフィグです。

このメタデータを確認することで、どんな設定でこのコンテナが作られているのかを知ることができます。

docker container inspect mysql

container stats

メタデータではなく、現在の様子を知りたい場合は以下のようにstatsコマンドを使用します。

コマンドを実行することで、CPU使用率やRAMの占有率など、リアルタイムのデータが表示されます。

docker container stats mysql

コンテナ内のシェルにアクセスする

立ち上げたコンテナの中で作業するには、シェルにアクセスする必要があるかもしれません。

その場合は-itオプションを使用します。SSHは必要ありません。

bashを指定しbashシェルが使えるようにします。

docker container run -it --name proxy nginx bash
# root@96d294dee3b4:/# 

これで、コンテナ内でファイルをいじったり、パッケージをインストールしたりすることができます。

コンテナの「コマンド」が変化していることを確認する

コンテナの一覧を確認してみると-itオプション付きで立ち上げたコンテナは、
COMMANDの値が変化しています。

docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                 NAMES
96d294dee3b4        nginx               "bash"                   4 minutes ago       Exited (0) 12 seconds ago                         proxy
d43f74bd3fea        mysql               "docker-entrypoint.s…"   20 minutes ago      Up 20 minutes               3306/tcp, 33060/tcp   mysql
40a021da02c9        nginx               "nginx -g 'daemon of…"   22 minutes ago      Up 22 minutes               80/tcp                nginx

シェルを使用するために、デフォルトで使用するプログラムを「bash」に指定したので、COMMANDが書き換わっています。

したがって、シェルからexitした場合には、コンテナは停止状態になります。
コマンドで指定したプログラムが停止した時には、コンテナは停止するからです。

Ubuntuを起動してみる

以下のコマンドでubuntuイメージからコンテナを起動し、シェルにアクセスします。

docker container run -it --name ubuntu ubuntu

ubuntuはaptというパッケージマネージャを使用してパッケージのダウンロードを行うことができます

まずはパッケージリストを更新します。

apt-get update

さらに、curlという Httpリクエストを行うパッケージをインストールしてみます。

apt-get install -y curl

試しにGoogle.comにHttpリクエストを送信してみると、
レスポンスがちゃんと返ってきます。

curl google.com
# <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
# <TITLE>301 Moved</TITLE></HEAD><BODY>
# <H1>301 Moved</H1>
# The document has moved
# <A HREF="http://www.google.com/">here</A>.
# </BODY></HTML>

ubuntuコンテナを停止する

先ほどと同じくexitすることで自動的にコンテナも停止します。

docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                 NAMES
9a881f1a18c6        ubuntu              "/bin/bash"              12 minutes ago      Exited (0) 2 seconds ago                          ubuntu
96d294dee3b4        nginx               "bash"                   23 minutes ago      Exited (0) 19 minutes ago                         proxy
d43f74bd3fea        mysql               "docker-entrypoint.s…"   39 minutes ago      Up 39 minutes               3306/tcp, 33060/tcp   mysql
40a021da02c9        nginx               "nginx -g 'daemon of…"   41 minutes ago      Up 41 minutes               80/tcp                nginx

ubuntuのCOMMANDをみると、デフォルトで起動するプログラムがbashであることを確認できます。
そのため、特に何も設定しなくてもbashが起動しました。
さらにbashからexitすることで、コンテナも停止しました。

コンテナを再起動する

もう一度このコンテナに入りたい場合は、container startを使用します。
container runだと、新しいコンテナが起動してしまうので、先ほどダウンロードしたcurlはありません。

runの時は-itだったところが-aiになっていることに注意です。

docker container start -ai ubuntu

バックグラウンド起動中のコンテナに入る

では、バックグランドで起動しているコンテナ内のシェルにアクセスしたい場合はどうすれば良いでしょうか。

container execコマンドを使用します。
今回は先ほどバックグラウンドで起動したmysqlコンテナを使用します。
bashシェルを指定することを忘れないでください。

docker container exec -it mysql bash

コンテナのプロセスを確認する

この時、mysqlコンテナ内ではどのようなプロセスが動いているのでしょうか。
ps auxコマンドを使用することで、起動中のプロセス一覧を確認できます。

まずはmysqlコンテナがpsコマンドを使用できるよう、必要なパッケージを更新&インストールします。

最初にパッケージの更新。

apt-get update

続いて、パッケージをインストールします。

apy-get install -y procps

これでpsコマンドが利用可能です。

早速、mysqlコンテナのプロセスを確認してみます。

ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
mysql        1  0.9 20.0 2135592 408776 ?      Ssl  13:26   0:32 mysqld
root       197  0.0  0.1   3868  3244 pts/0    Ss   14:15   0:00 bash
root       602  0.0  0.1   7640  2724 pts/0    R+   14:20   0:00 ps aux
  • まず一番上、mysqlのデーモンがバックグランドで起動中です。
  • 次に真ん中、これは今使っているbashのプロセスです。
  • 最後に、たった今打ち込んだps auxのプロセスが表示されています。

今回は、exitしてもコンテナは停止しません。
なぜなら、mysqlのデーモンがバックグラウンドで動いているからです。

まとめ

  • コンテナのメタデータを確認
  • コンテナのステータスを確認
  • コンテナのシェルにアクセス
  • ubuntuコンテナにパッケージをインストール
  • コンテナのプロセスを確認

上記を実際に動かして確認しながら、動いているコンテナの様子をざっくり眺めました。🐳

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?