dockerさんでコンテナを操作する
はじめに
くーばねてすをやっつけるためにこれまでにLinuxさんとAWSさんと仲良くさせていただいたが、新たなステージに上がるためについにdockerさんに会いに行くことにした。dockerさんと仲良くなることでコンテナシステムの仕組みの理解とくーばねてすを倒すための調査をする。
概要
■対話型コンテナの作成
■対話型コンテナでコンテナをカスタムする
■複数のターミナルでコンテナを操作する
をまとめた!
■対話型コンテナの操作
コンテナを使うと仮想サーバーのようにログインしてシェルでコマンドを実行することができる。
シェルでコマンドを実行するするには、
対話型コンテナの起動
$ docker run -it コンテナ名
オプションの-iはキーボードからの入力を標準入力としてシェルに伝える。
-tは端末(ホスト)とシェルをつなげてコマンドを表示してくれる。
キーボードからの入力を有効にして、端末(ホスト)とシェルをつなぎコマンドを有効にできるから対話型シェルを有効にしてくれるということだ。
やってみる
$ docker run -it --name centos centos:7 bash
[root@f679b1eae2b9 /]
実行中コンテナの内部IPアドレスを表示
$ hostname -i
172.17.0.2
対話モードでのコンテナの停止
対話型コンテナからでるにはexitを入力する。同時にコンテナも停止される。
[root@f679b1eae2b9 /]#exit
一つの仮想サーバーのようにあつかえる(^^)
■対話型コンテナでコンテナをカスタムする
ubuntuやcentosイメージで作成したコンテナはコマンドを入力することで自由にカスタムすることができる。アップデートしてパッケージをインストールする。
[root@f343b1eae2b3 /]#yum update -y
略
[root@f343b1eae2b3 /]# yum install -y iputils net-tools iproute bind-utils
略
compleat
カスタムしたコンテナを再利用するためにはイメージを作らなければならない。コンテナはイメージからしか作成できないからだ。イメージをローカルリポジトリに保存する。
$ docker commit コンテナID リポジトリ名:タグ
やってみる
[root@f343b1eae2b3 /]#exit※シェルをでる
$ docker ps -a※終了したコンテナも含め表示する
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c39fdc25f8e5 centos "bash" 17 minutes ago Exited (127) 8 minutes ago awesome_agnesi
略
$ docker commit c39fdc25f8e5 mytest:centos1
sha256:cb6999c4646b3bf296a1e8f03a657b96a4a740981f8d05b31abb001dbf1f2dd3
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mytest centos1 cb6999c4646b 21 seconds ago 365MB
念のためこのイメージからコンテナを起動してアップデートやパッケージインストールをしてみたがちゃんと最新の状態だった!(^^)
コンテナを再利用できるようにイメージを作成して同じ内容で再起動することができた。
■複数のターミナルの操作
1つのコンテナは複数のターミナルから操作することができる。
↓起動中のコンテナにコマンド作業ができるように入る
$ docker exec -it コンテナ名(ID) bash
複数のユーザーが別々のターミナルから操作することはできるが、じつはコンテナ自体は複数のユーザー仕様に設計されていない。
Linuxでは複数のユーザーで管理できるようにすべてのプロセスが把握できるようになっているがdockerのコンテナは目的のプロセスを実行することだけを考えられたシンプルな構造になっているので、複数のユーザーがコンテナで操作していても自分のプロセスしか確認できない。コンテナは目的の機能を優先してシングルユーザー向けに設計されている。
まとめ
ねむい!(>_<)
Discussion