【Docker】Dockerfileのバージョン・detached modeについて no.3

![パンプキン カフェ (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/1ef69ff5-4203-4371-5fb0-36d3be146fa7.png)


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

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

今回の記事では、

<ul>
<li>Docker hub から引っ張ってくるDockerfile のバージョンはどう指定したら良いの？</li>

<li>Docker Containerをバックグラウンドで動かす意味と利点</li>
</ul>


について書いていこうと思います

ではさっそく始めていきますね。

#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* のファイルの中身を表示してくれます



![2021-05-28_9-44-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/b6214fef-5ffb-bb66-631b-53330166dd9a.png)

version 20.04と、ターミナルに表示されました。

[Docker hub](https://hub.docker.com/_/ubuntu) にアクセスして、バージョン別のDockerfileを調べてみましょう

Supported tags and respective Dockerfile linksと見出しのついたところにまとめてあります


![2021-05-28_9-49-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/1f28e1f9-242b-2207-490d-e60c5c37e37b.png)
引用元：Docker hub

次に、違うバージョンのubuntu Dockerfile からDocker Image を作ってみたいと思います

一番上に書かれているバージョン18.04を使ってみましょう。

ubuntuの後ろに

>:18.04
:bionic-20210512
:bionic


と書かれていますが、どれを指定しても同じバージョンが指定されます。


```
docker run ubuntu:18.04 cat /etc/*release*
```

![2021-05-28_9-56-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/a1cddd88-af29-2cd6-74df-c99746e4ea1c.png)

最新バージョンからDocker Container を実行した後ですが、今回は違うバージョンの物を使ってContainerを実行しているので、

Unable to fine image "ubuntu:18.04" locally 
(あなたのパソコン内にはubuntu：18.04が見つかりません)

と、<font color="Red">Docker hub からfileを引っ張りImage を作る</font>ところからはじめています。(仮に同じバージョンからContainerを作る時は、イメージキャッシュから引っ張ってきます)

# detached mode とforeground modeについて

では次に、今回の記事の2つ目のトピック、detached mode について書いていきます

[第1回目の記事](https://qiita.com/Mayumi_Pythonista/items/93a884507355855c09fd#%E5%AE%9F%E8%A1%8C%E4%B8%AD%E3%81%AEdocker-%E3%81%AB%E3%81%95%E3%82%89%E3%81%AB%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E4%BB%98%E3%81%91%E5%8A%A0%E3%81%88%E3%82%8B%E3%81%AB%E3%81%AF)で、Container は為すべきタスクやプロセスが残っていないと、すぐにContainerから抜けてしまうと書かせていただきました。

逆もしかりで、<font color="Red">バックグラウンドで常に動かし続けたいプロセス</font>もありますよね。

ただ、プロセスがフォアグラウンドで動かされている時は、次のコマンドを出すのが面倒になります。

例えば

```
docker run ubuntu sleep 1000
```

として、ubuntuのContainer に1000秒間の待機させるコマンドを合わせてうってみましょう。

![2021-05-28_11-02-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/abfc809d-3ddb-3a4d-f965-70e2b4f60949.png)

上のスクショから分かるように、フォアグラウンドでContainerが動いている時は

>新たなコマンドを出す事も出来ないし

>Ctrl + C や　q でもストップさせることもできません。

別のコマンドプロンプトを開いて、コマンドを出すことはできますが、面倒くさいですよね。

そのような場合、<font color="Red">バックグラウンドでContainerを動かす</font>ことができます

```
docker run -d ubuntu sleep 1000
```
上記のコードのように、『-d』というオプションを付けて実行します

その結果は下のスクショのようになります


![2021-05-28_11-14-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/e5cb988a-05ed-159f-0620-64bab7cc9c7f.png)

-d というオプションを付けて実行し、Container ID のみ返されたらバックグラウンドでContainer を動かすことに成功しています。

Container が動き続けていても、1000秒待つことなしに、コマンドをさらに打つこともできます。

また、Cotainer のSTATUS もUpになっていますから、抜けていないことが分かります。

もし、detached mode (バックグラウンドでContainerを動かしていること)を、もう一度アタッチするには

```
docker attach <container ID>
```
とすればOKです。


#まとめ

今回の記事はこの辺で締めくくらせていただきますね

お役に立てれば幸いです。