こんにちは。まゆみです。
Dockerに関する記事をシリーズで書いています。
今回の記事では、
- Docker hub から引っ張ってくるDockerfile のバージョンはどう指定したら良いの?
- Docker Containerをバックグラウンドで動かす意味と利点
について書いていこうと思います
ではさっそく始めていきますね。
#Dockerfile のバージョンを使い分けるには?
Dockerfileのバージョンを指定するには、『Tag』が必要になります
<docker image>:(tag)
と、docker imageの後に : (コロン) tag名を書いて、バージョンを指定することになります。
コロン以下でバージョンを指定しなければ、最新バージョンのDocker Image が使われます。
最新のバージョンは、:latest で表されます。
docker run ubuntu
と
docker run ubuntu:latest
は同じという意味になります
では、実際にtag名を何もしないでubuntuのDocker Container を起動させてみます
docker run ubuntu cat /etc/*release*
上記のコードを実行してみましょう
ちなみに docker run ubuntu <別のコマンド> とすると、デフォルトのコマンドが<別のコマンド>に上書きされます。上記のコードですと、/etc/release のファイルの中身を表示してくれます
version 20.04と、ターミナルに表示されました。
Docker hub にアクセスして、バージョン別のDockerfileを調べてみましょう
Supported tags and respective Dockerfile linksと見出しのついたところにまとめてあります
次に、違うバージョンのubuntu Dockerfile からDocker Image を作ってみたいと思います
一番上に書かれているバージョン18.04を使ってみましょう。
ubuntuの後ろに
:18.04
:bionic-20210512
:bionic
と書かれていますが、どれを指定しても同じバージョンが指定されます。
docker run ubuntu:18.04 cat /etc/*release*
最新バージョンからDocker Container を実行した後ですが、今回は違うバージョンの物を使ってContainerを実行しているので、
Unable to fine image "ubuntu:18.04" locally
(あなたのパソコン内にはubuntu:18.04が見つかりません)
と、Docker hub からfileを引っ張りImage を作るところからはじめています。(仮に同じバージョンからContainerを作る時は、イメージキャッシュから引っ張ってきます)
detached mode とforeground modeについて
では次に、今回の記事の2つ目のトピック、detached mode について書いていきます
第1回目の記事で、Container は為すべきタスクやプロセスが残っていないと、すぐにContainerから抜けてしまうと書かせていただきました。
逆もしかりで、バックグラウンドで常に動かし続けたいプロセスもありますよね。
ただ、プロセスがフォアグラウンドで動かされている時は、次のコマンドを出すのが面倒になります。
例えば
docker run ubuntu sleep 1000
として、ubuntuのContainer に1000秒間の待機させるコマンドを合わせてうってみましょう。
上のスクショから分かるように、フォアグラウンドでContainerが動いている時は
新たなコマンドを出す事も出来ないし
Ctrl + C や q でもストップさせることもできません。
別のコマンドプロンプトを開いて、コマンドを出すことはできますが、面倒くさいですよね。
そのような場合、バックグラウンドでContainerを動かすことができます
docker run -d ubuntu sleep 1000
上記のコードのように、『-d』というオプションを付けて実行します
その結果は下のスクショのようになります
-d というオプションを付けて実行し、Container ID のみ返されたらバックグラウンドでContainer を動かすことに成功しています。
Container が動き続けていても、1000秒待つことなしに、コマンドをさらに打つこともできます。
また、Cotainer のSTATUS もUpになっていますから、抜けていないことが分かります。
もし、detached mode (バックグラウンドでContainerを動かしていること)を、もう一度アタッチするには
docker attach <container ID>
とすればOKです。
#まとめ
今回の記事はこの辺で締めくくらせていただきますね
お役に立てれば幸いです。