😸

dockerさんでコンテナを操作する

2021/02/02に公開

はじめに

くーばねてすをやっつけるためにこれまでに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イメージで作成したコンテナはコマンドを入力することで自由にカスタムすることができる。アップデートしてパッケージをインストールする。

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