🙌

Dockerさんでイメージからコンテナを作る

2021/02/01に公開

はじめに

くーばねてすをやっつけるためにこれまでにLinuxさんとAWSさんと仲良くさせていただいたが、新たなステージに上がるためについにdockerさんに会いに行くことにした。dockerさんと仲良くなることでコンテナシステムの仕組みの理解とくーばねてすを倒すための調査をする。

概要

■コンテナのライフサイクル
■ライフサイクルの流れ
・イメージのダウンロード
・イメージを表示する
・イメージを元にコンテナを作成する
・コンテナの状態を確認
・コンテナを終了する
・終了状態のコンテナのログを表示する
・コンテナを再開する
をまとめた(^_-)-☆

■コンテナのライフサイクル

コンテナには3つの状態がある。
イメージ状態:コンテナの設計内容(設計書段階)で活動前の状態。
実行中:コンテナが作成され、プロセスが実行中、活動中。
停止中:プロセスが終了したログが保存された状態。
イメージ→実行中→停止中の3段階のライフサイクルをコンテナは進んでいく。

■ライフサイクルの流れ

コンテナを作成するにはイメージをリモートリポジトリからダウンロードする。
コンテナは必ず何かしらのイメージから作成される。

イメージのダウンロード

イメージのpull
$ docker pull  イメージ名
CentOS7のイメージをpullする
$ docker pull centos:7
7: Pulling from library/centos
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
docker.io/library/centos:7

ダウンロードしたイメージを表示する

$  docker images
REPOSITORY                   TAG       IMAGE ID       CREATED         SIZE
centos                       7         8652b9f0cb4c   2 months ago    204MB

※ここで出てくるイメージIDやリポジトリ名:タグ名はこれからコンテナの操作等でよく使う。

イメージを元にコンテナを作成する(実行状態にする)

コンテナを起動して対話型シェルを起動する
$ docker run -it --name centostest centos:7 bash
[root@51714e00567b /]# 

↑「centos:7」は8652b9f0cb4c(IMAGE ID)でもOK。

■docker run オプション
今は使わないものもあるがひとまずまとめた。
|オプション|意味|
| --- | --- | --- |
|--name [コンテナ名]|コンテナに任意の名前をつける|
|-i|対話するようにシェルなどでコンテナ内で操作ができる|
|-t|コンテナの標準出力とホストの出力をつなげる窓口を作る(tty)|
|-d [イメージ名]|コンテナ内に入らず、コンテナをバックグラウンドで動作させる|
|-p [ホスト側のポート番号]:[コンテナのポート番号]|コンテナのポートをホスト側でも使えるようにポート転送する|
|-v [ホスト側のディレクトリパス]:[コンテナ内のディレクトリパス]|dockerコンテナとホスト間でファイルを共有する|
|-link [コンテナ識別子] : [エイリアス]|dockerコンテナ同士を繋ぐ|
|-rm|コンテナ内でのコマンドの実行が終わったらコンテナを自動で削除する|

なので、
$ docker run -it --name centostest centos:7 bash  は、
centos7イメージをcentostestという名前でttyをアタッチして対話できるようにbashでコンテナ内で操作ができるようにしたってことになる。

またCentosやubuntuはコマンドを入力しないで実行すると作成されても一瞬でコンテナは停止してしまうので、必ずコマンドとしてシェルを指定すること。(bashやshを入力する)↓のログで説明する。

コンテナの状態を確認

$  docker ps -a
CONTAINER ID IMAGE    COMMAND CREATED        STATUS                      PORTS    NAMES
51714e00567b centos:7 "bash"  23 minutes ago Exited (127) 12 seconds ago         centostest

centos:7のコンテナが終了している。↑
■docker psオプション
|オプション|意味|
| --- | --- | --- |
|オプションなし|実行中コンテナだけ表示する|
|-a|実行中コンテナも停止中コンテナも表示する|
|-f|条件を満たすコンテナだけにフィルタリング|

コンテナを終了する

$ docker stop コンテナID(コンテナ名)
または
$ docker kill コンテナID(コンテナ名)

docker kill の方はプロセスの強制停止の意味がありdocker stopが効かない非常時に使われるものだそうだ。

$ docker stop 0a8c8d068229
0a8c8d068229

終了状態のコンテナのログを表示する

ログを表示する
$ docker logs オプション コンテナ名
$ docker logs 0a8c8d068229

Hello from Docker!
This message shows that your installation appears to be working correctly.
略

コンテナを再開する

停止状態のコンテナを再開する。

$ docker start オプション コンテナID(コンテナ名)

■docker start オプション
|オプション|意味|
| --- | --- | --- |
|-a|起動と同時にコンテナへアタッチする。コマンド操作などはできない。標準出力と標準エラー出力を表示する |
|-i|起動と同時にコンテナへアタッチする。コマンド操作ができる。標準入力ができる|

まとめ

最近職場の室温が高すぎて、汗が止まらないので若干キレたらストーブの番人になった。
私の体感温度が高いからか社長が震えている。やっぱり男性だからプライドが邪魔してストーブ付けてくださいと言えないんだろうか。
なのでたまに寒いんですよね?といってつけてあげてる。(^^)

Discussion