SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【Docker】入門③ コマンドを用いたDockerコンテナの基本操作

前回Linuxサーバ(EC2)上にDockerソフトをインストールしました。
今回はDockerコマンドを学習しながらいろいろ試し、コンテナ操作の基本を確認していきます。

なので前提としては以下の記事と同様にインストールのみが完了している状態とします。

www.wantanblog.com

コンテナのライフサイクルに関わるコマンド

f:id:wantanBlog:20200206235422p:plain

ここではイメージからコンテナの生成、起動、そして停止削除などのライフサイクルに関わるコマンドを扱います。

私も初心者ですが、イメージに関するコマンドの区別と、コンテナをどの状態からどの状態に遷移させるためのコマンドなのかというところをして意識おけば十分かと思います。

コンテナ一覧表示

コンテナの一覧表示にはコンテナ用のlsコマンドを使用します。
注意点としてはそのまま打つと起動中のコンテナ一覧が表示される点でしょうか。

・起動中の一覧表示

docker container ls

・停止中も含めて一覧表示

docker container ls -a

ライフサイクル関連のコマンドを使用する際に「CONTAINER ID」を知るために使用するので先にご紹介です。

コンテナの生成

イメージからコンテナを生成するためにはイメージ名を指定したcreateコマンドを使用します。
気を付けるのはあくまでコンテナの「生成」なので、起動できる状態のコンテナをつくるということで起動はしません。

またコンテナ生成の際にはスナップショットが作成されるようです。

docker container create  --name "test" nginx

「--name」は生成するコンテナを命名するオプションです。

コンテナの起動

停止中(または生成状態)のコンテナをコンテナ名を指定して起動します。

docker container start test
コンテナの停止

起動中のコンテナをコンテナ名を指定して停止します。

docker container stop test
コンテナの再起動

起動中のコンテナをコンテナ名を指定して再起動します。

docker container restart test
コンテナの削除

停止中のコンテナを削除します。

docker container rm test
コンテナの生成と起動

以前の記事でも使用したrunコマンドです。
このコマンドはイメージからコンテナを生成すると同時に起動を行うコマンドでした。

docker container run --name webserver -d -p 80:80 nginx

少しだけオプションを確認しておきます。

見てわかる通りにコンテナを命名するオプションです。

--name webserver

生成と同時にバックグラウンド実行を行うオプションです。

-d

ポート番号を指定するオプションです。
前半部でホスト(今回の場合Linuxサーバ)のポートを指定、後半部でコンテナ自体のポート番号を指定します。

-p 80:80


今回は使っていませんが以下のようなオプションもあります。

標準入力を開くオプション。

-i

端末デバイスを使用するオプション。

-t

これらを使用すると例えばCentOSであれば、コンテナ上のOSでコマンド実行できます。

docker container run -it --name testos centos /bin/bash

・出力結果

[root@d1a0b8a2794a /]#

ここまでくれば、普通のLinuxサーバと同様にコマンドが実行できます。
確認できたらexitでログアウトできます。


コンテナの中断(一時停止)

起動中のコンテナを中断します。

docker container pause test

中断しているコンテナはlsコマンドでは起動中に分類されるようです。
ステータスを確認すると中断していることがわかります。

Up 2 minutes (Paused)

コンテナの再開

中断中のコンテナを再開します。

docker container unpause test

稼働中のコンテナへの操作

ここでは実際に本番環境などで稼働中のコンテナに対して行う操作を確認していきます。
学習環境では有効な活用のイメージが少ししにくいです。

稼働中のコンテナへの接続

以下「testos」というCentOSのコンテナを稼働(起動)している状態を想定しています。
コンテナの起動(アタッチ)にたattachコマンドを使います。

docker container attach testos

先ほどターミナルから標準入力したときと同じようにログインしたような状態になったかと思います。

・出力結果

[root@d1a0b8a2794a /]#

抜け出す(デタッチする)には「Ctrl+q」を押します。

おなじみの「Ctrl+c」でもデタッチできますが、デタッチと同時にコンテナを停止させてしまうようです。

本番稼働中でも「Ctrl+c」でコンテナが停止していまうというのはなかなか怖い気もしますね。

稼働コンテナのプロセス確認

稼働中のコンテナのプロセスをアタッチせずに確認するにはtopコマンドを用います。

docker container top testos

例えば稼働中のCentOSコンテナのプロセスを確認すると以下のように表示がされます。

UID PID PPID C STIME TTY TIME CMD
root 14145 14096 0 17:56 pts/0 00:00:00 /bin/bash

やはりLinuxコマンドをある程度知っていると断然やりやすい分かりやすいですね。

稼働コンテナのポート確認

稼働中のコンテナとホストマシンのポートの転送状況を確認できます。
以下の例ではtestという名前の「nginx」コンテナに対して実行しています。

docker container port test

・出力結果

80/tcp -> 0.0.0.0:80

ここではコンテナの80番ポートからホストの80番ポートに転送が行われていることが確認できます。

稼働コンテナの名前変更

そのままrenameです。
以下の例では「testos 」というコンテナを「devos」という名前に変更しています。

docker container rename testos devos
稼働コンテナとホストのファイル操作

ホストとコンテナ間でファイルのやり取りがコマンドにより実行できます。

docker container cp test.txt devos:/tmp/container.txt

上記の例ではホスト⇒コンテナでファイルをコピーしていますが、ホストとコンテナの順序を逆にすれば逆のやり取りもできます。

稼働コンテナの差分確認

diffコマンドによりイメージからの差分を確認できます。

docker container diff devos

なにかインストールとかすると差分がダーっとでるのでどうすれば有効活用できるんだろう。



今回はここまで、もうしばらくはただのコマンド確認が続きます。