ツヨシのブログ

技術的な事とか日常の事とか徒然なるままに

スポンサーリンク

【Day004】Dockerを使ったKaggle開発環境の構築(その2)::Ubuntuを実行する

スポンサーリンク

こんにちは、ツヨシです。 9月になり、一気に涼しくなりましたね。

あと4ヶ月で今年も終わりかと思うと胸熱です。

さて前回、Dockerを使ってhello-worldのイメージを実行してみました。

ginga0118.hatenablog.com

今回は、LinuxディストリビューションUbuntuを実行します。そのなかで、コンテナの更新や、コンテナの実行、再起動などを行います。

Ubuntuのイメージを持ってくる

まず、Docker hubからUbuntuイメージを持ってきて起動させます。コマンドとしては"docker run -it bash"となります。すでにUbuntuイメージを持っている場合は起動だけになるのですが、まだダウンロードしていない場合はダウンロードが必要になり少し時間がかかります。

$ docker run -it ubuntu bash

Ubuntuのイメージはまだホストにはありませんが、ない場合にはdocker hubよりpullしてきてくれます。 その後、コンテナが作られてbashが動作するコマンドになります。

この時Docker hubより4つpullしているのが分かります。これはイメージレイヤになっています。

f:id:ginga0118:20200907213707p:plain

このイメージレイヤはそれぞれ独立しています。そのため、新しいイメージレイヤを追加することで全体として別のDockerイメージを作ることができます。つまり、もともとある部分を共通で使うことでリソースの節約を行い、新たにイメージレイヤを追加することで新しいDockerイメージを作成しコンテナを作成します。

入ったコンテナから出る場合はexitのコマンドを使います。

$ exit

Ubuntuのコンテナを更新する

Docker imageを更新する方法としてDocker fileを更新する方法と、コンテナから更新する方法があります。ここではコンテナからDocker imageを作る方法を行います。 更新する内容ですが、"test"という空ファイルを作成します。

ファイルを追加してこのレイヤを新しいレイヤとして追加したイメージを作成します。

先ほど作成したUbuntuのイメージを立ち上げます。

$ docker run -it ubuntu bash

Ubuntuが立ち上がり、bashが起動します。起動したコマンドラインより"touch"コマンドよりファイルを追加します。その後、Ubuntuから"exit"により抜け出します。

$ touch test
$ exit

これにより、コンテナ内にtestファイルが追加されたことになります。

"docker ps -a"コマンドでコンテナの状態がどのようになっているかを確認します。

$ docker ps -a

ubuntuというイメージがあり、bashコマンドが最初に実行されたことがわかります。

f:id:ginga0118:20200905050120p:plain

コンテナを再起動する

docker ps

一度、停止したコンテナを再起動します。まず、コンテナのIDと状態を確認するため、"docker ps -a"コマンドを実行します。

$ docker ps -a

この時 パラメータの"CONTAINER ID"にコンテナのIDが入ります。これは起動時のパラメータとして使うことができます。また、他のパラメータに"STATUS"があります。これは"Exited"になっいることがわかります。つまり、コンテナが稼働していなことになります。

f:id:ginga0118:20200905051836p:plain

docker restart

このコンテナを起動するわけですが一度起動して抜けたしたコンテナを再起動するには"restart"コマンドを使用します。再起動するコンテナは先ほどのコンテナIDを使います。

$ docker restart ce1afc0e2d3a

再度"docker ps -a"コマンドを実行してコンテナの状態を確認します。"Up"となっていることがわかり、コンテナが稼働しています。

f:id:ginga0118:20200905052350p:plain

docker exec

コンテナが稼働していることがわかりましたので、次にこのコンテナに入ります。コンテナに入るためには"docker exec -it "コマンドを使用します。これはコンテナを指定してコマンドを実行する命令になります。

$ docker exec -it ce1afc0e2d3a bash

f:id:ginga0118:20200905052954p:plain

detachとattach

次にコンテナから抜けます。コンテナから抜けるには今までは"exit"コマンドを使用していました。この"exit"コマンドはコンテナを抜ける際にプロセスを切って抜けます。このため"docker ps"で確認できるステータスが"Exited"になります。

このプロセスを切らずにコンテナから抜ける方法としてdetachがあります。detachをすると抜けた後のコンテナのステータスが"Up"のままになります。

detatchはコンテナに入った後"Ctl + p +q"で実行ることができます。

detach後の稼働中のコンテナに再び入ります。稼働中のコンテナに入るには"attach"コマンドを使います。 コンテナに入る方法としてはexecとattachがあります。

"attach"は稼働中のコンテナの PIC=0 のプライマリプロセスに接続して、exit するとコンテンが停止します。

execは稼働中のコンテナで別プロセスを実行します。その後exit するとそのプロセスのみが停止します。

まとめ

今回はps、restart、exec、detach、attachを実行してみました。プロセスの停止などちょっとわかりにくいですが、だんだん慣れるのではないかと思います。

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門