1
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】Container を作って削除するまでを時系列的に解説 no.1

Last updated at Posted at 2021-05-27

パンプキン カフェ (1).png

こんにちは、まゆみです。

Dockerについての記事をシリーズで書いています。

前回の記事で、Dockerの学習準備編として、

  • Docker を学ぶべき理由
  • Dockerは水面下ではどのように動いているのか
  • Dockerで使われる用語を少し紹介

をざっくり、解説させていただきました。

今回の記事では、実際にコマンドラインを利用してDocker Client(CLI)からDocker Server に命令を出してみたいと思います

#最初に覚えるべきコマンドは「run」

Docker Imagesは、あなたが自分で書いたDockerfileからも作ることができますが、今回の記事では、Docker hubにアクセスしてDockerfile からImageを作っていこうと思います。

Docker hub.png

上記のイラストで言えば、ピンクの点線で区切られている地点からのContainer の作成になります。(DockerfileからDocker Imageを作る方法はまた別の記事に書きます)

Container を作り実行してくれるのは「run」というコマンドになります

docker run <イメージ名>

では、Docker hub にある『hello-world』を引っ張ってきて、Container を作ってみましょう。(Dockerfileは下記のようにDucker hub にあります)

2021-05-26_14-08-47.png
引用元:Docker hub

docker run hello-world

上記のコードを実行すると下記のような結果になります

2021-05-26_13-21-47.png

ここで注目してほしいのが、

Unable to find image 'hello-world:latest' locally

と書かれている部分です。

上記の文を翻訳すると

あなたのパソコン内に最新バージョンのhello-world imageは見つかりませんでした

ということになります

そしてその次の文には

Pulling from Library/hello-world(ライブラリーから引っ張ってきます)

と書かれています

docker run hello-world.png

すなわち、

Docker client から

Docker server に命令が出され

Docker server がキャッシュから目当てのimageがないか探します。

初めてimageを作る時はキャッシュにはimageが無いので、Docker hub に行き目当てのfileからimageを作る

のです。

一度hello-worldでコンテナを実行した後は、キャッシュからimage を引っ張ってContainerを作ることになります

#ps と ps -a コマンド

では次に、実行『中』と、実行『された後』のContainer の情報を見るにはどうしたら良いでしょうか?

また、どのような時にContainer の情報を見ることが必要なのでしょうか?

Container が作られると、それぞれのContainer に、Container ID や名前が付与されます。

それらのContainer に対して、何かしらの命令を出したい時 (Container を削除したい、Container に別のコマンドを実行させたいetc...) にはContainer ID か名前を添えなければならないので、そのようにIDや名前を調べないといけない時、Container 情報を表示する事の出来るコマンドは便利です。

ps は実行『中』のContainer を

ps -a は実行『された後』のContainer も含めて

表示してくれます

下記に、実行結果のスクショを貼っておきます

2021-05-27_9-05-04.png

上のスクショから分かるように、現在実行中のContainer はありませんので、

docker ps

の次の行には、Container が書かれていません。

しかし、

docker ps -a (docker ps --allでも可)

では、過去に実行したContainerを表示してくれます。

#rm コマンド・system prune コマンド

では次に、今現在、溜まっているContainer を削除するコマンドを紹介します

docker rm <container id> (もしくはcontainer name)

rm コマンド(removeの略)になります

container id もしくはcontainer name が必要なので、先ほど紹介した docker ps -a コマンドも合わせて使って、使わないContainer を削除しましょう

2021-05-27_9-23-40.png

上記のように、ps -a で調べた Container ID をrm の後ろにコピペします。

上記のコマンドを実行して、Container ID のみ表示されれば、そのContainer は削除されています

2021-05-27_9-31-03.png

今現在、使っていないContainer が複数あるので、rm で一つづつ削除するのが面倒くさい時

docker system prune

で一気に削除する事ができます

Are you sure you want to continue? [y/N]

本当に消しても良いのか?

と聞かれますので、『y』を入力してください。

すると、Container は全て消されます。

2021-05-27_9-39-18.png

#docker images コマンド・rmi コマンド

ImageとContainer は別物ですね。

Container はImage から作られるインスタンスになります。

なのでrm やsystem prune でContainer を削除してもImage は残っています。

今どんなImage が残っているのか見るには

docker images

を使って調べることができます

2021-05-27_9-45-50.png

では上記の赤で囲まれているimages を削除します

docker rmi <image id>

下記のようになれば、images は削除されています
2021-05-27_9-52-19.png

注意!
Imageを削除する前に、その削除したいImageから作ったContainer があれば、 先にContainer を削除してからImage を削除してください。

#実行中のDocker にさらにコマンドを付け加えるには?

では次の説明に入る前に、Docker でUbuntuというOSのContainerを実行してみましょう

2021-05-27_10-00-11.png

docker run ubuntu 

でubuntuのContainerが作られ実行されましたが、その後すぐに

docker ps (実行『中』のContainerを表示するコマンド)

で見ても、どうやらubuntu のContainer は実行中ではないようです

実際 

docker ps -a (実行『された後』のContainerを表示するコマンド)

で見ると、ubuntu のContainer が表示されています

そしてSTATUSは『Exited』になっています。

それはどういうことかというと

Container はVirtual Machine と違い、OSをホストするものではなく、特定のタスクやプロセスを実行するものである。
ゆえに、Container 内に、為すべきタスクやプロセスがなくなるとExited される

ということです。

ただ、

docker run ubuntu sleep 100

で、100秒待機させてみます

そして、docker ps -a コマンドで見てみると

STATUS のところが Exited ではなく、UPになっているのが分かります(redisも実行中になっています)

2021-05-27_10-11-45.png

##exec コマンドで、実行中のContainer にコマンドを実行させる

では、STATUSがUPになっているContainer にさらにコマンドを実行させるにはどうしたら良いでしょうか

docker exec <container ID> コマンド

となります

exec はexecute の略になります

例えば、100秒の待機時間をもうけたubuntuの中のディレクトリーのリストを見てみましょう

docker run ubuntu sleep 100

2021-05-27_10-27-19.png

その後、別のコマンドラインを開き

docker ps 

で見ると、ubuntu のContainer がまだ実行中であるのが分かります

そこで調べたContainer ID を使い

docker exec <container ID> コマンド

あなたの実行したいコマンドを入れて、実行してみましょう

2021-05-27_10-30-04.png

#まとめ
今回の記事では、前回の記事から一歩踏み込んで、実際のコマンドプロンプトを使い、色んなコマンドを使ってみました。

そして、Containerを作って、そのContainer ID を調べたり、削除したり、さらに他のコマンドを実行させるまでをまとめてみました。

お役に立てれば幸いです。<(_ _)>

1
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
1
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?